Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Unified Diff: src/gpu/vk/GrVkBuffer.cpp

Issue 1825393002: Consolidate GPU buffer implementations (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: gyp Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
}
« src/gpu/vk/GrVkBuffer.h ('K') | « src/gpu/vk/GrVkBuffer.h ('k') | src/gpu/vk/GrVkCaps.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698