| 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);
|
| }
|
|
|
|
|