1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2021 Google LLC 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef skgpu_graphite_Image_Graphite_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define skgpu_graphite_Image_Graphite_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/Image_Base_Graphite.h" 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/TextureProxyView.h" 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu { 16*c8dee2aaSAndroid Build Coastguard Worker class RefCntedCallback; 17*c8dee2aaSAndroid Build Coastguard Worker } 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu::graphite { 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Worker class Context; 22*c8dee2aaSAndroid Build Coastguard Worker class Device; 23*c8dee2aaSAndroid Build Coastguard Worker class Recorder; 24*c8dee2aaSAndroid Build Coastguard Worker 25*c8dee2aaSAndroid Build Coastguard Worker class Image final : public Image_Base { 26*c8dee2aaSAndroid Build Coastguard Worker public: 27*c8dee2aaSAndroid Build Coastguard Worker Image(TextureProxyView, const SkColorInfo&); 28*c8dee2aaSAndroid Build Coastguard Worker ~Image() override; 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Worker // Create an Image that wraps the Device and automatically flushes or references the Device's 31*c8dee2aaSAndroid Build Coastguard Worker // pending tasks when the Image is used in a draw to another canvas. 32*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<Image> WrapDevice(sk_sp<Device> device); 33*c8dee2aaSAndroid Build Coastguard Worker 34*c8dee2aaSAndroid Build Coastguard Worker // Create an Image by copying the provided texture proxy view into a new texturable proxy. 35*c8dee2aaSAndroid Build Coastguard Worker // The source texture does not have to be texturable if it is blittable. 36*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<Image> Copy(Recorder*, 37*c8dee2aaSAndroid Build Coastguard Worker const TextureProxyView& srcView, 38*c8dee2aaSAndroid Build Coastguard Worker const SkColorInfo&, 39*c8dee2aaSAndroid Build Coastguard Worker const SkIRect& subset, 40*c8dee2aaSAndroid Build Coastguard Worker Budgeted, 41*c8dee2aaSAndroid Build Coastguard Worker Mipmapped, 42*c8dee2aaSAndroid Build Coastguard Worker SkBackingFit, 43*c8dee2aaSAndroid Build Coastguard Worker std::string_view label); 44*c8dee2aaSAndroid Build Coastguard Worker textureProxyView()45*c8dee2aaSAndroid Build Coastguard Worker const TextureProxyView& textureProxyView() const { return fTextureProxyView; } 46*c8dee2aaSAndroid Build Coastguard Worker type()47*c8dee2aaSAndroid Build Coastguard Worker SkImage_Base::Type type() const override { return SkImage_Base::Type::kGraphite; } 48*c8dee2aaSAndroid Build Coastguard Worker onHasMipmaps()49*c8dee2aaSAndroid Build Coastguard Worker bool onHasMipmaps() const override { 50*c8dee2aaSAndroid Build Coastguard Worker return fTextureProxyView.proxy()->mipmapped() == Mipmapped::kYes; 51*c8dee2aaSAndroid Build Coastguard Worker } 52*c8dee2aaSAndroid Build Coastguard Worker onIsProtected()53*c8dee2aaSAndroid Build Coastguard Worker bool onIsProtected() const override { 54*c8dee2aaSAndroid Build Coastguard Worker return fTextureProxyView.proxy()->isProtected(); 55*c8dee2aaSAndroid Build Coastguard Worker } 56*c8dee2aaSAndroid Build Coastguard Worker 57*c8dee2aaSAndroid Build Coastguard Worker size_t textureSize() const override; 58*c8dee2aaSAndroid Build Coastguard Worker 59*c8dee2aaSAndroid Build Coastguard Worker sk_sp<Image> copyImage(Recorder*, 60*c8dee2aaSAndroid Build Coastguard Worker const SkIRect& subset, 61*c8dee2aaSAndroid Build Coastguard Worker Budgeted, 62*c8dee2aaSAndroid Build Coastguard Worker Mipmapped, 63*c8dee2aaSAndroid Build Coastguard Worker SkBackingFit, 64*c8dee2aaSAndroid Build Coastguard Worker std::string_view label) const override; 65*c8dee2aaSAndroid Build Coastguard Worker 66*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkImage> onReinterpretColorSpace(sk_sp<SkColorSpace>) const override; 67*c8dee2aaSAndroid Build Coastguard Worker 68*c8dee2aaSAndroid Build Coastguard Worker #if defined(GPU_TEST_UTILS) 69*c8dee2aaSAndroid Build Coastguard Worker bool readPixelsGraphite(Recorder*, const SkPixmap& dst, int srcX, int srcY) const override; 70*c8dee2aaSAndroid Build Coastguard Worker #endif 71*c8dee2aaSAndroid Build Coastguard Worker 72*c8dee2aaSAndroid Build Coastguard Worker private: 73*c8dee2aaSAndroid Build Coastguard Worker 74*c8dee2aaSAndroid Build Coastguard Worker TextureProxyView fTextureProxyView; 75*c8dee2aaSAndroid Build Coastguard Worker }; 76*c8dee2aaSAndroid Build Coastguard Worker 77*c8dee2aaSAndroid Build Coastguard Worker } // namespace skgpu::graphite 78*c8dee2aaSAndroid Build Coastguard Worker 79*c8dee2aaSAndroid Build Coastguard Worker #endif // skgpu_graphite_Image_Graphite_DEFINED 80