• 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/core/SkRect.h"
12 #include "include/core/SkRefCnt.h"
13 #include "include/core/SkSize.h"
14 #include "include/core/SkTextureCompressionType.h"
15 #include "include/gpu/ganesh/GrBackendSurface.h"
16 #include "include/gpu/ganesh/GrTypes.h"
17 #include "include/gpu/ganesh/mock/GrMockTypes.h"
18 #include "include/private/base/SkAssert.h"
19 #include "include/private/base/SkTArray.h"
20 #include "include/private/gpu/ganesh/GrTypesPriv.h"
21 #include "src/core/SkTHash.h"
22 #include "src/gpu/RefCntedCallback.h"
23 #include "src/gpu/ganesh/GrAttachment.h"
24 #include "src/gpu/ganesh/GrGpu.h"
25 #include "src/gpu/ganesh/GrOpsRenderPass.h"
26 #include "src/gpu/ganesh/GrSamplerState.h"
27 #include "src/gpu/ganesh/GrSemaphore.h"  // IWYU pragma: keep
28 #include "src/gpu/ganesh/GrXferProcessor.h"
29 
30 #include <array>
31 #include <cstddef>
32 #include <cstdint>
33 #include <memory>
34 #include <optional>
35 #include <string_view>
36 
37 class GrBackendSemaphore;
38 class GrDirectContext;
39 class GrGpuBuffer;
40 class GrProgramDesc;
41 class GrProgramInfo;
42 class GrRenderTarget;
43 class GrSurface;
44 class GrSurfaceProxy;
45 class GrTexture;
46 class GrThreadSafePipelineBuilder;
47 struct GrContextOptions;
48 
49 namespace skgpu {
50 enum class Budgeted : bool;
51 enum class Mipmapped : bool;
52 }
53 
54 class GrMockGpu : public GrGpu {
55 public:
56     static std::unique_ptr<GrGpu> Make(const GrMockOptions*,
57                                        const GrContextOptions&,
58                                        GrDirectContext*);
59 
60     ~GrMockGpu() override;
61 
62     GrThreadSafePipelineBuilder* pipelineBuilder() override;
63     sk_sp<GrThreadSafePipelineBuilder> refPipelineBuilder() override;
64 
makeSemaphore(bool isOwned)65     [[nodiscard]] std::unique_ptr<GrSemaphore> makeSemaphore(bool isOwned) override {
66         return nullptr;
67     }
wrapBackendSemaphore(const GrBackendSemaphore &,GrSemaphoreWrapType,GrWrapOwnership)68     std::unique_ptr<GrSemaphore> wrapBackendSemaphore(const GrBackendSemaphore& /* semaphore */,
69                                                       GrSemaphoreWrapType /* wraptype */,
70                                                       GrWrapOwnership /* ownership */) override {
71         return nullptr;
72     }
insertSemaphore(GrSemaphore * semaphore)73     void insertSemaphore(GrSemaphore* semaphore) override {}
waitSemaphore(GrSemaphore * semaphore)74     void waitSemaphore(GrSemaphore* semaphore) override {}
prepareTextureForCrossContextUsage(GrTexture *)75     std::unique_ptr<GrSemaphore> prepareTextureForCrossContextUsage(GrTexture*) override {
76         return nullptr;
77     }
78 
79     void submit(GrOpsRenderPass* renderPass) override;
80 
checkFinishedCallbacks()81     void checkFinishedCallbacks() override {}
finishOutstandingGpuWork()82     void finishOutstandingGpuWork() override {}
83 
84 private:
85     GrMockGpu(GrDirectContext*, const GrMockOptions&, const GrContextOptions&);
86 
xferBarrier(GrRenderTarget *,GrXferBarrierType)87     void xferBarrier(GrRenderTarget*, GrXferBarrierType) override {}
88 
89     sk_sp<GrTexture> onCreateTexture(SkISize,
90                                      const GrBackendFormat&,
91                                      GrRenderable,
92                                      int renderTargetSampleCnt,
93                                      skgpu::Budgeted,
94                                      GrProtected,
95                                      int mipLevelCount,
96                                      uint32_t levelClearMask,
97                                      std::string_view label) override;
98 
99     sk_sp<GrTexture> onCreateCompressedTexture(SkISize dimensions,
100                                                const GrBackendFormat&,
101                                                skgpu::Budgeted,
102                                                skgpu::Mipmapped,
103                                                GrProtected,
104                                                const void* data,
105                                                size_t dataSize) override;
106 
107     sk_sp<GrTexture> onCreateCompressedTexture(SkISize dimensions,
108                                                const GrBackendFormat&,
109                                                skgpu::Budgeted,
110                                                skgpu::Mipmapped,
111                                                GrProtected,
112                                                OH_NativeBuffer* nativeBuffer,
113                                                size_t bufferSize) override;
114 
115     sk_sp<GrTexture> onWrapBackendTexture(const GrBackendTexture&,
116                                           GrWrapOwnership,
117                                           GrWrapCacheable,
118                                           GrIOType) override;
119     sk_sp<GrTexture> onWrapCompressedBackendTexture(const GrBackendTexture&,
120                                                     GrWrapOwnership,
121                                                     GrWrapCacheable) override;
122 
123     sk_sp<GrTexture> onWrapRenderableBackendTexture(const GrBackendTexture&,
124                                                     int sampleCnt,
125                                                     GrWrapOwnership,
126                                                     GrWrapCacheable) override;
127 
128     sk_sp<GrRenderTarget> onWrapBackendRenderTarget(const GrBackendRenderTarget&) override;
129 
130     sk_sp<GrGpuBuffer> onCreateBuffer(size_t sizeInBytes,
131                                       GrGpuBufferType,
132                                       GrAccessPattern) override;
133 
onReadPixels(GrSurface *,SkIRect,GrColorType surfaceColorType,GrColorType dstColorType,void *,size_t rowBytes)134     bool onReadPixels(GrSurface*,
135                       SkIRect,
136                       GrColorType surfaceColorType,
137                       GrColorType dstColorType,
138                       void*,
139                       size_t rowBytes) override {
140         return true;
141     }
142 
onWritePixels(GrSurface *,SkIRect,GrColorType surfaceColorType,GrColorType srcColorType,const GrMipLevel[],int mipLevelCount,bool prepForTexSampling)143     bool onWritePixels(GrSurface*,
144                        SkIRect,
145                        GrColorType surfaceColorType,
146                        GrColorType srcColorType,
147                        const GrMipLevel[],
148                        int mipLevelCount,
149                        bool prepForTexSampling) override {
150         return true;
151     }
152 
onTransferFromBufferToBuffer(sk_sp<GrGpuBuffer> src,size_t srcOffset,sk_sp<GrGpuBuffer> dst,size_t dstOffset,size_t size)153     bool onTransferFromBufferToBuffer(sk_sp<GrGpuBuffer> src,
154                                       size_t srcOffset,
155                                       sk_sp<GrGpuBuffer> dst,
156                                       size_t dstOffset,
157                                       size_t size) override {
158         return true;
159     }
160 
onTransferPixelsTo(GrTexture *,SkIRect,GrColorType surfaceColorType,GrColorType bufferColorType,sk_sp<GrGpuBuffer>,size_t offset,size_t rowBytes)161     bool onTransferPixelsTo(GrTexture*,
162                             SkIRect,
163                             GrColorType surfaceColorType,
164                             GrColorType bufferColorType,
165                             sk_sp<GrGpuBuffer>,
166                             size_t offset,
167                             size_t rowBytes) override {
168         return true;
169     }
170 
onTransferPixelsFrom(GrSurface *,SkIRect,GrColorType surfaceColorType,GrColorType bufferColorType,sk_sp<GrGpuBuffer>,size_t offset)171     bool onTransferPixelsFrom(GrSurface*,
172                               SkIRect,
173                               GrColorType surfaceColorType,
174                               GrColorType bufferColorType,
175                               sk_sp<GrGpuBuffer>,
176                               size_t offset) override {
177         return true;
178     }
179 
onCopySurface(GrSurface * dst,const SkIRect & dstRect,GrSurface * src,const SkIRect & srcRect,GrSamplerState::Filter)180     bool onCopySurface(GrSurface* dst, const SkIRect& dstRect,
181                        GrSurface* src, const SkIRect& srcRect,
182                        GrSamplerState::Filter)override {
183         return true;
184     }
185 
onRegenerateMipMapLevels(GrTexture *)186     bool onRegenerateMipMapLevels(GrTexture*) override { return true; }
187 
onResolveRenderTarget(GrRenderTarget * target,const SkIRect &)188     void onResolveRenderTarget(GrRenderTarget* target, const SkIRect&) override {}
189 
addFinishedCallback(skgpu::AutoCallback callback,std::optional<GrTimerQuery>)190     void addFinishedCallback(skgpu::AutoCallback callback, std::optional<GrTimerQuery>) override {
191         SkASSERT(callback);
192     }
193 
194     GrOpsRenderPass* onGetOpsRenderPass(
195             GrRenderTarget*,
196             bool useMSAASurface,
197             GrAttachment*,
198             GrSurfaceOrigin,
199             const SkIRect&,
200             const GrOpsRenderPass::LoadAndStoreInfo&,
201             const GrOpsRenderPass::StencilLoadAndStoreInfo&,
202             const skia_private::TArray<GrSurfaceProxy*, true>& sampledProxies,
203             GrXferBarrierFlags renderPassXferBarriers) override;
204 
onSubmitToGpu(const GrSubmitInfo &)205     bool onSubmitToGpu(const GrSubmitInfo&) override { return true; }
206 
207     sk_sp<GrAttachment> makeStencilAttachment(const GrBackendFormat& /*colorFormat*/,
208                                               SkISize dimensions, int numStencilSamples) override;
209 
getPreferredStencilFormat(const GrBackendFormat &)210     GrBackendFormat getPreferredStencilFormat(const GrBackendFormat&) override {
211         return GrBackendFormat::MakeMock(GrColorType::kUnknown, SkTextureCompressionType::kNone,
212                                          true);
213     }
214 
makeMSAAAttachment(SkISize dimensions,const GrBackendFormat & format,int numSamples,GrProtected isProtected,GrMemoryless isMemoryless)215     sk_sp<GrAttachment> makeMSAAAttachment(SkISize dimensions,
216                                            const GrBackendFormat& format,
217                                            int numSamples,
218                                            GrProtected isProtected,
219                                            GrMemoryless isMemoryless) override {
220         return nullptr;
221     }
222 
223     GrBackendTexture onCreateBackendTexture(SkISize dimensions,
224                                             const GrBackendFormat&,
225                                             GrRenderable,
226                                             skgpu::Mipmapped,
227                                             GrProtected,
228                                             std::string_view label) override;
229 
onClearBackendTexture(const GrBackendTexture &,sk_sp<skgpu::RefCntedCallback> finishedCallback,std::array<float,4> color)230     bool onClearBackendTexture(const GrBackendTexture&,
231                                sk_sp<skgpu::RefCntedCallback> finishedCallback,
232                                std::array<float, 4> color) override {
233         return true;
234     }
235 
236     GrBackendTexture onCreateCompressedBackendTexture(SkISize dimensions,
237                                                       const GrBackendFormat&,
238                                                       skgpu::Mipmapped,
239                                                       GrProtected) override;
240 
onUpdateCompressedBackendTexture(const GrBackendTexture &,sk_sp<skgpu::RefCntedCallback> finishedCallback,const void *,size_t)241     bool onUpdateCompressedBackendTexture(const GrBackendTexture&,
242                                           sk_sp<skgpu::RefCntedCallback> finishedCallback,
243                                           const void*,
244                                           size_t) override {
245         return true;
246     }
247 
248     void deleteBackendTexture(const GrBackendTexture&) override;
249 
compile(const GrProgramDesc &,const GrProgramInfo &)250     bool compile(const GrProgramDesc&, const GrProgramInfo&) override { return false; }
251 
252 #if defined(GPU_TEST_UTILS)
253     bool isTestingOnlyBackendTexture(const GrBackendTexture&) const override;
254 
255     GrBackendRenderTarget createTestingOnlyBackendRenderTarget(SkISize dimensions,
256                                                                GrColorType,
257                                                                int sampleCnt,
258                                                                GrProtected) override;
259     void deleteTestingOnlyBackendRenderTarget(const GrBackendRenderTarget&) override;
260 #endif
261 
262     const GrMockOptions fMockOptions;
263 
264     static int NextInternalTextureID();
265     static int NextExternalTextureID();
266     static int NextInternalRenderTargetID();
267     static int NextExternalRenderTargetID();
268 
269     skia_private::THashSet<int> fOutstandingTestingOnlyTextureIDs;
270 
271     using INHERITED = GrGpu;
272 };
273 
274 #endif
275