Index: src/gpu/vk/GrVkBuffer.cpp |
diff --git a/src/gpu/vk/GrVkBuffer.cpp b/src/gpu/vk/GrVkBuffer.cpp |
index 0718fa5e929af16a232dcf9685bb7bf74c32734c..269258ad10dc6ccca031c2f4b9df4a724a780f53 100644 |
--- a/src/gpu/vk/GrVkBuffer.cpp |
+++ b/src/gpu/vk/GrVkBuffer.cpp |
@@ -29,19 +29,19 @@ const GrVkBuffer::Resource* GrVkBuffer::Create(const GrVkGpu* gpu, const Desc& d |
bufInfo.flags = 0; |
bufInfo.size = desc.fSizeInBytes; |
switch (desc.fType) { |
- case kVertex_Type: |
+ case kVertex_GrBufferType: |
bufInfo.usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT; |
break; |
- case kIndex_Type: |
+ case kIndex_GrBufferType: |
bufInfo.usage = VK_BUFFER_USAGE_INDEX_BUFFER_BIT; |
break; |
- case kUniform_Type: |
+ case kUniform_GrBufferType: |
bufInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT; |
break; |
- case kCopyRead_Type: |
+ case kXferCpuToGpu_GrBufferType: |
bufInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; |
break; |
- case kCopyWrite_Type: |
+ case kXferGpuToCpu_GrBufferType: |
bufInfo.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT; |
break; |
@@ -77,6 +77,16 @@ const GrVkBuffer::Resource* GrVkBuffer::Create(const GrVkGpu* gpu, const Desc& d |
return resource; |
} |
+GrVkBuffer::GrVkBuffer(GrVkGpu* gpu, const Desc& desc, const GrVkBuffer::Resource* resource) |
+ : INHERITED(gpu, desc.fType, desc.fSizeInBytes, desc.fAccessPattern, false), |
+ fDesc(desc), |
+ fResource(resource), |
+ fMapPtr(nullptr) { |
+} |
+ |
+GrVkGpu* GrVkBuffer::vkGpu() const { |
+ return static_cast<GrVkGpu*>(this->getGpu()); |
+} |
void GrVkBuffer::addMemoryBarrier(const GrVkGpu* gpu, |
VkAccessFlags srcAccessMask, |
@@ -107,44 +117,52 @@ void GrVkBuffer::Resource::freeGPUData(const GrVkGpu* gpu) const { |
VK_CALL(gpu, FreeMemory(gpu->device(), fAlloc, nullptr)); |
} |
-void GrVkBuffer::vkRelease(const GrVkGpu* gpu) { |
- VALIDATE(); |
- fResource->unref(gpu); |
- fResource = nullptr; |
- fMapPtr = nullptr; |
- VALIDATE(); |
+void GrVkBuffer::onRelease() { |
+ if (!this->wasDestroyed()) { |
+ VALIDATE(); |
+ fResource->unref(this->vkGpu()); |
+ fResource = nullptr; |
+ fMapPtr = nullptr; |
+ VALIDATE(); |
+ } |
+ INHERITED::onRelease(); |
} |
-void GrVkBuffer::vkAbandon() { |
+void GrVkBuffer::onAbandon() { |
fResource->unrefAndAbandon(); |
fMapPtr = nullptr; |
VALIDATE(); |
+ INHERITED::onAbandon(); |
} |
-void* GrVkBuffer::vkMap(const GrVkGpu* gpu) { |
+void GrVkBuffer::onMap() { |
+ if (this->wasDestroyed()) { |
+ return; |
+ } |
+ |
VALIDATE(); |
SkASSERT(!this->vkIsMapped()); |
if (!fResource->unique()) { |
// in use by the command buffer, so we need to create a new one |
- fResource->unref(gpu); |
- fResource = Create(gpu, fDesc); |
+ fResource->unref(this->vkGpu()); |
+ fResource = Create(this->vkGpu(), fDesc); |
} |
- VkResult err = VK_CALL(gpu, MapMemory(gpu->device(), alloc(), 0, VK_WHOLE_SIZE, 0, &fMapPtr)); |
+ VkResult err = VK_CALL(this->vkGpu(), MapMemory(this->vkGpu()->device(), alloc(), 0, |
+ VK_WHOLE_SIZE, 0, &fMapPtr)); |
if (err) { |
fMapPtr = nullptr; |
} |
VALIDATE(); |
- return fMapPtr; |
} |
-void GrVkBuffer::vkUnmap(const GrVkGpu* gpu) { |
+void GrVkBuffer::onUnmap() { |
VALIDATE(); |
SkASSERT(this->vkIsMapped()); |
- VK_CALL(gpu, UnmapMemory(gpu->device(), alloc())); |
+ VK_CALL(this->vkGpu(), UnmapMemory(this->vkGpu()->device(), alloc())); |
fMapPtr = nullptr; |
} |
@@ -154,7 +172,11 @@ bool GrVkBuffer::vkIsMapped() const { |
return SkToBool(fMapPtr); |
} |
-bool GrVkBuffer::vkUpdateData(const GrVkGpu* gpu, const void* src, size_t srcSizeInBytes) { |
+bool GrVkBuffer::onUpdateData(const void* src, size_t srcSizeInBytes) { |
+ if (this->wasDestroyed()) { |
+ return false; |
+ } |
+ |
SkASSERT(!this->vkIsMapped()); |
VALIDATE(); |
if (srcSizeInBytes > fDesc.fSizeInBytes) { |
@@ -163,12 +185,13 @@ bool GrVkBuffer::vkUpdateData(const GrVkGpu* gpu, const void* src, size_t srcSiz |
if (!fResource->unique()) { |
// in use by the command buffer, so we need to create a new one |
- fResource->unref(gpu); |
- fResource = Create(gpu, fDesc); |
+ fResource->unref(this->vkGpu()); |
+ fResource = Create(this->vkGpu(), fDesc); |
} |
void* mapPtr; |
- VkResult err = VK_CALL(gpu, MapMemory(gpu->device(), alloc(), 0, srcSizeInBytes, 0, &mapPtr)); |
+ VkResult err = VK_CALL(this->vkGpu(), MapMemory(this->vkGpu()->device(), alloc(), 0, |
+ srcSizeInBytes, 0, &mapPtr)); |
if (VK_SUCCESS != err) { |
return false; |
@@ -176,14 +199,16 @@ bool GrVkBuffer::vkUpdateData(const GrVkGpu* gpu, const void* src, size_t srcSiz |
memcpy(mapPtr, src, srcSizeInBytes); |
- VK_CALL(gpu, UnmapMemory(gpu->device(), alloc())); |
+ VK_CALL(this->vkGpu(), UnmapMemory(this->vkGpu()->device(), alloc())); |
return true; |
} |
void GrVkBuffer::validate() const { |
- SkASSERT(!fResource || kVertex_Type == fDesc.fType || kIndex_Type == fDesc.fType |
- || kCopyRead_Type == fDesc.fType || kCopyWrite_Type == fDesc.fType |
- || kUniform_Type == fDesc.fType); |
+ SkASSERT(!fResource || kVertex_GrBufferType == fDesc.fType || |
+ kIndex_GrBufferType == fDesc.fType || |
+ kXferCpuToGpu_GrBufferType == fDesc.fType || |
+ kXferGpuToCpu_GrBufferType == fDesc.fType || |
+ kUniform_GrBufferType == fDesc.fType); |
} |