blob: f0a02fc7ed15e19f709edb5b08a5089dc9d67a4d [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
Mike Kleinc0bd9f92019-04-23 12:05:21 -050011#include "include/gpu/GrTexture.h"
12#include "include/gpu/vk/GrVkTypes.h"
13#include "src/gpu/vk/GrVkImage.h"
Greg Daniel164a9f02016-02-22 09:56:40 -050014
15class GrVkGpu;
16class GrVkImageView;
egdanielb2df0c22016-05-13 11:30:37 -070017struct GrVkImageInfo;
Greg Daniel164a9f02016-02-22 09:56:40 -050018
19class GrVkTexture : public GrTexture, public virtual GrVkImage {
20public:
Greg Daniel475eb702018-09-28 14:16:50 -040021 static sk_sp<GrVkTexture> MakeNewTexture(GrVkGpu*,
22 SkBudgeted budgeted,
23 const GrSurfaceDesc&,
24 const GrVkImage::ImageDesc&,
25 GrMipMapsStatus);
halcanary9d524f22016-03-29 09:03:52 -070026
Brian Salomonc67c31c2018-12-06 10:00:03 -050027 static sk_sp<GrVkTexture> MakeWrappedTexture(GrVkGpu*, const GrSurfaceDesc&, GrWrapOwnership,
Brian Salomonfa2ebea2019-01-24 15:58:58 -050028 GrWrapCacheable, GrIOType, const GrVkImageInfo&,
29 sk_sp<GrVkImageLayout>);
Greg Daniel164a9f02016-02-22 09:56:40 -050030
31 ~GrVkTexture() override;
32
Robert Phillipsb67821d2017-12-13 15:00:45 -050033 GrBackendTexture getBackendTexture() const override;
Greg Daniel164a9f02016-02-22 09:56:40 -050034
Greg Daniel4065d452018-11-16 15:43:41 -050035 GrBackendFormat backendFormat() const override { return this->getBackendFormat(); }
36
Greg Daniel164a9f02016-02-22 09:56:40 -050037 void textureParamsModified() override {}
38
Brian Osman2b23c4b2018-06-01 12:25:08 -040039 const GrVkImageView* textureView();
Greg Daniel164a9f02016-02-22 09:56:40 -050040
Brian Salomone80b8092019-03-08 13:25:19 -050041 void addIdleProc(sk_sp<GrRefCntedCallback>, IdleState) override;
42 void callIdleProcsOnBehalfOfResource();
Brian Salomon614c1a82018-12-19 15:42:06 -050043
Greg Daniel164a9f02016-02-22 09:56:40 -050044protected:
Greg Daniel52e16d92018-04-10 09:34:07 -040045 GrVkTexture(GrVkGpu*, const GrSurfaceDesc&, const GrVkImageInfo&, sk_sp<GrVkImageLayout>,
46 const GrVkImageView*, GrMipMapsStatus, GrBackendObjectOwnership);
Greg Daniel164a9f02016-02-22 09:56:40 -050047
halcanary9d524f22016-03-29 09:03:52 -070048 GrVkGpu* getVkGpu() const;
Greg Daniel164a9f02016-02-22 09:56:40 -050049
50 void onAbandon() override;
51 void onRelease() override;
52
Eric Karl914a36b2017-10-12 12:44:50 -070053 bool onStealBackendTexture(GrBackendTexture*, SkImage::BackendTextureReleaseProc*) override {
54 return false;
55 }
56
Robert Phillipsbf8bf832019-08-30 13:13:44 -040057 void willRemoveLastRef() override;
Brian Salomonb2c5dae2019-03-04 10:25:17 -050058
Greg Daniel164a9f02016-02-22 09:56:40 -050059private:
Greg Daniel52e16d92018-04-10 09:34:07 -040060 GrVkTexture(GrVkGpu*, SkBudgeted, const GrSurfaceDesc&, const GrVkImageInfo&,
61 sk_sp<GrVkImageLayout> layout, const GrVkImageView* imageView,
Greg Daniel0fc4d2d2017-10-12 11:23:36 -040062 GrMipMapsStatus);
Brian Salomonfa2ebea2019-01-24 15:58:58 -050063 GrVkTexture(GrVkGpu*, const GrSurfaceDesc&, const GrVkImageInfo&, sk_sp<GrVkImageLayout>,
64 const GrVkImageView*, GrMipMapsStatus, GrBackendObjectOwnership, GrWrapCacheable,
65 GrIOType);
kkinnunen2e6055b2016-04-22 01:48:29 -070066
Greg Daniel2d35a1c2019-02-01 14:48:10 -050067 // In Vulkan we call the release proc after we are finished with the underlying
68 // GrVkImage::Resource object (which occurs after the GPU has finished all work on it).
Brian Salomonb2c5dae2019-03-04 10:25:17 -050069 void onSetRelease(sk_sp<GrRefCntedCallback> releaseHelper) override {
Greg Daniel2d35a1c2019-02-01 14:48:10 -050070 // Forward the release proc on to GrVkImage
71 this->setResourceRelease(std::move(releaseHelper));
72 }
73
Brian Salomone80b8092019-03-08 13:25:19 -050074 void removeFinishIdleProcs();
75
Brian Salomon614c1a82018-12-19 15:42:06 -050076 const GrVkImageView* fTextureView;
Greg Daniel164a9f02016-02-22 09:56:40 -050077
78 typedef GrTexture INHERITED;
79};
80
81#endif