diff options
-rw-r--r-- | include/gpu/GrTypesPriv.h | 366 | ||||
-rw-r--r-- | src/gpu/vk/GrVkUniformHandler.cpp | 152 | ||||
-rw-r--r-- | src/gpu/vk/GrVkVaryingHandler.cpp | 81 |
3 files changed, 258 insertions, 341 deletions
diff --git a/include/gpu/GrTypesPriv.h b/include/gpu/GrTypesPriv.h index 44d5599fed..2fa4c3ac72 100644 --- a/include/gpu/GrTypesPriv.h +++ b/include/gpu/GrTypesPriv.h @@ -17,6 +17,9 @@ */ enum GrSLType { kVoid_GrSLType, + kBool_GrSLType, + kInt_GrSLType, + kUint_GrSLType, kFloat_GrSLType, kVec2f_GrSLType, kVec3f_GrSLType, @@ -29,9 +32,6 @@ enum GrSLType { kTextureExternalSampler_GrSLType, kTexture2DRectSampler_GrSLType, kTextureBufferSampler_GrSLType, - kBool_GrSLType, - kInt_GrSLType, - kUint_GrSLType, kTexture2D_GrSLType, kSampler_GrSLType, @@ -83,173 +83,117 @@ enum GrSLPrecision { static const int kGrSLPrecisionCount = kLast_GrSLPrecision + 1; -/** - * Gets the vector size of the SLType. Returns -1 for void, matrices, and samplers. - */ -static inline int GrSLTypeVectorCount(GrSLType type) { - SkASSERT(type >= 0 && type < static_cast<GrSLType>(kGrSLTypeCount)); - static const int kCounts[] = { -1, 1, 2, 3, 4, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, -1 }; - return kCounts[type]; - - GR_STATIC_ASSERT(0 == kVoid_GrSLType); - GR_STATIC_ASSERT(1 == kFloat_GrSLType); - GR_STATIC_ASSERT(2 == kVec2f_GrSLType); - GR_STATIC_ASSERT(3 == kVec3f_GrSLType); - GR_STATIC_ASSERT(4 == kVec4f_GrSLType); - GR_STATIC_ASSERT(5 == kMat22f_GrSLType); - GR_STATIC_ASSERT(6 == kMat33f_GrSLType); - GR_STATIC_ASSERT(7 == kMat44f_GrSLType); - GR_STATIC_ASSERT(8 == kTexture2DSampler_GrSLType); - GR_STATIC_ASSERT(9 == kTexture2DISampler_GrSLType); - GR_STATIC_ASSERT(10 == kTextureExternalSampler_GrSLType); - GR_STATIC_ASSERT(11 == kTexture2DRectSampler_GrSLType); - GR_STATIC_ASSERT(12 == kTextureBufferSampler_GrSLType); - GR_STATIC_ASSERT(13 == kBool_GrSLType); - GR_STATIC_ASSERT(14 == kInt_GrSLType); - GR_STATIC_ASSERT(15 == kUint_GrSLType); - GR_STATIC_ASSERT(16 == kTexture2D_GrSLType); - GR_STATIC_ASSERT(17 == kSampler_GrSLType); - GR_STATIC_ASSERT(SK_ARRAY_COUNT(kCounts) == kGrSLTypeCount); -} - -/** Return the type enum for a vector of floats of length n (1..4), - e.g. 1 -> kFloat_GrSLType, 2 -> kVec2_GrSLType, ... */ -static inline GrSLType GrSLFloatVectorType(int count) { - SkASSERT(count > 0 && count <= 4); - return (GrSLType)(count); - - GR_STATIC_ASSERT(kFloat_GrSLType == 1); - GR_STATIC_ASSERT(kVec2f_GrSLType == 2); - GR_STATIC_ASSERT(kVec3f_GrSLType == 3); - GR_STATIC_ASSERT(kVec4f_GrSLType == 4); -} - /** Is the shading language type float (including vectors/matrices)? */ static inline bool GrSLTypeIsFloatType(GrSLType type) { - SkASSERT(type >= 0 && type < static_cast<GrSLType>(kGrSLTypeCount)); - return type >= kFloat_GrSLType && type <= kMat44f_GrSLType; - - GR_STATIC_ASSERT(0 == kVoid_GrSLType); - GR_STATIC_ASSERT(1 == kFloat_GrSLType); - GR_STATIC_ASSERT(2 == kVec2f_GrSLType); - GR_STATIC_ASSERT(3 == kVec3f_GrSLType); - GR_STATIC_ASSERT(4 == kVec4f_GrSLType); - GR_STATIC_ASSERT(5 == kMat22f_GrSLType); - GR_STATIC_ASSERT(6 == kMat33f_GrSLType); - GR_STATIC_ASSERT(7 == kMat44f_GrSLType); - GR_STATIC_ASSERT(8 == kTexture2DSampler_GrSLType); - GR_STATIC_ASSERT(9 == kTexture2DISampler_GrSLType); - GR_STATIC_ASSERT(10 == kTextureExternalSampler_GrSLType); - GR_STATIC_ASSERT(11 == kTexture2DRectSampler_GrSLType); - GR_STATIC_ASSERT(12 == kTextureBufferSampler_GrSLType); - GR_STATIC_ASSERT(13 == kBool_GrSLType); - GR_STATIC_ASSERT(14 == kInt_GrSLType); - GR_STATIC_ASSERT(15 == kUint_GrSLType); - GR_STATIC_ASSERT(16 == kTexture2D_GrSLType); - GR_STATIC_ASSERT(17 == kSampler_GrSLType); - GR_STATIC_ASSERT(18 == kGrSLTypeCount); -} - -/** Is the shading language type integral (including vectors/matrices)? */ -static inline bool GrSLTypeIsIntType(GrSLType type) { - SkASSERT(type >= 0 && type < static_cast<GrSLType>(kGrSLTypeCount)); - return type >= kInt_GrSLType && type <= kUint_GrSLType; - - GR_STATIC_ASSERT(0 == kVoid_GrSLType); - GR_STATIC_ASSERT(1 == kFloat_GrSLType); - GR_STATIC_ASSERT(2 == kVec2f_GrSLType); - GR_STATIC_ASSERT(3 == kVec3f_GrSLType); - GR_STATIC_ASSERT(4 == kVec4f_GrSLType); - GR_STATIC_ASSERT(5 == kMat22f_GrSLType); - GR_STATIC_ASSERT(6 == kMat33f_GrSLType); - GR_STATIC_ASSERT(7 == kMat44f_GrSLType); - GR_STATIC_ASSERT(8 == kTexture2DSampler_GrSLType); - GR_STATIC_ASSERT(9 == kTexture2DISampler_GrSLType); - GR_STATIC_ASSERT(10 == kTextureExternalSampler_GrSLType); - GR_STATIC_ASSERT(11 == kTexture2DRectSampler_GrSLType); - GR_STATIC_ASSERT(12 == kTextureBufferSampler_GrSLType); - GR_STATIC_ASSERT(13 == kBool_GrSLType); - GR_STATIC_ASSERT(14 == kInt_GrSLType); - GR_STATIC_ASSERT(15 == kUint_GrSLType); - GR_STATIC_ASSERT(16 == kTexture2D_GrSLType); - GR_STATIC_ASSERT(17 == kSampler_GrSLType); - GR_STATIC_ASSERT(18 == kGrSLTypeCount); -} - -/** Is the shading language type numeric (including vectors/matrices)? */ -static inline bool GrSLTypeIsNumeric(GrSLType type) { - return GrSLTypeIsFloatType(type) || GrSLTypeIsIntType(type); -} - -/** Returns the size in bytes for floating point GrSLTypes. For non floating point type returns 0 */ -static inline size_t GrSLTypeSize(GrSLType type) { - SkASSERT(GrSLTypeIsFloatType(type)); - static const size_t kSizes[] = { - 0, // kVoid_GrSLType - sizeof(float), // kFloat_GrSLType - 2 * sizeof(float), // kVec2f_GrSLType - 3 * sizeof(float), // kVec3f_GrSLType - 4 * sizeof(float), // kVec4f_GrSLType - 2 * 2 * sizeof(float), // kMat22f_GrSLType - 3 * 3 * sizeof(float), // kMat33f_GrSLType - 4 * 4 * sizeof(float), // kMat44f_GrSLType - 0, // kTexture2DSampler_GrSLType - 0, // kTexture2DISampler_GrSLType - 0, // kTextureExternalSampler_GrSLType - 0, // kTexture2DRectSampler_GrSLType - 0, // kTextureBufferSampler_GrSLType - 0, // kBool_GrSLType - 0, // kInt_GrSLType - 0, // kUint_GrSLType - 0, // kTexture2D_GrSLType - 0, // kSampler_GrSLType - }; - return kSizes[type]; - - GR_STATIC_ASSERT(0 == kVoid_GrSLType); - GR_STATIC_ASSERT(1 == kFloat_GrSLType); - GR_STATIC_ASSERT(2 == kVec2f_GrSLType); - GR_STATIC_ASSERT(3 == kVec3f_GrSLType); - GR_STATIC_ASSERT(4 == kVec4f_GrSLType); - GR_STATIC_ASSERT(5 == kMat22f_GrSLType); - GR_STATIC_ASSERT(6 == kMat33f_GrSLType); - GR_STATIC_ASSERT(7 == kMat44f_GrSLType); - GR_STATIC_ASSERT(8 == kTexture2DSampler_GrSLType); - GR_STATIC_ASSERT(9 == kTexture2DISampler_GrSLType); - GR_STATIC_ASSERT(10 == kTextureExternalSampler_GrSLType); - GR_STATIC_ASSERT(11 == kTexture2DRectSampler_GrSLType); - GR_STATIC_ASSERT(12 == kTextureBufferSampler_GrSLType); - GR_STATIC_ASSERT(13 == kBool_GrSLType); - GR_STATIC_ASSERT(14 == kInt_GrSLType); - GR_STATIC_ASSERT(15 == kUint_GrSLType); - GR_STATIC_ASSERT(16 == kTexture2D_GrSLType); - GR_STATIC_ASSERT(17 == kSampler_GrSLType); - GR_STATIC_ASSERT(18 == kGrSLTypeCount); + switch (type) { + case kFloat_GrSLType: + case kVec2f_GrSLType: + case kVec3f_GrSLType: + case kVec4f_GrSLType: + case kMat22f_GrSLType: + case kMat33f_GrSLType: + case kMat44f_GrSLType: + return true; + + case kVoid_GrSLType: + case kTexture2DSampler_GrSLType: + case kTexture2DISampler_GrSLType: + case kTextureExternalSampler_GrSLType: + case kTexture2DRectSampler_GrSLType: + case kTextureBufferSampler_GrSLType: + case kBool_GrSLType: + case kInt_GrSLType: + case kUint_GrSLType: + case kTexture2D_GrSLType: + case kSampler_GrSLType: + return false; + } + SkFAIL("Unexpected type"); + return false; } static inline bool GrSLTypeIs2DCombinedSamplerType(GrSLType type) { - SkASSERT(type >= 0 && type < static_cast<GrSLType>(kGrSLTypeCount)); - return type >= kTexture2DSampler_GrSLType && type <= kTexture2DRectSampler_GrSLType; - - GR_STATIC_ASSERT(8 == kTexture2DSampler_GrSLType); - GR_STATIC_ASSERT(9 == kTexture2DISampler_GrSLType); - GR_STATIC_ASSERT(10 == kTextureExternalSampler_GrSLType); - GR_STATIC_ASSERT(11 == kTexture2DRectSampler_GrSLType); + switch (type) { + case kTexture2DSampler_GrSLType: + case kTexture2DISampler_GrSLType: + case kTextureExternalSampler_GrSLType: + case kTexture2DRectSampler_GrSLType: + return true; + + case kVoid_GrSLType: + case kFloat_GrSLType: + case kVec2f_GrSLType: + case kVec3f_GrSLType: + case kVec4f_GrSLType: + case kMat22f_GrSLType: + case kMat33f_GrSLType: + case kMat44f_GrSLType: + case kTextureBufferSampler_GrSLType: + case kInt_GrSLType: + case kUint_GrSLType: + case kBool_GrSLType: + case kTexture2D_GrSLType: + case kSampler_GrSLType: + return false; + } + SkFAIL("Unexpected type"); + return false; } static inline bool GrSLTypeIsCombinedSamplerType(GrSLType type) { - SkASSERT(type >= 0 && type < static_cast<GrSLType>(kGrSLTypeCount)); - return type >= kTexture2DSampler_GrSLType && type <= kTextureBufferSampler_GrSLType; - - GR_STATIC_ASSERT(8 == kTexture2DSampler_GrSLType); - GR_STATIC_ASSERT(9 == kTexture2DISampler_GrSLType); - GR_STATIC_ASSERT(10 == kTextureExternalSampler_GrSLType); - GR_STATIC_ASSERT(11 == kTexture2DRectSampler_GrSLType); - GR_STATIC_ASSERT(12 == kTextureBufferSampler_GrSLType); + switch (type) { + case kTexture2DSampler_GrSLType: + case kTexture2DISampler_GrSLType: + case kTextureExternalSampler_GrSLType: + case kTexture2DRectSampler_GrSLType: + case kTextureBufferSampler_GrSLType: + return true; + + case kVoid_GrSLType: + case kFloat_GrSLType: + case kVec2f_GrSLType: + case kVec3f_GrSLType: + case kVec4f_GrSLType: + case kMat22f_GrSLType: + case kMat33f_GrSLType: + case kMat44f_GrSLType: + case kInt_GrSLType: + case kUint_GrSLType: + case kBool_GrSLType: + case kTexture2D_GrSLType: + case kSampler_GrSLType: + return false; + } + SkFAIL("Unexpected type"); + return false; } static inline bool GrSLTypeAcceptsPrecision(GrSLType type) { - return type != kVoid_GrSLType && type != kBool_GrSLType; + switch (type) { + case kInt_GrSLType: + case kUint_GrSLType: + case kFloat_GrSLType: + case kVec2f_GrSLType: + case kVec3f_GrSLType: + case kVec4f_GrSLType: + case kMat22f_GrSLType: + case kMat33f_GrSLType: + case kMat44f_GrSLType: + case kTexture2DSampler_GrSLType: + case kTexture2DISampler_GrSLType: + case kTextureExternalSampler_GrSLType: + case kTexture2DRectSampler_GrSLType: + case kTextureBufferSampler_GrSLType: + case kTexture2D_GrSLType: + case kSampler_GrSLType: + return true; + + case kVoid_GrSLType: + case kBool_GrSLType: + return false; + } + SkFAIL("Unexpected type"); + return false; } ////////////////////////////////////////////////////////////////////////////// @@ -275,72 +219,61 @@ enum GrVertexAttribType { }; static const int kGrVertexAttribTypeCount = kLast_GrVertexAttribType + 1; -/** - * Returns the vector size of the type. - */ -static inline int GrVertexAttribTypeVectorCount(GrVertexAttribType type) { - SkASSERT(type >= 0 && type < kGrVertexAttribTypeCount); - static const int kCounts[] = { 1, 2, 3, 4, 1, 4, 2, 1, 1 }; - return kCounts[type]; - - 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); - GR_STATIC_ASSERT(SK_ARRAY_COUNT(kCounts) == kGrVertexAttribTypeCount); -} /** * Returns the size of the attrib type in bytes. */ static inline size_t GrVertexAttribTypeSize(GrVertexAttribType type) { - static const size_t kSizes[] = { - sizeof(float), // kFloat_GrVertexAttribType - 2*sizeof(float), // kVec2f_GrVertexAttribType - 3*sizeof(float), // kVec3f_GrVertexAttribType - 4*sizeof(float), // kVec4f_GrVertexAttribType - 1*sizeof(char), // kUByte_GrVertexAttribType - 4*sizeof(char), // kVec4ub_GrVertexAttribType - 2*sizeof(int16_t), // kVec2us_GrVertexAttribType - sizeof(int32_t), // kInt_GrVertexAttribType - sizeof(uint32_t) // kUint_GrVertexAttribType - }; - return kSizes[type]; - - 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); - GR_STATIC_ASSERT(SK_ARRAY_COUNT(kSizes) == kGrVertexAttribTypeCount); + switch (type) { + case kFloat_GrVertexAttribType: + return sizeof(float); + case kVec2f_GrVertexAttribType: + return 2*sizeof(float); + case kVec3f_GrVertexAttribType: + return 3*sizeof(float); + case kVec4f_GrVertexAttribType: + return 4*sizeof(float); + case kUByte_GrVertexAttribType: + return 1*sizeof(char); + case kVec4ub_GrVertexAttribType: + return 4*sizeof(char); + case kVec2us_GrVertexAttribType: + return 2*sizeof(int16_t); + case kInt_GrVertexAttribType: + return sizeof(int32_t); + case kUint_GrVertexAttribType: + return sizeof(uint32_t); + } + SkFAIL("Unexpected attribute type"); + return 0; } /** * Is the attrib type integral? */ static inline bool GrVertexAttribTypeIsIntType(GrVertexAttribType type) { - SkASSERT(type >= 0 && type < static_cast<GrVertexAttribType>(kGrVertexAttribTypeCount)); - return type >= kInt_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(7 == kInt_GrVertexAttribType); - GR_STATIC_ASSERT(8 == kUint_GrVertexAttribType); - GR_STATIC_ASSERT(9 == kGrVertexAttribTypeCount); + switch (type) { + case kFloat_GrVertexAttribType: + return false; + case kVec2f_GrVertexAttribType: + return false; + case kVec3f_GrVertexAttribType: + return false; + case kVec4f_GrVertexAttribType: + return false; + case kUByte_GrVertexAttribType: + return false; + case kVec4ub_GrVertexAttribType: + return false; + case kVec2us_GrVertexAttribType: + return false; + case kInt_GrVertexAttribType: + return true; + case kUint_GrVertexAttribType: + return true; + } + SkFAIL("Unexpected attribute type"); + return false; } /** @@ -348,9 +281,6 @@ static inline bool GrVertexAttribTypeIsIntType(GrVertexAttribType type) { */ static inline GrSLType GrVertexAttribTypeToSLType(GrVertexAttribType type) { switch (type) { - default: - SkFAIL("Unsupported type conversion"); - return kVoid_GrSLType; case kUByte_GrVertexAttribType: case kFloat_GrVertexAttribType: return kFloat_GrSLType; @@ -367,6 +297,8 @@ static inline GrSLType GrVertexAttribTypeToSLType(GrVertexAttribType type) { case kUint_GrVertexAttribType: return kUint_GrSLType; } + SkFAIL("Unsupported type conversion"); + return kVoid_GrSLType; } ////////////////////////////////////////////////////////////////////////////// diff --git a/src/gpu/vk/GrVkUniformHandler.cpp b/src/gpu/vk/GrVkUniformHandler.cpp index 7c11b9dc46..612d0db937 100644 --- a/src/gpu/vk/GrVkUniformHandler.cpp +++ b/src/gpu/vk/GrVkUniformHandler.cpp @@ -15,95 +15,81 @@ // 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). uint32_t grsltype_to_alignment_mask(GrSLType type) { - SkASSERT(GrSLTypeIsFloatType(type)); - static const uint32_t kAlignmentMask[] = { - 0x0, // kVoid_GrSLType, should never return this - 0x3, // kFloat_GrSLType - 0x7, // kVec2f_GrSLType - 0xF, // kVec3f_GrSLType - 0xF, // kVec4f_GrSLType - 0x7, // kMat22f_GrSLType - 0xF, // kMat33f_GrSLType - 0xF, // kMat44f_GrSLType - 0x0, // kTexture2DSampler_GrSLType, should never return this - 0x0, // kTexture2DISampler_GrSLType, should never return this - 0x0, // kTextureExternalSampler_GrSLType, should never return this - 0x0, // kTexture2DSamplerRect_GrSLType, should never return this - 0x0, // ktextureBufferSampler_GrSLType, should never return this - 0x0, // kBool_GrSLType - 0x7, // kInt_GrSLType - 0x7, // kUint_GrSLType - 0x0, // Texture2D_GrSLType, should never return this - 0x0, // Sampler_GrSLType, should never return this - }; - GR_STATIC_ASSERT(0 == kVoid_GrSLType); - GR_STATIC_ASSERT(1 == kFloat_GrSLType); - GR_STATIC_ASSERT(2 == kVec2f_GrSLType); - GR_STATIC_ASSERT(3 == kVec3f_GrSLType); - GR_STATIC_ASSERT(4 == kVec4f_GrSLType); - GR_STATIC_ASSERT(5 == kMat22f_GrSLType); - GR_STATIC_ASSERT(6 == kMat33f_GrSLType); - GR_STATIC_ASSERT(7 == kMat44f_GrSLType); - GR_STATIC_ASSERT(8 == kTexture2DSampler_GrSLType); - GR_STATIC_ASSERT(9 == kTexture2DISampler_GrSLType); - GR_STATIC_ASSERT(10 == kTextureExternalSampler_GrSLType); - GR_STATIC_ASSERT(11 == kTexture2DRectSampler_GrSLType); - GR_STATIC_ASSERT(12 == kTextureBufferSampler_GrSLType); - GR_STATIC_ASSERT(13 == kBool_GrSLType); - GR_STATIC_ASSERT(14 == kInt_GrSLType); - GR_STATIC_ASSERT(15 == kUint_GrSLType); - GR_STATIC_ASSERT(16 == kTexture2D_GrSLType); - GR_STATIC_ASSERT(17 == kSampler_GrSLType); - GR_STATIC_ASSERT(SK_ARRAY_COUNT(kAlignmentMask) == kGrSLTypeCount); - return kAlignmentMask[type]; + switch(type) { + case kInt_GrSLType: + return 0x3; + case kUint_GrSLType: + return 0x3; + case kFloat_GrSLType: + return 0x3; + case kVec2f_GrSLType: + return 0x7; + case kVec3f_GrSLType: + return 0xF; + case kVec4f_GrSLType: + return 0xF; + case kMat22f_GrSLType: + return 0x7; + case kMat33f_GrSLType: + return 0xF; + case kMat44f_GrSLType: + return 0xF; + + // This query is only valid for certain types. + case kVoid_GrSLType: + case kBool_GrSLType: + case kTexture2DSampler_GrSLType: + case kTexture2DISampler_GrSLType: + case kTextureExternalSampler_GrSLType: + case kTexture2DRectSampler_GrSLType: + case kTextureBufferSampler_GrSLType: + case kTexture2D_GrSLType: + case kSampler_GrSLType: + break; + } + SkFAIL("Unexpected 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 mat22 takes up 8 floats. */ static inline uint32_t grsltype_to_vk_size(GrSLType type) { - SkASSERT(GrSLTypeIsFloatType(type)); - static const uint32_t kSizes[] = { - 0, // kVoid_GrSLType - sizeof(float), // kFloat_GrSLType - 2 * sizeof(float), // kVec2f_GrSLType - 3 * sizeof(float), // kVec3f_GrSLType - 4 * sizeof(float), // kVec4f_GrSLType - 8 * sizeof(float), // kMat22f_GrSLType. TODO: this will be 4 * szof(float) on std430. - 12 * sizeof(float), // kMat33f_GrSLType - 16 * sizeof(float), // kMat44f_GrSLType - 0, // kTexture2DSampler_GrSLType - 0, // kTexture2DISampler_GrSLType - 0, // kTextureExternalSampler_GrSLType - 0, // kTexture2DRectSampler_GrSLType - 0, // kTextureBufferSampler_GrSLType - 1, // kBool_GrSLType - 4, // kInt_GrSLType - 4, // kUint_GrSLType - 0, // kTexture2D_GrSLType - 0, // kSampler_GrSLType - }; - return kSizes[type]; - - GR_STATIC_ASSERT(0 == kVoid_GrSLType); - GR_STATIC_ASSERT(1 == kFloat_GrSLType); - GR_STATIC_ASSERT(2 == kVec2f_GrSLType); - GR_STATIC_ASSERT(3 == kVec3f_GrSLType); - GR_STATIC_ASSERT(4 == kVec4f_GrSLType); - GR_STATIC_ASSERT(5 == kMat22f_GrSLType); - GR_STATIC_ASSERT(6 == kMat33f_GrSLType); - GR_STATIC_ASSERT(7 == kMat44f_GrSLType); - GR_STATIC_ASSERT(8 == kTexture2DSampler_GrSLType); - GR_STATIC_ASSERT(9 == kTexture2DISampler_GrSLType); - GR_STATIC_ASSERT(10 == kTextureExternalSampler_GrSLType); - GR_STATIC_ASSERT(11 == kTexture2DRectSampler_GrSLType); - GR_STATIC_ASSERT(12 == kTextureBufferSampler_GrSLType); - GR_STATIC_ASSERT(13 == kBool_GrSLType); - GR_STATIC_ASSERT(14 == kInt_GrSLType); - GR_STATIC_ASSERT(15 == kUint_GrSLType); - GR_STATIC_ASSERT(16 == kTexture2D_GrSLType); - GR_STATIC_ASSERT(17 == kSampler_GrSLType); - GR_STATIC_ASSERT(SK_ARRAY_COUNT(kSizes) == kGrSLTypeCount); + switch(type) { + case kInt_GrSLType: + return 4; + case kUint_GrSLType: + return 4; + case kFloat_GrSLType: + return sizeof(float); + case kVec2f_GrSLType: + return 2 * sizeof(float); + case kVec3f_GrSLType: + return 3 * sizeof(float); + case kVec4f_GrSLType: + return 4 * sizeof(float); + case kMat22f_GrSLType: + //TODO: this will be 4 * szof(float) on std430. + return 8 * sizeof(float); + case kMat33f_GrSLType: + return 12 * sizeof(float); + case kMat44f_GrSLType: + return 16 * sizeof(float); + + // This query is only valid for certain types. + case kVoid_GrSLType: + case kBool_GrSLType: + case kTexture2DSampler_GrSLType: + case kTexture2DISampler_GrSLType: + case kTextureExternalSampler_GrSLType: + case kTexture2DRectSampler_GrSLType: + case kTextureBufferSampler_GrSLType: + case kTexture2D_GrSLType: + case kSampler_GrSLType: + break; + } + SkFAIL("Unexpected type"); + return 0; } diff --git a/src/gpu/vk/GrVkVaryingHandler.cpp b/src/gpu/vk/GrVkVaryingHandler.cpp index 10c536260f..988e62cda0 100644 --- a/src/gpu/vk/GrVkVaryingHandler.cpp +++ b/src/gpu/vk/GrVkVaryingHandler.cpp @@ -10,47 +10,46 @@ /** Returns the number of locations take up by a given GrSLType. We assume that all scalar values are 32 bits. */ static inline int grsltype_to_location_size(GrSLType type) { - static const uint32_t kSizes[] = { - 0, // kVoid_GrSLType - 1, // kFloat_GrSLType - 1, // kVec2f_GrSLType - 1, // kVec3f_GrSLType - 1, // kVec4f_GrSLType - 2, // kMat22f_GrSLType - 3, // kMat33f_GrSLType - 4, // kMat44f_GrSLType - 0, // kTexture2DSampler_GrSLType - 0, // kTexture2DISampler_GrSLType - 0, // kTextureExternalSampler_GrSLType - 0, // kTexture2DRectSampler_GrSLType - 0, // kTextureBufferSampler_GrSLType - 1, // kBool_GrSLType - 1, // kInt_GrSLType - 1, // kUint_GrSLType - 0, // kTexture2D_GrSLType - 0, // kSampler_GrSLType - }; - return kSizes[type]; - - GR_STATIC_ASSERT(0 == kVoid_GrSLType); - GR_STATIC_ASSERT(1 == kFloat_GrSLType); - GR_STATIC_ASSERT(2 == kVec2f_GrSLType); - GR_STATIC_ASSERT(3 == kVec3f_GrSLType); - GR_STATIC_ASSERT(4 == kVec4f_GrSLType); - GR_STATIC_ASSERT(5 == kMat22f_GrSLType); - GR_STATIC_ASSERT(6 == kMat33f_GrSLType); - GR_STATIC_ASSERT(7 == kMat44f_GrSLType); - GR_STATIC_ASSERT(8 == kTexture2DSampler_GrSLType); - GR_STATIC_ASSERT(9 == kTexture2DISampler_GrSLType); - GR_STATIC_ASSERT(10 == kTextureExternalSampler_GrSLType); - GR_STATIC_ASSERT(11 == kTexture2DRectSampler_GrSLType); - GR_STATIC_ASSERT(12 == kTextureBufferSampler_GrSLType); - GR_STATIC_ASSERT(13 == kBool_GrSLType); - GR_STATIC_ASSERT(14 == kInt_GrSLType); - GR_STATIC_ASSERT(15 == kUint_GrSLType); - GR_STATIC_ASSERT(16 == kTexture2D_GrSLType); - GR_STATIC_ASSERT(17 == kSampler_GrSLType); - GR_STATIC_ASSERT(SK_ARRAY_COUNT(kSizes) == kGrSLTypeCount); + switch(type) { + case kVoid_GrSLType: + return 0; + case kFloat_GrSLType: + return 1; + case kVec2f_GrSLType: + return 1; + case kVec3f_GrSLType: + return 1; + case kVec4f_GrSLType: + return 1; + case kMat22f_GrSLType: + return 2; + case kMat33f_GrSLType: + return 3; + case kMat44f_GrSLType: + return 4; + case kTexture2DSampler_GrSLType: + return 0; + case kTexture2DISampler_GrSLType: + return 0; + case kTextureExternalSampler_GrSLType: + return 0; + case kTexture2DRectSampler_GrSLType: + return 0; + case kTextureBufferSampler_GrSLType: + return 0; + case kBool_GrSLType: + return 1; + case kInt_GrSLType: + return 1; + case kUint_GrSLType: + return 1; + case kTexture2D_GrSLType: + return 0; + case kSampler_GrSLType: + return 0; + } + SkFAIL("Unexpected type"); + return -1; } void finalize_helper(GrVkVaryingHandler::VarArray& vars) { |