aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar cdalton <cdalton@nvidia.com>2016-04-19 10:00:02 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-04-19 10:00:02 -0700
commit1bf3e71ad06a318613ccc09e1cf47d3c2465b23c (patch)
tree59aaa63ab864fdf4a6713d84b7a86eaac8dc8d71 /src
parent44583122acff3251f48a98c71fa3180275e8437e (diff)
Add optional data parameter to createBuffer
Diffstat (limited to 'src')
-rw-r--r--src/gpu/GrGpu.cpp4
-rw-r--r--src/gpu/GrGpu.h7
-rw-r--r--src/gpu/GrResourceProvider.cpp12
-rw-r--r--src/gpu/GrResourceProvider.h4
-rw-r--r--src/gpu/gl/GrGLGpu.cpp4
-rw-r--r--src/gpu/gl/GrGLGpu.h3
-rw-r--r--src/gpu/vk/GrVkGpu.cpp16
-rw-r--r--src/gpu/vk/GrVkGpu.h3
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;