• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2017 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 GrMockGpu_DEFINED
9 #define GrMockGpu_DEFINED
10 
11 #include "src/core/SkTHash.h"
12 #include "src/gpu/ganesh/GrGpu.h"
13 #include "src/gpu/ganesh/GrRenderTarget.h"
14 #include "src/gpu/ganesh/GrSemaphore.h"
15 #include "src/gpu/ganesh/GrTexture.h"
16 
17 class GrMockOpsRenderPass;
18 struct GrMockOptions;
19 class GrPipeline;
20 
21 class GrMockGpu : public GrGpu {
22 public:
23     static sk_sp<GrGpu> Make(const GrMockOptions*, const GrContextOptions&, GrDirectContext*);
24 
25     ~GrMockGpu() override;
26 
27     GrThreadSafePipelineBuilder* pipelineBuilder() override;
28     sk_sp<GrThreadSafePipelineBuilder> refPipelineBuilder() override;
29 
insertFence()30     GrFence SK_WARN_UNUSED_RESULT insertFence() override { return 0; }
waitFence(GrFence)31     bool waitFence(GrFence) override { return true; }
deleteFence(GrFence)32     void deleteFence(GrFence) override {}
33 
makeSemaphore(bool isOwned)34     std::unique_ptr<GrSemaphore> SK_WARN_UNUSED_RESULT makeSemaphore(bool isOwned) override {
35         return nullptr;
36     }
wrapBackendSemaphore(const GrBackendSemaphore &,GrSemaphoreWrapType,GrWrapOwnership)37     std::unique_ptr<GrSemaphore> wrapBackendSemaphore(const GrBackendSemaphore& /* semaphore */,
38                                                       GrSemaphoreWrapType /* wraptype */,
39                                                       GrWrapOwnership /* ownership */) override {
40         return nullptr;
41     }
insertSemaphore(GrSemaphore * semaphore)42     void insertSemaphore(GrSemaphore* semaphore) override {}
waitSemaphore(GrSemaphore * semaphore)43     void waitSemaphore(GrSemaphore* semaphore) override {}
prepareTextureForCrossContextUsage(GrTexture *)44     std::unique_ptr<GrSemaphore> prepareTextureForCrossContextUsage(GrTexture*) override {
45         return nullptr;
46     }
47 
48     void submit(GrOpsRenderPass* renderPass) override;
49 
checkFinishProcs()50     void checkFinishProcs() override {}
finishOutstandingGpuWork()51     void finishOutstandingGpuWork() override {}
52 
53 private:
54     GrMockGpu(GrDirectContext*, const GrMockOptions&, const GrContextOptions&);
55 
xferBarrier(GrRenderTarget *,GrXferBarrierType)56     void xferBarrier(GrRenderTarget*, GrXferBarrierType) override {}
57 
58     sk_sp<GrTexture> onCreateTexture(SkISize,
59                                      const GrBackendFormat&,
60                                      GrRenderable,
61                                      int renderTargetSampleCnt,
62                                      skgpu::Budgeted,
63                                      GrProtected,
64                                      int mipLevelCount,
65                                      uint32_t levelClearMask,
66                                      std::string_view label) override;
67 
68     sk_sp<GrTexture> onCreateCompressedTexture(SkISize dimensions,
69                                                const GrBackendFormat&,
70                                                skgpu::Budgeted,
71                                                GrMipmapped,
72                                                GrProtected,
73                                                const void* data,
74                                                size_t dataSize) override;
75 
76     sk_sp<GrTexture> onWrapBackendTexture(const GrBackendTexture&,
77                                           GrWrapOwnership,
78                                           GrWrapCacheable,
79                                           GrIOType) override;
80     sk_sp<GrTexture> onWrapCompressedBackendTexture(const GrBackendTexture&,
81                                                     GrWrapOwnership,
82                                                     GrWrapCacheable) override;
83 
84     sk_sp<GrTexture> onWrapRenderableBackendTexture(const GrBackendTexture&,
85                                                     int sampleCnt,
86                                                     GrWrapOwnership,
87                                                     GrWrapCacheable) override;
88 
89     sk_sp<GrRenderTarget> onWrapBackendRenderTarget(const GrBackendRenderTarget&) override;
90 
91     sk_sp<GrGpuBuffer> onCreateBuffer(size_t sizeInBytes,
92                                       GrGpuBufferType,
93                                       GrAccessPattern) override;
94 
onReadPixels(GrSurface *,SkIRect,GrColorType surfaceColorType,GrColorType dstColorType,void *,size_t rowBytes)95     bool onReadPixels(GrSurface*,
96                       SkIRect,
97                       GrColorType surfaceColorType,
98                       GrColorType dstColorType,
99                       void*,
100                       size_t rowBytes) override {
101         return true;
102     }
103 
onWritePixels(GrSurface *,SkIRect,GrColorType surfaceColorType,GrColorType srcColorType,const GrMipLevel[],int mipLevelCount,bool prepForTexSampling)104     bool onWritePixels(GrSurface*,
105                        SkIRect,
106                        GrColorType surfaceColorType,
107                        GrColorType srcColorType,
108                        const GrMipLevel[],
109                        int mipLevelCount,
110                        bool prepForTexSampling) override {
111         return true;
112     }
113 
onTransferFromBufferToBuffer(sk_sp<GrGpuBuffer> src,size_t srcOffset,sk_sp<GrGpuBuffer> dst,size_t dstOffset,size_t size)114     bool onTransferFromBufferToBuffer(sk_sp<GrGpuBuffer> src,
115                                       size_t srcOffset,
116                                       sk_sp<GrGpuBuffer> dst,
117                                       size_t dstOffset,
118                                       size_t size) override {
119         return true;
120     }
121 
onTransferPixelsTo(GrTexture *,SkIRect,GrColorType surfaceColorType,GrColorType bufferColorType,sk_sp<GrGpuBuffer>,size_t offset,size_t rowBytes)122     bool onTransferPixelsTo(GrTexture*,
123                             SkIRect,
124                             GrColorType surfaceColorType,
125                             GrColorType bufferColorType,
126                             sk_sp<GrGpuBuffer>,
127                             size_t offset,
128                             size_t rowBytes) override {
129         return true;
130     }
131 
onTransferPixelsFrom(GrSurface *,SkIRect,GrColorType surfaceColorType,GrColorType bufferColorType,sk_sp<GrGpuBuffer>,size_t offset)132     bool onTransferPixelsFrom(GrSurface*,
133                               SkIRect,
134                               GrColorType surfaceColorType,
135                               GrColorType bufferColorType,
136                               sk_sp<GrGpuBuffer>,
137                               size_t offset) override {
138         return true;
139     }
140 
onCopySurface(GrSurface * dst,const SkIRect & dstRect,GrSurface * src,const SkIRect & srcRect,GrSamplerState::Filter)141     bool onCopySurface(GrSurface* dst, const SkIRect& dstRect,
142                        GrSurface* src, const SkIRect& srcRect,
143                        GrSamplerState::Filter)override {
144         return true;
145     }
146 
onRegenerateMipMapLevels(GrTexture *)147     bool onRegenerateMipMapLevels(GrTexture*) override { return true; }
148 
onResolveRenderTarget(GrRenderTarget * target,const SkIRect &)149     void onResolveRenderTarget(GrRenderTarget* target, const SkIRect&) override {}
150 
addFinishedProc(GrGpuFinishedProc finishedProc,GrGpuFinishedContext finishedContext)151     void addFinishedProc(GrGpuFinishedProc finishedProc,
152                          GrGpuFinishedContext finishedContext) override {
153         SkASSERT(finishedProc);
154         finishedProc(finishedContext);
155     }
156 
157     GrOpsRenderPass* onGetOpsRenderPass(GrRenderTarget*,
158                                         bool useMSAASurface,
159                                         GrAttachment*,
160                                         GrSurfaceOrigin,
161                                         const SkIRect&,
162                                         const GrOpsRenderPass::LoadAndStoreInfo&,
163                                         const GrOpsRenderPass::StencilLoadAndStoreInfo&,
164                                         const SkTArray<GrSurfaceProxy*, true>& sampledProxies,
165                                         GrXferBarrierFlags renderPassXferBarriers) override;
166 
onSubmitToGpu(bool syncCpu)167     bool onSubmitToGpu(bool syncCpu) override {
168         return true;
169     }
170 
171     sk_sp<GrAttachment> makeStencilAttachment(const GrBackendFormat& /*colorFormat*/,
172                                               SkISize dimensions, int numStencilSamples) override;
173 
getPreferredStencilFormat(const GrBackendFormat &)174     GrBackendFormat getPreferredStencilFormat(const GrBackendFormat&) override {
175         return GrBackendFormat::MakeMock(GrColorType::kUnknown, SkImage::CompressionType::kNone,
176                                          true);
177     }
178 
makeMSAAAttachment(SkISize dimensions,const GrBackendFormat & format,int numSamples,GrProtected isProtected,GrMemoryless isMemoryless)179     sk_sp<GrAttachment> makeMSAAAttachment(SkISize dimensions,
180                                            const GrBackendFormat& format,
181                                            int numSamples,
182                                            GrProtected isProtected,
183                                            GrMemoryless isMemoryless) override {
184         return nullptr;
185     }
186 
187     GrBackendTexture onCreateBackendTexture(SkISize dimensions,
188                                             const GrBackendFormat&,
189                                             GrRenderable,
190                                             GrMipmapped,
191                                             GrProtected,
192                                             std::string_view label) override;
193 
onClearBackendTexture(const GrBackendTexture &,sk_sp<skgpu::RefCntedCallback> finishedCallback,std::array<float,4> color)194     bool onClearBackendTexture(const GrBackendTexture&,
195                                sk_sp<skgpu::RefCntedCallback> finishedCallback,
196                                std::array<float, 4> color) override {
197         return true;
198     }
199 
200     GrBackendTexture onCreateCompressedBackendTexture(SkISize dimensions,
201                                                       const GrBackendFormat&,
202                                                       GrMipmapped,
203                                                       GrProtected) override;
204 
onUpdateCompressedBackendTexture(const GrBackendTexture &,sk_sp<skgpu::RefCntedCallback> finishedCallback,const void *,size_t)205     bool onUpdateCompressedBackendTexture(const GrBackendTexture&,
206                                           sk_sp<skgpu::RefCntedCallback> finishedCallback,
207                                           const void*,
208                                           size_t) override {
209         return true;
210     }
211 
212     void deleteBackendTexture(const GrBackendTexture&) override;
213 
compile(const GrProgramDesc &,const GrProgramInfo &)214     bool compile(const GrProgramDesc&, const GrProgramInfo&) override { return false; }
215 
216 #if GR_TEST_UTILS
217     bool isTestingOnlyBackendTexture(const GrBackendTexture&) const override;
218 
219     GrBackendRenderTarget createTestingOnlyBackendRenderTarget(SkISize dimensions,
220                                                                GrColorType,
221                                                                int sampleCnt,
222                                                                GrProtected) override;
223     void deleteTestingOnlyBackendRenderTarget(const GrBackendRenderTarget&) override;
224 #endif
225 
226     const GrMockOptions fMockOptions;
227 
228     static int NextInternalTextureID();
229     static int NextExternalTextureID();
230     static int NextInternalRenderTargetID();
231     static int NextExternalRenderTargetID();
232 
233     SkTHashSet<int> fOutstandingTestingOnlyTextureIDs;
234 
235     using INHERITED = GrGpu;
236 };
237 
238 #endif
239