xref: /aosp_15_r20/external/skia/src/gpu/ganesh/mock/GrMockGpu.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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> onWrapBackendTexture(const GrBackendTexture&,
108                                           GrWrapOwnership,
109                                           GrWrapCacheable,
110                                           GrIOType) override;
111     sk_sp<GrTexture> onWrapCompressedBackendTexture(const GrBackendTexture&,
112                                                     GrWrapOwnership,
113                                                     GrWrapCacheable) override;
114 
115     sk_sp<GrTexture> onWrapRenderableBackendTexture(const GrBackendTexture&,
116                                                     int sampleCnt,
117                                                     GrWrapOwnership,
118                                                     GrWrapCacheable) override;
119 
120     sk_sp<GrRenderTarget> onWrapBackendRenderTarget(const GrBackendRenderTarget&) override;
121 
122     sk_sp<GrGpuBuffer> onCreateBuffer(size_t sizeInBytes,
123                                       GrGpuBufferType,
124                                       GrAccessPattern) override;
125 
onReadPixels(GrSurface *,SkIRect,GrColorType surfaceColorType,GrColorType dstColorType,void *,size_t rowBytes)126     bool onReadPixels(GrSurface*,
127                       SkIRect,
128                       GrColorType surfaceColorType,
129                       GrColorType dstColorType,
130                       void*,
131                       size_t rowBytes) override {
132         return true;
133     }
134 
onWritePixels(GrSurface *,SkIRect,GrColorType surfaceColorType,GrColorType srcColorType,const GrMipLevel[],int mipLevelCount,bool prepForTexSampling)135     bool onWritePixels(GrSurface*,
136                        SkIRect,
137                        GrColorType surfaceColorType,
138                        GrColorType srcColorType,
139                        const GrMipLevel[],
140                        int mipLevelCount,
141                        bool prepForTexSampling) override {
142         return true;
143     }
144 
onTransferFromBufferToBuffer(sk_sp<GrGpuBuffer> src,size_t srcOffset,sk_sp<GrGpuBuffer> dst,size_t dstOffset,size_t size)145     bool onTransferFromBufferToBuffer(sk_sp<GrGpuBuffer> src,
146                                       size_t srcOffset,
147                                       sk_sp<GrGpuBuffer> dst,
148                                       size_t dstOffset,
149                                       size_t size) override {
150         return true;
151     }
152 
onTransferPixelsTo(GrTexture *,SkIRect,GrColorType surfaceColorType,GrColorType bufferColorType,sk_sp<GrGpuBuffer>,size_t offset,size_t rowBytes)153     bool onTransferPixelsTo(GrTexture*,
154                             SkIRect,
155                             GrColorType surfaceColorType,
156                             GrColorType bufferColorType,
157                             sk_sp<GrGpuBuffer>,
158                             size_t offset,
159                             size_t rowBytes) override {
160         return true;
161     }
162 
onTransferPixelsFrom(GrSurface *,SkIRect,GrColorType surfaceColorType,GrColorType bufferColorType,sk_sp<GrGpuBuffer>,size_t offset)163     bool onTransferPixelsFrom(GrSurface*,
164                               SkIRect,
165                               GrColorType surfaceColorType,
166                               GrColorType bufferColorType,
167                               sk_sp<GrGpuBuffer>,
168                               size_t offset) override {
169         return true;
170     }
171 
onCopySurface(GrSurface * dst,const SkIRect & dstRect,GrSurface * src,const SkIRect & srcRect,GrSamplerState::Filter)172     bool onCopySurface(GrSurface* dst, const SkIRect& dstRect,
173                        GrSurface* src, const SkIRect& srcRect,
174                        GrSamplerState::Filter)override {
175         return true;
176     }
177 
onRegenerateMipMapLevels(GrTexture *)178     bool onRegenerateMipMapLevels(GrTexture*) override { return true; }
179 
onResolveRenderTarget(GrRenderTarget * target,const SkIRect &)180     void onResolveRenderTarget(GrRenderTarget* target, const SkIRect&) override {}
181 
addFinishedCallback(skgpu::AutoCallback callback,std::optional<GrTimerQuery>)182     void addFinishedCallback(skgpu::AutoCallback callback, std::optional<GrTimerQuery>) override {
183         SkASSERT(callback);
184     }
185 
186     GrOpsRenderPass* onGetOpsRenderPass(
187             GrRenderTarget*,
188             bool useMSAASurface,
189             GrAttachment*,
190             GrSurfaceOrigin,
191             const SkIRect&,
192             const GrOpsRenderPass::LoadAndStoreInfo&,
193             const GrOpsRenderPass::StencilLoadAndStoreInfo&,
194             const skia_private::TArray<GrSurfaceProxy*, true>& sampledProxies,
195             GrXferBarrierFlags renderPassXferBarriers) override;
196 
onSubmitToGpu(const GrSubmitInfo &)197     bool onSubmitToGpu(const GrSubmitInfo&) override { return true; }
198 
199     sk_sp<GrAttachment> makeStencilAttachment(const GrBackendFormat& /*colorFormat*/,
200                                               SkISize dimensions, int numStencilSamples) override;
201 
getPreferredStencilFormat(const GrBackendFormat &)202     GrBackendFormat getPreferredStencilFormat(const GrBackendFormat&) override {
203         return GrBackendFormat::MakeMock(GrColorType::kUnknown, SkTextureCompressionType::kNone,
204                                          true);
205     }
206 
makeMSAAAttachment(SkISize dimensions,const GrBackendFormat & format,int numSamples,GrProtected isProtected,GrMemoryless isMemoryless)207     sk_sp<GrAttachment> makeMSAAAttachment(SkISize dimensions,
208                                            const GrBackendFormat& format,
209                                            int numSamples,
210                                            GrProtected isProtected,
211                                            GrMemoryless isMemoryless) override {
212         return nullptr;
213     }
214 
215     GrBackendTexture onCreateBackendTexture(SkISize dimensions,
216                                             const GrBackendFormat&,
217                                             GrRenderable,
218                                             skgpu::Mipmapped,
219                                             GrProtected,
220                                             std::string_view label) override;
221 
onClearBackendTexture(const GrBackendTexture &,sk_sp<skgpu::RefCntedCallback> finishedCallback,std::array<float,4> color)222     bool onClearBackendTexture(const GrBackendTexture&,
223                                sk_sp<skgpu::RefCntedCallback> finishedCallback,
224                                std::array<float, 4> color) override {
225         return true;
226     }
227 
228     GrBackendTexture onCreateCompressedBackendTexture(SkISize dimensions,
229                                                       const GrBackendFormat&,
230                                                       skgpu::Mipmapped,
231                                                       GrProtected) override;
232 
onUpdateCompressedBackendTexture(const GrBackendTexture &,sk_sp<skgpu::RefCntedCallback> finishedCallback,const void *,size_t)233     bool onUpdateCompressedBackendTexture(const GrBackendTexture&,
234                                           sk_sp<skgpu::RefCntedCallback> finishedCallback,
235                                           const void*,
236                                           size_t) override {
237         return true;
238     }
239 
240     void deleteBackendTexture(const GrBackendTexture&) override;
241 
compile(const GrProgramDesc &,const GrProgramInfo &)242     bool compile(const GrProgramDesc&, const GrProgramInfo&) override { return false; }
243 
244 #if defined(GPU_TEST_UTILS)
245     bool isTestingOnlyBackendTexture(const GrBackendTexture&) const override;
246 
247     GrBackendRenderTarget createTestingOnlyBackendRenderTarget(SkISize dimensions,
248                                                                GrColorType,
249                                                                int sampleCnt,
250                                                                GrProtected) override;
251     void deleteTestingOnlyBackendRenderTarget(const GrBackendRenderTarget&) override;
252 #endif
253 
254     const GrMockOptions fMockOptions;
255 
256     static int NextInternalTextureID();
257     static int NextExternalTextureID();
258     static int NextInternalRenderTargetID();
259     static int NextExternalRenderTargetID();
260 
261     skia_private::THashSet<int> fOutstandingTestingOnlyTextureIDs;
262 
263     using INHERITED = GrGpu;
264 };
265 
266 #endif
267