From 6b65b98996ebc0a511aa46042607a291e6836bed Mon Sep 17 00:00:00 2001 From: Chris Dalton Date: Thu, 6 Jul 2017 11:04:00 -0600 Subject: 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 Commit-Queue: Chris Dalton --- src/gpu/vk/GrVkBuffer.cpp | 4 ++-- src/gpu/vk/GrVkCaps.cpp | 2 ++ src/gpu/vk/GrVkGpu.cpp | 5 +++-- src/gpu/vk/GrVkTexelBuffer.cpp | 4 ++-- src/gpu/vk/GrVkTexelBuffer.h | 2 +- 5 files changed, 10 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/gpu/vk/GrVkBuffer.cpp b/src/gpu/vk/GrVkBuffer.cpp index d0332b9683..9926ec4ad0 100644 --- a/src/gpu/vk/GrVkBuffer.cpp +++ b/src/gpu/vk/GrVkBuffer.cpp @@ -227,6 +227,6 @@ bool GrVkBuffer::vkUpdateData(GrVkGpu* gpu, const void* src, size_t srcSizeInByt 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 e8a397847c..db926179be 100644 --- a/src/gpu/vk/GrVkCaps.cpp +++ b/src/gpu/vk/GrVkCaps.cpp @@ -248,6 +248,8 @@ void GrVkCaps::initShaderCaps(const VkPhysicalDeviceProperties& properties, uint } 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 13de0a1c30..379012709c 100644 --- a/src/gpu/vk/GrVkGpu.cpp +++ b/src/gpu/vk/GrVkGpu.cpp @@ -311,8 +311,9 @@ GrBuffer* GrVkGpu::onCreateBuffer(size_t size, GrBufferType type, GrAccessPatter 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 b579ea08c2..501706cfb5 100644 --- a/src/gpu/vk/GrVkTexelBuffer.cpp +++ b/src/gpu/vk/GrVkTexelBuffer.cpp @@ -17,9 +17,9 @@ GrVkTexelBuffer::GrVkTexelBuffer(GrVkGpu* gpu, const GrVkBuffer::Desc& desc, 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 449e3fc062..0ca114d63e 100644 --- a/src/gpu/vk/GrVkTexelBuffer.h +++ b/src/gpu/vk/GrVkTexelBuffer.h @@ -15,7 +15,7 @@ class GrVkGpu; 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; -- cgit v1.2.3