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