• 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 "include/private/SkTHash.h"
12 #include "src/gpu/GrGpu.h"
13 #include "src/gpu/GrRenderTarget.h"
14 #include "src/gpu/GrSemaphore.h"
15 #include "src/gpu/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) const 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                                      SkBudgeted,
63                                      GrProtected,
64                                      int mipLevelCount,
65                                      uint32_t levelClearMask) override;
66 
67     sk_sp<GrTexture> onCreateCompressedTexture(SkISize dimensions,
68                                                const GrBackendFormat&,
69                                                SkBudgeted,
70                                                GrMipmapped,
71                                                GrProtected,
72                                                const void* data, size_t dataSize) override;
73 
74     sk_sp<GrTexture> onCreateCompressedTexture(SkISize dimensions,
75                                                const GrBackendFormat&,
76                                                SkBudgeted,
77                                                GrMipmapped,
78                                                GrProtected,
79                                                OH_NativeBuffer* nativeBuffer,
80                                                size_t bufferSize) override;
81 
82     sk_sp<GrTexture> onWrapBackendTexture(const GrBackendTexture&,
83                                           GrWrapOwnership,
84                                           GrWrapCacheable,
85                                           GrIOType) override;
86     sk_sp<GrTexture> onWrapCompressedBackendTexture(const GrBackendTexture&,
87                                                     GrWrapOwnership,
88                                                     GrWrapCacheable) override;
89 
90     sk_sp<GrTexture> onWrapRenderableBackendTexture(const GrBackendTexture&,
91                                                     int sampleCnt,
92                                                     GrWrapOwnership,
93                                                     GrWrapCacheable) override;
94 
95     sk_sp<GrRenderTarget> onWrapBackendRenderTarget(const GrBackendRenderTarget&) override;
96 
97     sk_sp<GrGpuBuffer> onCreateBuffer(size_t sizeInBytes, GrGpuBufferType, GrAccessPattern,
98                                       const void*) override;
99 
onReadPixels(GrSurface *,SkIRect,GrColorType surfaceColorType,GrColorType dstColorType,void *,size_t rowBytes)100     bool onReadPixels(GrSurface*,
101                       SkIRect,
102                       GrColorType surfaceColorType,
103                       GrColorType dstColorType,
104                       void*,
105                       size_t rowBytes) override {
106         return true;
107     }
108 
onWritePixels(GrSurface *,SkIRect,GrColorType surfaceColorType,GrColorType srcColorType,const GrMipLevel[],int mipLevelCount,bool prepForTexSampling)109     bool onWritePixels(GrSurface*,
110                        SkIRect,
111                        GrColorType surfaceColorType,
112                        GrColorType srcColorType,
113                        const GrMipLevel[],
114                        int mipLevelCount,
115                        bool prepForTexSampling) override {
116         return true;
117     }
118 
onTransferPixelsTo(GrTexture *,SkIRect,GrColorType surfaceColorType,GrColorType bufferColorType,sk_sp<GrGpuBuffer>,size_t offset,size_t rowBytes)119     bool onTransferPixelsTo(GrTexture*,
120                             SkIRect,
121                             GrColorType surfaceColorType,
122                             GrColorType bufferColorType,
123                             sk_sp<GrGpuBuffer>,
124                             size_t offset,
125                             size_t rowBytes) override {
126         return true;
127     }
128 
onTransferPixelsFrom(GrSurface *,SkIRect,GrColorType surfaceColorType,GrColorType bufferColorType,sk_sp<GrGpuBuffer>,size_t offset)129     bool onTransferPixelsFrom(GrSurface*,
130                               SkIRect,
131                               GrColorType surfaceColorType,
132                               GrColorType bufferColorType,
133                               sk_sp<GrGpuBuffer>,
134                               size_t offset) override {
135         return true;
136     }
137 
onCopySurface(GrSurface * dst,GrSurface * src,const SkIRect & srcRect,const SkIPoint & dstPoint)138     bool onCopySurface(GrSurface* dst, GrSurface* src, const SkIRect& srcRect,
139                        const SkIPoint& dstPoint) override {
140         return true;
141     }
142 
onRegenerateMipMapLevels(GrTexture *)143     bool onRegenerateMipMapLevels(GrTexture*) override { return true; }
144 
onResolveRenderTarget(GrRenderTarget * target,const SkIRect &)145     void onResolveRenderTarget(GrRenderTarget* target, const SkIRect&) override {}
146 
addFinishedProc(GrGpuFinishedProc finishedProc,GrGpuFinishedContext finishedContext)147     void addFinishedProc(GrGpuFinishedProc finishedProc,
148                          GrGpuFinishedContext finishedContext) override {
149         SkASSERT(finishedProc);
150         finishedProc(finishedContext);
151     }
152 
153     GrOpsRenderPass* onGetOpsRenderPass(GrRenderTarget*,
154                                         bool useMSAASurface,
155                                         GrAttachment*,
156                                         GrSurfaceOrigin,
157                                         const SkIRect&,
158                                         const GrOpsRenderPass::LoadAndStoreInfo&,
159                                         const GrOpsRenderPass::StencilLoadAndStoreInfo&,
160                                         const SkTArray<GrSurfaceProxy*, true>& sampledProxies,
161                                         GrXferBarrierFlags renderPassXferBarriers) override;
162 
onSubmitToGpu(bool syncCpu)163     bool onSubmitToGpu(bool syncCpu) override {
164         return true;
165     }
166 
167     sk_sp<GrAttachment> makeStencilAttachment(const GrBackendFormat& /*colorFormat*/,
168                                               SkISize dimensions, int numStencilSamples) override;
169 
getPreferredStencilFormat(const GrBackendFormat &)170     GrBackendFormat getPreferredStencilFormat(const GrBackendFormat&) override {
171         return GrBackendFormat::MakeMock(GrColorType::kUnknown, SkImage::CompressionType::kNone,
172                                          true);
173     }
174 
makeMSAAAttachment(SkISize dimensions,const GrBackendFormat & format,int numSamples,GrProtected isProtected,GrMemoryless isMemoryless)175     sk_sp<GrAttachment> makeMSAAAttachment(SkISize dimensions,
176                                            const GrBackendFormat& format,
177                                            int numSamples,
178                                            GrProtected isProtected,
179                                            GrMemoryless isMemoryless) override {
180         return nullptr;
181     }
182 
183     GrBackendTexture onCreateBackendTexture(SkISize dimensions,
184                                             const GrBackendFormat&,
185                                             GrRenderable,
186                                             GrMipmapped,
187                                             GrProtected) override;
188 
onClearBackendTexture(const GrBackendTexture &,sk_sp<GrRefCntedCallback> finishedCallback,std::array<float,4> color)189     bool onClearBackendTexture(const GrBackendTexture&,
190                                sk_sp<GrRefCntedCallback> finishedCallback,
191                                std::array<float, 4> color) override {
192         return true;
193     }
194 
195     GrBackendTexture onCreateCompressedBackendTexture(SkISize dimensions,
196                                                       const GrBackendFormat&,
197                                                       GrMipmapped,
198                                                       GrProtected) override;
199 
onUpdateCompressedBackendTexture(const GrBackendTexture &,sk_sp<GrRefCntedCallback> finishedCallback,const void *,size_t)200     bool onUpdateCompressedBackendTexture(const GrBackendTexture&,
201                                           sk_sp<GrRefCntedCallback> finishedCallback,
202                                           const void*,
203                                           size_t) override {
204         return true;
205     }
206 
207     void deleteBackendTexture(const GrBackendTexture&) override;
208 
compile(const GrProgramDesc &,const GrProgramInfo &)209     bool compile(const GrProgramDesc&, const GrProgramInfo&) override { return false; }
210 
211 #if GR_TEST_UTILS
212     bool isTestingOnlyBackendTexture(const GrBackendTexture&) const override;
213 
214     GrBackendRenderTarget createTestingOnlyBackendRenderTarget(SkISize dimensions,
215                                                                GrColorType,
216                                                                int sampleCnt,
217                                                                GrProtected) override;
218     void deleteTestingOnlyBackendRenderTarget(const GrBackendRenderTarget&) override;
219 #endif
220 
221     const GrMockOptions fMockOptions;
222 
223     static int NextInternalTextureID();
224     static int NextExternalTextureID();
225     static int NextInternalRenderTargetID();
226     static int NextExternalRenderTargetID();
227 
228     SkTHashSet<int> fOutstandingTestingOnlyTextureIDs;
229 
230     using INHERITED = GrGpu;
231 };
232 
233 #endif
234