aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Chris Dalton <csmartdalton@google.com>2017-07-06 11:04:00 -0600
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-07-06 22:43:07 +0000
commit6b65b98996ebc0a511aa46042607a291e6836bed (patch)
treea3864f1fd73bb040ac6d7c2f7ab1c48c78199f9a /src
parentcfe910dc794d8def481b532bfe68f4a3ff8fc9d7 (diff)
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>
Diffstat (limited to 'src')
-rw-r--r--src/gpu/vk/GrVkBuffer.cpp4
-rw-r--r--src/gpu/vk/GrVkCaps.cpp2
-rw-r--r--src/gpu/vk/GrVkGpu.cpp5
-rw-r--r--src/gpu/vk/GrVkTexelBuffer.cpp4
-rw-r--r--src/gpu/vk/GrVkTexelBuffer.h2
5 files changed, 10 insertions, 7 deletions
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;