Indicate texel buffer support in Vulkan
Also adds support for static texel buffer access patterns.
Bug: skia:
Change-Id: Iadf1b82adbc5f84960841b7526e16d1aa77de621
Reviewed-on: https://skia-review.googlesource.com/21705
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
diff --git a/src/gpu/vk/GrVkBuffer.cpp b/src/gpu/vk/GrVkBuffer.cpp
index d0332b9..9926ec4 100644
--- a/src/gpu/vk/GrVkBuffer.cpp
+++ b/src/gpu/vk/GrVkBuffer.cpp
@@ -227,6 +227,6 @@
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);
+ || kTexel_Type == fDesc.fType || kCopyRead_Type == fDesc.fType
+ || kCopyWrite_Type == fDesc.fType || kUniform_Type == fDesc.fType);
}
diff --git a/src/gpu/vk/GrVkCaps.cpp b/src/gpu/vk/GrVkCaps.cpp
index e8a3978..db92617 100644
--- a/src/gpu/vk/GrVkCaps.cpp
+++ b/src/gpu/vk/GrVkCaps.cpp
@@ -248,6 +248,8 @@
}
shaderCaps->fIntegerSupport = true;
+ shaderCaps->fTexelBufferSupport = true;
+ shaderCaps->fTexelFetchSupport = true;
shaderCaps->fVertexIDSupport = true;
// Assume the minimum precisions mandated by the SPIR-V spec.
diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp
index 13de0a1..3790127 100644
--- a/src/gpu/vk/GrVkGpu.cpp
+++ b/src/gpu/vk/GrVkGpu.cpp
@@ -311,8 +311,9 @@
buff = GrVkTransferBuffer::Create(this, size, GrVkBuffer::kCopyWrite_Type);
break;
case kTexel_GrBufferType:
- SkASSERT(kDynamic_GrAccessPattern == accessPattern);
- buff = GrVkTexelBuffer::Create(this, size);
+ SkASSERT(kDynamic_GrAccessPattern == accessPattern ||
+ kStatic_GrAccessPattern == accessPattern);
+ buff = GrVkTexelBuffer::Create(this, size, kDynamic_GrAccessPattern == accessPattern);
break;
case kDrawIndirect_GrBufferType:
SkFAIL("DrawIndirect Buffers not supported in vulkan backend.");
diff --git a/src/gpu/vk/GrVkTexelBuffer.cpp b/src/gpu/vk/GrVkTexelBuffer.cpp
index b579ea0..501706c 100644
--- a/src/gpu/vk/GrVkTexelBuffer.cpp
+++ b/src/gpu/vk/GrVkTexelBuffer.cpp
@@ -17,9 +17,9 @@
this->registerWithCache(SkBudgeted::kYes);
}
-GrVkTexelBuffer* GrVkTexelBuffer::Create(GrVkGpu* gpu, size_t size) {
+GrVkTexelBuffer* GrVkTexelBuffer::Create(GrVkGpu* gpu, size_t size, bool dynamic) {
GrVkBuffer::Desc desc;
- desc.fDynamic = true;
+ desc.fDynamic = dynamic;
desc.fType = GrVkBuffer::kTexel_Type;
desc.fSizeInBytes = size;
diff --git a/src/gpu/vk/GrVkTexelBuffer.h b/src/gpu/vk/GrVkTexelBuffer.h
index 449e3fc..0ca114d 100644
--- a/src/gpu/vk/GrVkTexelBuffer.h
+++ b/src/gpu/vk/GrVkTexelBuffer.h
@@ -15,7 +15,7 @@
class GrVkTexelBuffer : public GrBuffer, public GrVkBuffer {
public:
- static GrVkTexelBuffer* Create(GrVkGpu* gpu, size_t size);
+ static GrVkTexelBuffer* Create(GrVkGpu* gpu, size_t size, bool dynamic);
protected:
void onAbandon() override;