/* * Copyright 2017 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef GrMockGpu_DEFINED #define GrMockGpu_DEFINED #include "include/gpu/GrTexture.h" #include "include/private/SkTHash.h" #include "src/gpu/GrGpu.h" #include "src/gpu/GrRenderTarget.h" #include "src/gpu/GrSemaphore.h" class GrMockGpuRTCommandBuffer; struct GrMockOptions; class GrPipeline; class GrMockGpu : public GrGpu { public: static sk_sp Make(const GrMockOptions*, const GrContextOptions&, GrContext*); ~GrMockGpu() override {} GrGpuRTCommandBuffer* getCommandBuffer( GrRenderTarget*, GrSurfaceOrigin, const SkRect&, const GrGpuRTCommandBuffer::LoadAndStoreInfo&, const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo&) override; GrGpuTextureCommandBuffer* getCommandBuffer(GrTexture*, GrSurfaceOrigin) override; GrFence SK_WARN_UNUSED_RESULT insertFence() override { return 0; } bool waitFence(GrFence, uint64_t) override { return true; } void deleteFence(GrFence) const override {} sk_sp SK_WARN_UNUSED_RESULT makeSemaphore(bool isOwned) override { return nullptr; } sk_sp wrapBackendSemaphore(const GrBackendSemaphore& semaphore, GrResourceProvider::SemaphoreWrapType wrapType, GrWrapOwnership ownership) override { return nullptr; } void insertSemaphore(sk_sp semaphore) override {} void waitSemaphore(sk_sp semaphore) override {} sk_sp prepareTextureForCrossContextUsage(GrTexture*) override { return nullptr; } void submit(GrGpuCommandBuffer* buffer) override; void checkFinishProcs() override {} private: GrMockGpu(GrContext* context, const GrMockOptions&, const GrContextOptions&); void submitCommandBuffer(const GrMockGpuRTCommandBuffer*); void onResetContext(uint32_t resetBits) override {} void querySampleLocations(GrRenderTarget*, SkTArray* sampleLocations) override; void xferBarrier(GrRenderTarget*, GrXferBarrierType) override {} sk_sp onCreateTexture(const GrSurfaceDesc&, const GrBackendFormat&, GrRenderable, int renderTargetSampleCnt, SkBudgeted, GrProtected, const GrMipLevel[], int mipLevelCount) override; sk_sp onCreateCompressedTexture(int width, int height, const GrBackendFormat&, SkImage::CompressionType, SkBudgeted, const void* data) override; sk_sp onWrapBackendTexture(const GrBackendTexture&, GrColorType, GrWrapOwnership, GrWrapCacheable, GrIOType) override; sk_sp onWrapRenderableBackendTexture(const GrBackendTexture&, int sampleCnt, GrColorType, GrWrapOwnership, GrWrapCacheable) override; sk_sp onWrapBackendRenderTarget(const GrBackendRenderTarget&, GrColorType) override; sk_sp onWrapBackendTextureAsRenderTarget(const GrBackendTexture&, int sampleCnt, GrColorType) override; sk_sp onCreateBuffer(size_t sizeInBytes, GrGpuBufferType, GrAccessPattern, const void*) override; bool onReadPixels(GrSurface* surface, int left, int top, int width, int height, GrColorType surfaceColorType, GrColorType dstColorType, void* buffer, size_t rowBytes) override { return true; } bool onWritePixels(GrSurface* surface, int left, int top, int width, int height, GrColorType surfaceColorType, GrColorType srcColorType, const GrMipLevel texels[], int mipLevelCount) override { return true; } bool onTransferPixelsTo(GrTexture* texture, int left, int top, int width, int height, GrColorType surfaceColorType, GrColorType bufferColorType, GrGpuBuffer* transferBuffer, size_t offset, size_t rowBytes) override { return true; } bool onTransferPixelsFrom(GrSurface* surface, int left, int top, int width, int height, GrColorType surfaceColorType, GrColorType bufferColorType, GrGpuBuffer* transferBuffer, size_t offset) override { return true; } bool onCopySurface(GrSurface* dst, GrSurface* src, const SkIRect& srcRect, const SkIPoint& dstPoint, bool canDiscardOutsideDstRect) override { return true; } bool onRegenerateMipMapLevels(GrTexture*) override { return true; } void onResolveRenderTarget(GrRenderTarget* target) override { return; } void onFinishFlush(GrSurfaceProxy*[], int n, SkSurface::BackendSurfaceAccess access, const GrFlushInfo& info, const GrPrepareForExternalIORequests&) override { if (info.fFinishedProc) { info.fFinishedProc(info.fFinishedContext); } } GrStencilAttachment* createStencilAttachmentForRenderTarget( const GrRenderTarget*, int width, int height, int numStencilSamples) override; GrBackendTexture createBackendTexture(int w, int h, const GrBackendFormat&, GrMipMapped, GrRenderable, const void* pixels, size_t rowBytes, const SkColor4f* color, GrProtected isProtected) override; void deleteBackendTexture(const GrBackendTexture&) override; #if GR_TEST_UTILS bool isTestingOnlyBackendTexture(const GrBackendTexture&) const override; GrBackendRenderTarget createTestingOnlyBackendRenderTarget(int w, int h, GrColorType) override; void deleteTestingOnlyBackendRenderTarget(const GrBackendRenderTarget&) override; void testingOnly_flushGpuAndSync() override {} #endif const GrMockOptions fMockOptions; static int NextInternalTextureID(); static int NextExternalTextureID(); static int NextInternalRenderTargetID(); static int NextExternalRenderTargetID(); SkTHashSet fOutstandingTestingOnlyTextureIDs; typedef GrGpu INHERITED; }; #endif