aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/vk/GrVkUniformHandler.cpp
diff options
context:
space:
mode:
authorGravatar Chris Dalton <csmartdalton@google.com>2017-10-24 11:17:38 -0600
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-10-24 19:18:32 +0000
commitaf37a53a84d03fa08bc2f447034d7db754cfc5ba (patch)
treee0782db0fb222cf3972d38be852984c5d57d4c03 /src/gpu/vk/GrVkUniformHandler.cpp
parent33e2fad1fee82f244dd4a5f66fe4ec2868c36d76 (diff)
Add vector GrSLTypes for shorts
Bug: skia: Change-Id: Icb9eb1fcb0f879cd0bfdd27d06459843361c9947 Reviewed-on: https://skia-review.googlesource.com/62943 Reviewed-by: Greg Daniel <egdaniel@google.com> Reviewed-by: Ethan Nicholas <ethannicholas@google.com> Commit-Queue: Chris Dalton <csmartdalton@google.com>
Diffstat (limited to 'src/gpu/vk/GrVkUniformHandler.cpp')
-rw-r--r--src/gpu/vk/GrVkUniformHandler.cpp40
1 files changed, 31 insertions, 9 deletions
diff --git a/src/gpu/vk/GrVkUniformHandler.cpp b/src/gpu/vk/GrVkUniformHandler.cpp
index 8bc024941b..d9c25198a9 100644
--- a/src/gpu/vk/GrVkUniformHandler.cpp
+++ b/src/gpu/vk/GrVkUniformHandler.cpp
@@ -14,12 +14,22 @@
// This alignment mask will give correct alignments for using the std430 block layout. If you want
// the std140 alignment, you can use this, but then make sure if you have an array type it is
// aligned to 16 bytes (i.e. has mask of 0xF).
+// These are designated in the Vulkan spec, section 14.5.4 "Offset and Stride Assignment".
+// https://www.khronos.org/registry/vulkan/specs/1.0-wsi_extensions/html/vkspec.html#interfaces-resources-layout
uint32_t grsltype_to_alignment_mask(GrSLType type) {
switch(type) {
case kShort_GrSLType: // fall through
- case kInt_GrSLType:
+ case kUShort_GrSLType:
+ return 0x1;
+ case kShort2_GrSLType: // fall through
+ case kUShort2_GrSLType:
return 0x3;
- case kUShort_GrSLType: // fall through
+ case kShort3_GrSLType: // fall through
+ case kShort4_GrSLType:
+ case kUShort3_GrSLType:
+ case kUShort4_GrSLType:
+ return 0x7;
+ case kInt_GrSLType:
case kUint_GrSLType:
return 0x3;
case kHalf_GrSLType: // fall through
@@ -35,7 +45,7 @@ uint32_t grsltype_to_alignment_mask(GrSLType type) {
case kFloat4_GrSLType:
return 0xF;
case kUint2_GrSLType:
- return 0x3;
+ return 0x7;
case kInt2_GrSLType:
return 0x7;
case kInt3_GrSLType:
@@ -70,15 +80,27 @@ uint32_t grsltype_to_alignment_mask(GrSLType type) {
return 0;
}
-/** Returns the size in bytes taken up in vulkanbuffers for floating point GrSLTypes.
- For non floating point type returns 0. Currently this reflects the std140 alignment
- so a float2x2 takes up 8 floats. */
+/** Returns the size in bytes taken up in vulkanbuffers for GrSLTypes. */
static inline uint32_t grsltype_to_vk_size(GrSLType type) {
switch(type) {
- case kShort_GrSLType: // fall through
+ case kShort_GrSLType:
+ return sizeof(int16_t);
+ case kShort2_GrSLType:
+ return 2 * sizeof(int16_t);
+ case kShort3_GrSLType:
+ return 3 * sizeof(int16_t);
+ case kShort4_GrSLType:
+ return 4 * sizeof(int16_t);
+ case kUShort_GrSLType:
+ return sizeof(uint16_t);
+ case kUShort2_GrSLType:
+ return 2 * sizeof(uint16_t);
+ case kUShort3_GrSLType:
+ return 3 * sizeof(uint16_t);
+ case kUShort4_GrSLType:
+ return 4 * sizeof(uint16_t);
case kInt_GrSLType:
return sizeof(int32_t);
- case kUShort_GrSLType: // fall through
case kUint_GrSLType:
return sizeof(int32_t);
case kHalf_GrSLType: // fall through
@@ -94,7 +116,7 @@ static inline uint32_t grsltype_to_vk_size(GrSLType type) {
case kFloat4_GrSLType:
return 4 * sizeof(float);
case kUint2_GrSLType:
- return 2 * sizeof(uint16_t);
+ return 2 * sizeof(uint32_t);
case kInt2_GrSLType:
return 2 * sizeof(int32_t);
case kInt3_GrSLType: