Index: src/gpu/vk/GrVkBuffer.cpp |
diff --git a/src/gpu/vk/GrVkBuffer.cpp b/src/gpu/vk/GrVkBuffer.cpp |
index 1c7c4d0e25358f03631a9a6ed290cadff4ee9c6d..46e4d998c67d334bd8ed283a32230a71aae0c342 100644 |
--- a/src/gpu/vk/GrVkBuffer.cpp |
+++ b/src/gpu/vk/GrVkBuffer.cpp |
@@ -44,8 +44,11 @@ const GrVkBuffer::Resource* GrVkBuffer::Create(const GrVkGpu* gpu, const Desc& d |
case kCopyWrite_Type: |
bufInfo.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT; |
break; |
- |
} |
+ if (!desc.fDynamic) { |
+ bufInfo.usage |= VK_BUFFER_USAGE_TRANSFER_DST_BIT; |
+ } |
+ |
bufInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; |
bufInfo.queueFamilyIndexCount = 0; |
bufInfo.pQueueFamilyIndices = nullptr; |
@@ -59,6 +62,7 @@ const GrVkBuffer::Resource* GrVkBuffer::Create(const GrVkGpu* gpu, const Desc& d |
if (!GrVkMemory::AllocAndBindBufferMemory(gpu, |
buffer, |
desc.fType, |
+ desc.fDynamic, |
&alloc)) { |
return nullptr; |
} |
@@ -120,6 +124,9 @@ void GrVkBuffer::vkAbandon() { |
void* GrVkBuffer::vkMap(const GrVkGpu* gpu) { |
VALIDATE(); |
SkASSERT(!this->vkIsMapped()); |
+ if (!fDesc.fDynamic) { |
+ return nullptr; |
+ } |
if (!fResource->unique()) { |
// in use by the command buffer, so we need to create a new one |
@@ -141,6 +148,7 @@ void* GrVkBuffer::vkMap(const GrVkGpu* gpu) { |
void GrVkBuffer::vkUnmap(const GrVkGpu* gpu) { |
VALIDATE(); |
SkASSERT(this->vkIsMapped()); |
+ SkASSERT(fDesc.fDynamic); |
VK_CALL(gpu, UnmapMemory(gpu->device(), this->alloc().fMemory)); |
@@ -152,7 +160,7 @@ bool GrVkBuffer::vkIsMapped() const { |
return SkToBool(fMapPtr); |
} |
-bool GrVkBuffer::vkUpdateData(const GrVkGpu* gpu, const void* src, size_t srcSizeInBytes, |
+bool GrVkBuffer::vkUpdateData(GrVkGpu* gpu, const void* src, size_t srcSizeInBytes, |
bool* createdNewBuffer) { |
SkASSERT(!this->vkIsMapped()); |
VALIDATE(); |
@@ -160,6 +168,10 @@ bool GrVkBuffer::vkUpdateData(const GrVkGpu* gpu, const void* src, size_t srcSiz |
return false; |
} |
+ if (!fDesc.fDynamic) { |
+ return gpu->updateBuffer(this, src, srcSizeInBytes); |
+ } |
+ |
if (!fResource->unique()) { |
// in use by the command buffer, so we need to create a new one |
fResource->unref(gpu); |