Add integer vectors to GrSLType
BUG=skia:
Change-Id: I4a4a50e214f2240d83f6f0b02cf43e695c067933
Reviewed-on: https://skia-review.googlesource.com/8122
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
diff --git a/src/gpu/gl/GrGLVertexArray.cpp b/src/gpu/gl/GrGLVertexArray.cpp
index e03101a..807b9d0 100644
--- a/src/gpu/gl/GrGLVertexArray.cpp
+++ b/src/gpu/gl/GrGLVertexArray.cpp
@@ -10,32 +10,43 @@
#include "GrGLGpu.h"
struct AttribLayout {
- GrGLint fCount;
- GrGLenum fType;
- GrGLboolean fNormalized; // Only used by floating point types.
+ bool fNormalized; // Only used by floating point types.
+ uint8_t fCount;
+ uint16_t fType;
};
-static const AttribLayout gLayouts[kGrVertexAttribTypeCount] = {
- {1, GR_GL_FLOAT, false}, // kFloat_GrVertexAttribType
- {2, GR_GL_FLOAT, false}, // kVec2f_GrVertexAttribType
- {3, GR_GL_FLOAT, false}, // kVec3f_GrVertexAttribType
- {4, GR_GL_FLOAT, false}, // kVec4f_GrVertexAttribType
- {1, GR_GL_UNSIGNED_BYTE, true}, // kUByte_GrVertexAttribType
- {4, GR_GL_UNSIGNED_BYTE, true}, // kVec4ub_GrVertexAttribType
- {2, GR_GL_UNSIGNED_SHORT, true}, // kVec2s_GrVertexAttribType
- {1, GR_GL_INT, false}, // kInt_GrVertexAttribType
- {1, GR_GL_UNSIGNED_INT, false}, // kUint_GrVertexAttribType
-};
+GR_STATIC_ASSERT(4 == sizeof(AttribLayout));
-GR_STATIC_ASSERT(0 == kFloat_GrVertexAttribType);
-GR_STATIC_ASSERT(1 == kVec2f_GrVertexAttribType);
-GR_STATIC_ASSERT(2 == kVec3f_GrVertexAttribType);
-GR_STATIC_ASSERT(3 == kVec4f_GrVertexAttribType);
-GR_STATIC_ASSERT(4 == kUByte_GrVertexAttribType);
-GR_STATIC_ASSERT(5 == kVec4ub_GrVertexAttribType);
-GR_STATIC_ASSERT(6 == kVec2us_GrVertexAttribType);
-GR_STATIC_ASSERT(7 == kInt_GrVertexAttribType);
-GR_STATIC_ASSERT(8 == kUint_GrVertexAttribType);
+static AttribLayout attrib_layout(GrVertexAttribType type) {
+ switch (type) {
+ case kFloat_GrVertexAttribType:
+ return {false, 1, GR_GL_FLOAT};
+ case kVec2f_GrVertexAttribType:
+ return {false, 2, GR_GL_FLOAT};
+ case kVec3f_GrVertexAttribType:
+ return {false, 3, GR_GL_FLOAT};
+ case kVec4f_GrVertexAttribType:
+ return {false, 4, GR_GL_FLOAT};
+ case kVec2i_GrVertexAttribType:
+ return {false, 2, GR_GL_INT};
+ case kVec3i_GrVertexAttribType:
+ return {false, 3, GR_GL_INT};
+ case kVec4i_GrVertexAttribType:
+ return {false, 4, GR_GL_INT};
+ case kUByte_GrVertexAttribType:
+ return {true, 1, GR_GL_UNSIGNED_BYTE};
+ case kVec4ub_GrVertexAttribType:
+ return {true, 4, GR_GL_UNSIGNED_BYTE};
+ case kVec2us_GrVertexAttribType:
+ return {true, 2, GR_GL_UNSIGNED_SHORT};
+ case kInt_GrVertexAttribType:
+ return {false, 1, GR_GL_INT};
+ case kUint_GrVertexAttribType:
+ return {false, 1, GR_GL_UNSIGNED_INT};
+ }
+ SkFAIL("Unknown vertex attrib type");
+ return {false, 0, 0};
+};
void GrGLAttribArrayState::set(GrGLGpu* gpu,
int index,
@@ -55,7 +66,7 @@
array->fStride != stride ||
array->fOffset != offset) {
gpu->bindBuffer(kVertex_GrBufferType, vertexBuffer);
- const AttribLayout& layout = gLayouts[type];
+ const AttribLayout& layout = attrib_layout(type);
if (!GrVertexAttribTypeIsIntType(type)) {
GR_GL_CALL(gpu->glInterface(), VertexAttribPointer(index,
layout.fCount,
diff --git a/src/gpu/vk/GrVkPipeline.cpp b/src/gpu/vk/GrVkPipeline.cpp
index 40a6cf0..7c0aeb4 100644
--- a/src/gpu/vk/GrVkPipeline.cpp
+++ b/src/gpu/vk/GrVkPipeline.cpp
@@ -14,26 +14,35 @@
#include "GrVkRenderTarget.h"
#include "GrVkUtil.h"
-static inline const VkFormat& attrib_type_to_vkformat(GrVertexAttribType type) {
- SkASSERT(type >= 0 && type < kGrVertexAttribTypeCount);
- static const VkFormat kFormats[kGrVertexAttribTypeCount] = {
- VK_FORMAT_R32_SFLOAT, // kFloat_GrVertexAttribType
- VK_FORMAT_R32G32_SFLOAT, // kVec2f_GrVertexAttribType
- VK_FORMAT_R32G32B32_SFLOAT, // kVec3f_GrVertexAttribType
- VK_FORMAT_R32G32B32A32_SFLOAT, // kVec4f_GrVertexAttribType
- VK_FORMAT_R8_UNORM, // kUByte_GrVertexAttribType
- VK_FORMAT_R8G8B8A8_UNORM, // kVec4ub_GrVertexAttribType
- VK_FORMAT_R16G16_UNORM, // kVec2us_GrVertexAttribType
- };
- GR_STATIC_ASSERT(0 == kFloat_GrVertexAttribType);
- GR_STATIC_ASSERT(1 == kVec2f_GrVertexAttribType);
- GR_STATIC_ASSERT(2 == kVec3f_GrVertexAttribType);
- GR_STATIC_ASSERT(3 == kVec4f_GrVertexAttribType);
- GR_STATIC_ASSERT(4 == kUByte_GrVertexAttribType);
- GR_STATIC_ASSERT(5 == kVec4ub_GrVertexAttribType);
- GR_STATIC_ASSERT(6 == kVec2us_GrVertexAttribType);
- GR_STATIC_ASSERT(SK_ARRAY_COUNT(kFormats) == kGrVertexAttribTypeCount);
- return kFormats[type];
+static inline VkFormat attrib_type_to_vkformat(GrVertexAttribType type) {
+ switch (type) {
+ case kFloat_GrVertexAttribType:
+ return VK_FORMAT_R32_SFLOAT;
+ case kVec2f_GrVertexAttribType:
+ return VK_FORMAT_R32G32_SFLOAT;
+ case kVec3f_GrVertexAttribType:
+ return VK_FORMAT_R32G32B32_SFLOAT;
+ case kVec4f_GrVertexAttribType:
+ return VK_FORMAT_R32G32B32A32_SFLOAT;
+ case kVec2i_GrVertexAttribType:
+ return VK_FORMAT_R32G32_SINT;
+ case kVec3i_GrVertexAttribType:
+ return VK_FORMAT_R32G32B32_SINT;
+ case kVec4i_GrVertexAttribType:
+ return VK_FORMAT_R32G32B32A32_SINT;
+ case kUByte_GrVertexAttribType:
+ return VK_FORMAT_R8_UNORM;
+ case kVec4ub_GrVertexAttribType:
+ return VK_FORMAT_R8G8B8A8_UNORM;
+ case kVec2us_GrVertexAttribType:
+ return VK_FORMAT_R16G16_UNORM;
+ case kInt_GrVertexAttribType:
+ return VK_FORMAT_R32_SINT;
+ case kUint_GrVertexAttribType:
+ return VK_FORMAT_R32_UINT;
+ }
+ SkFAIL("Unknown vertex attrib type");
+ return VK_FORMAT_UNDEFINED;
}
static void setup_vertex_input_state(const GrPrimitiveProcessor& primProc,
diff --git a/src/gpu/vk/GrVkUniformHandler.cpp b/src/gpu/vk/GrVkUniformHandler.cpp
index f0f0fff..f69c9d1 100644
--- a/src/gpu/vk/GrVkUniformHandler.cpp
+++ b/src/gpu/vk/GrVkUniformHandler.cpp
@@ -28,6 +28,12 @@
return 0xF;
case kVec4f_GrSLType:
return 0xF;
+ case kVec2i_GrSLType:
+ return 0x7;
+ case kVec3i_GrSLType:
+ return 0xF;
+ case kVec4i_GrSLType:
+ return 0xF;
case kMat22f_GrSLType:
return 0x7;
case kMat33f_GrSLType:
@@ -59,9 +65,9 @@
static inline uint32_t grsltype_to_vk_size(GrSLType type) {
switch(type) {
case kInt_GrSLType:
- return 4;
+ return sizeof(int32_t);
case kUint_GrSLType:
- return 4;
+ return sizeof(int32_t);
case kFloat_GrSLType:
return sizeof(float);
case kVec2f_GrSLType:
@@ -70,6 +76,12 @@
return 3 * sizeof(float);
case kVec4f_GrSLType:
return 4 * sizeof(float);
+ case kVec2i_GrSLType:
+ return 2 * sizeof(int32_t);
+ case kVec3i_GrSLType:
+ return 3 * sizeof(int32_t);
+ case kVec4i_GrSLType:
+ return 4 * sizeof(int32_t);
case kMat22f_GrSLType:
//TODO: this will be 4 * szof(float) on std430.
return 8 * sizeof(float);
diff --git a/src/gpu/vk/GrVkVaryingHandler.cpp b/src/gpu/vk/GrVkVaryingHandler.cpp
index d7d08c9..d936e2b 100644
--- a/src/gpu/vk/GrVkVaryingHandler.cpp
+++ b/src/gpu/vk/GrVkVaryingHandler.cpp
@@ -21,6 +21,12 @@
return 1;
case kVec4f_GrSLType:
return 1;
+ case kVec2i_GrSLType:
+ return 1;
+ case kVec3i_GrSLType:
+ return 1;
+ case kVec4i_GrSLType:
+ return 1;
case kMat22f_GrSLType:
return 2;
case kMat33f_GrSLType: