diff options
author | 2016-04-19 10:00:02 -0700 | |
---|---|---|
committer | 2016-04-19 10:00:02 -0700 | |
commit | 1bf3e71ad06a318613ccc09e1cf47d3c2465b23c (patch) | |
tree | 59aaa63ab864fdf4a6713d84b7a86eaac8dc8d71 /src | |
parent | 44583122acff3251f48a98c71fa3180275e8437e (diff) |
Add optional data parameter to createBuffer
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1877073002
Review URL: https://codereview.chromium.org/1877073002
Diffstat (limited to 'src')
-rw-r--r-- | src/gpu/GrGpu.cpp | 4 | ||||
-rw-r--r-- | src/gpu/GrGpu.h | 7 | ||||
-rw-r--r-- | src/gpu/GrResourceProvider.cpp | 12 | ||||
-rw-r--r-- | src/gpu/GrResourceProvider.h | 4 | ||||
-rw-r--r-- | src/gpu/gl/GrGLGpu.cpp | 4 | ||||
-rw-r--r-- | src/gpu/gl/GrGLGpu.h | 3 | ||||
-rw-r--r-- | src/gpu/vk/GrVkGpu.cpp | 16 | ||||
-rw-r--r-- | src/gpu/vk/GrVkGpu.h | 3 |
8 files changed, 35 insertions, 18 deletions
diff --git a/src/gpu/GrGpu.cpp b/src/gpu/GrGpu.cpp index 6b815b6971..d062a48129 100644 --- a/src/gpu/GrGpu.cpp +++ b/src/gpu/GrGpu.cpp @@ -236,9 +236,9 @@ GrRenderTarget* GrGpu::wrapBackendTextureAsRenderTarget(const GrBackendTextureDe } GrBuffer* GrGpu::createBuffer(size_t size, GrBufferType intendedType, - GrAccessPattern accessPattern) { + GrAccessPattern accessPattern, const void* data) { this->handleDirtyContext(); - GrBuffer* buffer = this->onCreateBuffer(size, intendedType, accessPattern); + GrBuffer* buffer = this->onCreateBuffer(size, intendedType, accessPattern, data); if (!this->caps()->reuseScratchBuffers()) { buffer->resourcePriv().removeScratchKey(); } diff --git a/src/gpu/GrGpu.h b/src/gpu/GrGpu.h index d0a290fd22..883b7ee98a 100644 --- a/src/gpu/GrGpu.h +++ b/src/gpu/GrGpu.h @@ -138,10 +138,12 @@ public: * @param size size of buffer to create. * @param intendedType hint to the graphics subsystem about what the buffer will be used for. * @param accessPattern hint to the graphics subsystem about how the data will be accessed. + * @param data optional data with which to initialize the buffer. * * @return the buffer if successful, otherwise nullptr. */ - GrBuffer* createBuffer(size_t size, GrBufferType intendedType, GrAccessPattern accessPattern); + GrBuffer* createBuffer(size_t size, GrBufferType intendedType, GrAccessPattern accessPattern, + const void* data = nullptr); /** * Resolves MSAA. @@ -537,7 +539,8 @@ private: virtual GrRenderTarget* onWrapBackendRenderTarget(const GrBackendRenderTargetDesc&, GrWrapOwnership) = 0; virtual GrRenderTarget* onWrapBackendTextureAsRenderTarget(const GrBackendTextureDesc&) = 0; - virtual GrBuffer* onCreateBuffer(size_t size, GrBufferType intendedType, GrAccessPattern) = 0; + virtual GrBuffer* onCreateBuffer(size_t size, GrBufferType intendedType, GrAccessPattern, + const void* data) = 0; // overridden by backend-specific derived class to perform the clear. virtual void onClear(GrRenderTarget*, const SkIRect& rect, GrColor color) = 0; diff --git a/src/gpu/GrResourceProvider.cpp b/src/gpu/GrResourceProvider.cpp index a8c9e5a3c7..9a2fff3141 100644 --- a/src/gpu/GrResourceProvider.cpp +++ b/src/gpu/GrResourceProvider.cpp @@ -91,7 +91,8 @@ GrPathRange* GrResourceProvider::createGlyphs(const SkTypeface* tf, } GrBuffer* GrResourceProvider::createBuffer(size_t size, GrBufferType intendedType, - GrAccessPattern accessPattern, uint32_t flags) { + GrAccessPattern accessPattern, uint32_t flags, + const void* data) { if (this->isAbandoned()) { return nullptr; } @@ -110,11 +111,14 @@ GrBuffer* GrResourceProvider::createBuffer(size_t size, GrBufferType intendedTyp scratchFlags = GrResourceCache::kPreferNoPendingIO_ScratchFlag; } GrGpuResource* resource = this->cache()->findAndRefScratchResource(key, size, scratchFlags); - if (resource) { - return static_cast<GrBuffer*>(resource); + if (GrBuffer* buffer = static_cast<GrBuffer*>(resource)) { + if (data) { + buffer->updateData(data, size); + } + return buffer; } } - return this->gpu()->createBuffer(size, intendedType, accessPattern); + return this->gpu()->createBuffer(size, intendedType, accessPattern, data); } GrBatchAtlas* GrResourceProvider::createAtlas(GrPixelConfig config, diff --git a/src/gpu/GrResourceProvider.h b/src/gpu/GrResourceProvider.h index 5beb70a3d8..9701bf1784 100644 --- a/src/gpu/GrResourceProvider.h +++ b/src/gpu/GrResourceProvider.h @@ -110,10 +110,12 @@ public: * @param intendedType hint to the graphics subsystem about what the buffer will be used for. * @param GrAccessPattern hint to the graphics subsystem about how the data will be accessed. * @param flags see Flags enum. + * @param data optional data with which to initialize the buffer. * * @return the buffer if successful, otherwise nullptr. */ - GrBuffer* createBuffer(size_t size, GrBufferType intendedType, GrAccessPattern, uint32_t flags); + GrBuffer* createBuffer(size_t size, GrBufferType intendedType, GrAccessPattern, uint32_t flags, + const void* data = nullptr); GrTexture* createApproxTexture(const GrSurfaceDesc& desc, uint32_t flags) { SkASSERT(0 == flags || kNoPendingIO_Flag == flags); diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp index 4f09ebae00..3a7f531476 100644 --- a/src/gpu/gl/GrGLGpu.cpp +++ b/src/gpu/gl/GrGLGpu.cpp @@ -1949,8 +1949,8 @@ GrStencilAttachment* GrGLGpu::createStencilAttachmentForRenderTarget(const GrRen #define DYNAMIC_USAGE_PARAM GR_GL_STREAM_DRAW GrBuffer* GrGLGpu::onCreateBuffer(size_t size, GrBufferType intendedType, - GrAccessPattern accessPattern) { - return GrGLBuffer::Create(this, size, intendedType, accessPattern); + GrAccessPattern accessPattern, const void* data) { + return GrGLBuffer::Create(this, size, intendedType, accessPattern, data); } void GrGLGpu::flushScissor(const GrScissorState& scissorState, diff --git a/src/gpu/gl/GrGLGpu.h b/src/gpu/gl/GrGLGpu.h index 738d046450..00ceb85241 100644 --- a/src/gpu/gl/GrGLGpu.h +++ b/src/gpu/gl/GrGLGpu.h @@ -132,7 +132,8 @@ private: GrGpuResource::LifeCycle lifeCycle, const SkTArray<GrMipLevel>& texels) override; - GrBuffer* onCreateBuffer(size_t size, GrBufferType intendedType, GrAccessPattern) override; + GrBuffer* onCreateBuffer(size_t size, GrBufferType intendedType, GrAccessPattern, + const void* data) override; GrTexture* onWrapBackendTexture(const GrBackendTextureDesc&, GrWrapOwnership) override; GrRenderTarget* onWrapBackendRenderTarget(const GrBackendRenderTargetDesc&, GrWrapOwnership) override; diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp index 28dce344be..b23cced41d 100644 --- a/src/gpu/vk/GrVkGpu.cpp +++ b/src/gpu/vk/GrVkGpu.cpp @@ -172,26 +172,32 @@ void GrVkGpu::submitCommandBuffer(SyncQueue sync) { } /////////////////////////////////////////////////////////////////////////////// -GrBuffer* GrVkGpu::onCreateBuffer(size_t size, GrBufferType type, GrAccessPattern accessPattern) { +GrBuffer* GrVkGpu::onCreateBuffer(size_t size, GrBufferType type, GrAccessPattern accessPattern, + const void* data) { + GrBuffer* buff; switch (type) { case kVertex_GrBufferType: SkASSERT(kDynamic_GrAccessPattern == accessPattern || kStatic_GrAccessPattern == accessPattern); - return GrVkVertexBuffer::Create(this, size, kDynamic_GrAccessPattern == accessPattern); + buff = GrVkVertexBuffer::Create(this, size, kDynamic_GrAccessPattern == accessPattern); case kIndex_GrBufferType: SkASSERT(kDynamic_GrAccessPattern == accessPattern || kStatic_GrAccessPattern == accessPattern); - return GrVkIndexBuffer::Create(this, size, kDynamic_GrAccessPattern == accessPattern); + buff = GrVkIndexBuffer::Create(this, size, kDynamic_GrAccessPattern == accessPattern); case kXferCpuToGpu_GrBufferType: SkASSERT(kStream_GrAccessPattern == accessPattern); - return GrVkTransferBuffer::Create(this, size, GrVkBuffer::kCopyRead_Type); + buff = GrVkTransferBuffer::Create(this, size, GrVkBuffer::kCopyRead_Type); case kXferGpuToCpu_GrBufferType: SkASSERT(kStream_GrAccessPattern == accessPattern); - return GrVkTransferBuffer::Create(this, size, GrVkBuffer::kCopyWrite_Type); + buff = GrVkTransferBuffer::Create(this, size, GrVkBuffer::kCopyWrite_Type); default: SkFAIL("Unknown buffer type."); return nullptr; } + if (data && buff) { + buff->updateData(data, size); + } + return buff; } //////////////////////////////////////////////////////////////////////////////// diff --git a/src/gpu/vk/GrVkGpu.h b/src/gpu/vk/GrVkGpu.h index 5872f18671..76b18ac71e 100644 --- a/src/gpu/vk/GrVkGpu.h +++ b/src/gpu/vk/GrVkGpu.h @@ -129,7 +129,8 @@ private: GrWrapOwnership) override; GrRenderTarget* onWrapBackendTextureAsRenderTarget(const GrBackendTextureDesc&) override { return NULL; } - GrBuffer* onCreateBuffer(size_t size, GrBufferType type, GrAccessPattern) override; + GrBuffer* onCreateBuffer(size_t size, GrBufferType type, GrAccessPattern, + const void* data) override; void onClear(GrRenderTarget*, const SkIRect& rect, GrColor color) override; |