blob: 239f6b350d86f133ffb7282b7f847b5f2b63a37b [file] [log] [blame]
Greg Daniel164a9f02016-02-22 09:56:40 -05001/*
2 * Copyright 2015 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef GrVkTexture_DEFINED
9#define GrVkTexture_DEFINED
10
Greg Daniel164a9f02016-02-22 09:56:40 -050011#include "GrTexture.h"
12#include "GrVkImage.h"
13
14class GrVkGpu;
15class GrVkImageView;
egdanielb2df0c22016-05-13 11:30:37 -070016struct GrVkImageInfo;
Greg Daniel164a9f02016-02-22 09:56:40 -050017
18class GrVkTexture : public GrTexture, public virtual GrVkImage {
19public:
Robert Phillips67d52cf2017-06-05 13:38:13 -040020 static sk_sp<GrVkTexture> CreateNewTexture(GrVkGpu*, SkBudgeted budgeted, const GrSurfaceDesc&,
21 const GrVkImage::ImageDesc&);
halcanary9d524f22016-03-29 09:03:52 -070022
bungeman6bd52842016-10-27 09:30:08 -070023 static sk_sp<GrVkTexture> MakeWrappedTexture(GrVkGpu*, const GrSurfaceDesc&,
24 GrWrapOwnership, const GrVkImageInfo*);
Greg Daniel164a9f02016-02-22 09:56:40 -050025
26 ~GrVkTexture() override;
27
28 GrBackendObject getTextureHandle() const override;
29
30 void textureParamsModified() override {}
31
brianosmanf05ab1b2016-05-12 11:01:10 -070032 const GrVkImageView* textureView(bool allowSRGB);
Greg Daniel164a9f02016-02-22 09:56:40 -050033
egdaniel50ead532016-07-13 14:23:26 -070034 bool reallocForMipmap(GrVkGpu* gpu, uint32_t mipLevels);
jvanverth62340062016-04-26 08:01:44 -070035
Greg Danielcef213c2017-04-21 11:52:27 -040036 // In Vulkan we call the release proc after we are finished with the underlying
37 // GrVkImage::Resource object (which occurs after the GPU has finsihed all work on it).
38 void setRelease(GrTexture::ReleaseProc proc, GrTexture::ReleaseCtx ctx) override {
39 // Forward the release proc on to GrVkImage
40 this->setResourceRelease(proc, ctx);
41 }
42
Greg Daniel164a9f02016-02-22 09:56:40 -050043protected:
egdanielb2df0c22016-05-13 11:30:37 -070044 GrVkTexture(GrVkGpu*, const GrSurfaceDesc&, const GrVkImageInfo&, const GrVkImageView*,
45 GrVkImage::Wrapped wrapped);
Greg Daniel164a9f02016-02-22 09:56:40 -050046
halcanary9d524f22016-03-29 09:03:52 -070047 GrVkGpu* getVkGpu() const;
Greg Daniel164a9f02016-02-22 09:56:40 -050048
49 void onAbandon() override;
50 void onRelease() override;
51
52private:
kkinnunen2e6055b2016-04-22 01:48:29 -070053 enum Wrapped { kWrapped };
54 GrVkTexture(GrVkGpu*, SkBudgeted, const GrSurfaceDesc&,
egdanielb2df0c22016-05-13 11:30:37 -070055 const GrVkImageInfo&, const GrVkImageView* imageView);
kkinnunen2e6055b2016-04-22 01:48:29 -070056 GrVkTexture(GrVkGpu*, Wrapped, const GrSurfaceDesc&,
egdanielb2df0c22016-05-13 11:30:37 -070057 const GrVkImageInfo&, const GrVkImageView* imageView, GrVkImage::Wrapped wrapped);
kkinnunen2e6055b2016-04-22 01:48:29 -070058
jvanverth900bd4a2016-04-29 13:53:12 -070059 const GrVkImageView* fTextureView;
brianosmanf05ab1b2016-05-12 11:01:10 -070060 const GrVkImageView* fLinearTextureView;
Greg Daniel164a9f02016-02-22 09:56:40 -050061
62 typedef GrTexture INHERITED;
63};
64
65#endif