diff options
-rw-r--r-- | include/gpu/GrCaps.h | 2 | ||||
-rw-r--r-- | include/gpu/GrTypesPriv.h | 50 | ||||
-rw-r--r-- | include/gpu/gl/GrGLFunctions.h | 1 | ||||
-rw-r--r-- | include/gpu/gl/GrGLInterface.h | 1 | ||||
-rw-r--r-- | src/gpu/GrCaps.cpp | 2 | ||||
-rw-r--r-- | src/gpu/gl/GrGLAssembleInterface.cpp | 8 | ||||
-rw-r--r-- | src/gpu/gl/GrGLCaps.cpp | 5 | ||||
-rw-r--r-- | src/gpu/gl/GrGLCreateNullInterface.cpp | 3 | ||||
-rw-r--r-- | src/gpu/gl/GrGLGpu.cpp | 12 | ||||
-rw-r--r-- | src/gpu/gl/GrGLInterface.cpp | 7 | ||||
-rw-r--r-- | src/gpu/gl/GrGLNoOpInterface.cpp | 7 | ||||
-rw-r--r-- | src/gpu/gl/GrGLNoOpInterface.h | 6 | ||||
-rw-r--r-- | src/gpu/gl/GrGLVertexArray.cpp | 60 | ||||
-rw-r--r-- | src/gpu/gl/GrGLVertexArray.h | 49 | ||||
-rw-r--r-- | src/gpu/gl/SkNullGLContext.cpp | 3 | ||||
-rw-r--r-- | src/gpu/gl/debug/GrGLCreateDebugInterface.cpp | 3 | ||||
-rw-r--r-- | src/gpu/glsl/GrGLSL.h | 2 |
17 files changed, 73 insertions, 148 deletions
diff --git a/include/gpu/GrCaps.h b/include/gpu/GrCaps.h index fc682069ea..944fb1481c 100644 --- a/include/gpu/GrCaps.h +++ b/include/gpu/GrCaps.h @@ -62,7 +62,6 @@ public: bool pathRenderingSupport() const { return fPathRenderingSupport; } bool dstReadInShaderSupport() const { return fDstReadInShaderSupport; } bool dualSourceBlendingSupport() const { return fDualSourceBlendingSupport; } - bool integerSupport() const { return fIntegerSupport; } /** * Get the precision info for a variable of type kFloat_GrSLType, kVec2f_GrSLType, etc in a @@ -110,7 +109,6 @@ protected: bool fPathRenderingSupport : 1; bool fDstReadInShaderSupport : 1; bool fDualSourceBlendingSupport : 1; - bool fIntegerSupport : 1; bool fShaderPrecisionVaries; PrecisionInfo fFloatPrecisions[kGrShaderTypeCount][kGrSLPrecisionCount]; diff --git a/include/gpu/GrTypesPriv.h b/include/gpu/GrTypesPriv.h index 4026eb7874..bc107b5cf5 100644 --- a/include/gpu/GrTypesPriv.h +++ b/include/gpu/GrTypesPriv.h @@ -29,9 +29,8 @@ enum GrSLType { kSampler2DRect_GrSLType, kBool_GrSLType, kInt_GrSLType, - kUint_GrSLType, - kLast_GrSLType = kUint_GrSLType + kLast_GrSLType = kInt_GrSLType }; static const int kGrSLTypeCount = kLast_GrSLType + 1; @@ -68,7 +67,7 @@ static const int kGrSLPrecisionCount = kLast_GrSLPrecision + 1; */ 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 }; + static const int kCounts[] = { -1, 1, 2, 3, 4, -1, -1, -1, -1, -1, -1, -1 }; return kCounts[type]; GR_STATIC_ASSERT(0 == kVoid_GrSLType); @@ -83,7 +82,6 @@ static inline int GrSLTypeVectorCount(GrSLType type) { GR_STATIC_ASSERT(9 == kSampler2DRect_GrSLType); GR_STATIC_ASSERT(10 == kBool_GrSLType); GR_STATIC_ASSERT(11 == kInt_GrSLType); - GR_STATIC_ASSERT(12 == kUint_GrSLType); GR_STATIC_ASSERT(SK_ARRAY_COUNT(kCounts) == kGrSLTypeCount); } @@ -116,14 +114,13 @@ static inline bool GrSLTypeIsFloatType(GrSLType type) { GR_STATIC_ASSERT(9 == kSampler2DRect_GrSLType); GR_STATIC_ASSERT(10 == kBool_GrSLType); GR_STATIC_ASSERT(11 == kInt_GrSLType); - GR_STATIC_ASSERT(12 == kUint_GrSLType); - GR_STATIC_ASSERT(13 == kGrSLTypeCount); + GR_STATIC_ASSERT(12 == 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; + return type == kInt_GrSLType; GR_STATIC_ASSERT(0 == kVoid_GrSLType); GR_STATIC_ASSERT(1 == kFloat_GrSLType); @@ -137,8 +134,7 @@ static inline bool GrSLTypeIsIntType(GrSLType type) { GR_STATIC_ASSERT(9 == kSampler2DRect_GrSLType); GR_STATIC_ASSERT(10 == kBool_GrSLType); GR_STATIC_ASSERT(11 == kInt_GrSLType); - GR_STATIC_ASSERT(12 == kUint_GrSLType); - GR_STATIC_ASSERT(13 == kGrSLTypeCount); + GR_STATIC_ASSERT(12 == kGrSLTypeCount); } /** Is the shading language type numeric (including vectors/matrices)? */ @@ -162,7 +158,6 @@ static inline size_t GrSLTypeSize(GrSLType type) { 0, // kSampler2DRect_GrSLType 0, // kBool_GrSLType 0, // kInt_GrSLType - 0, // kUint_GrSLType }; return kSizes[type]; @@ -178,8 +173,7 @@ static inline size_t GrSLTypeSize(GrSLType type) { GR_STATIC_ASSERT(9 == kSampler2DRect_GrSLType); GR_STATIC_ASSERT(10 == kBool_GrSLType); GR_STATIC_ASSERT(11 == kInt_GrSLType); - GR_STATIC_ASSERT(12 == kUint_GrSLType); - GR_STATIC_ASSERT(13 == kGrSLTypeCount); + GR_STATIC_ASSERT(12 == kGrSLTypeCount); } static inline bool GrSLTypeIsSamplerType(GrSLType type) { @@ -208,9 +202,8 @@ enum GrVertexAttribType { kVec2s_GrVertexAttribType, // vector of 2 shorts, e.g. texture coordinates kInt_GrVertexAttribType, - kUint_GrVertexAttribType, - kLast_GrVertexAttribType = kUint_GrVertexAttribType + kLast_GrVertexAttribType = kInt_GrVertexAttribType }; static const int kGrVertexAttribTypeCount = kLast_GrVertexAttribType + 1; @@ -218,8 +211,7 @@ 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 }; + static const int kCounts[] = { 1, 2, 3, 4, 1, 4, 2, 1 }; return kCounts[type]; GR_STATIC_ASSERT(0 == kFloat_GrVertexAttribType); @@ -230,7 +222,6 @@ static inline int GrVertexAttribTypeVectorCount(GrVertexAttribType type) { GR_STATIC_ASSERT(5 == kVec4ub_GrVertexAttribType); GR_STATIC_ASSERT(6 == kVec2s_GrVertexAttribType); GR_STATIC_ASSERT(7 == kInt_GrVertexAttribType); - GR_STATIC_ASSERT(8 == kUint_GrVertexAttribType); GR_STATIC_ASSERT(SK_ARRAY_COUNT(kCounts) == kGrVertexAttribTypeCount); } @@ -246,8 +237,7 @@ static inline size_t GrVertexAttribTypeSize(GrVertexAttribType type) { 1*sizeof(char), // kUByte_GrVertexAttribType 4*sizeof(char), // kVec4ub_GrVertexAttribType 2*sizeof(int16_t), // kVec2s_GrVertexAttribType - sizeof(int32_t), // kInt_GrVertexAttribType - sizeof(uint32_t) // kUint_GrVertexAttribType + sizeof(int32_t) // kInt_GrVertexAttribType }; return kSizes[type]; @@ -259,30 +249,10 @@ static inline size_t GrVertexAttribTypeSize(GrVertexAttribType type) { GR_STATIC_ASSERT(5 == kVec4ub_GrVertexAttribType); GR_STATIC_ASSERT(6 == kVec2s_GrVertexAttribType); GR_STATIC_ASSERT(7 == kInt_GrVertexAttribType); - GR_STATIC_ASSERT(8 == kUint_GrVertexAttribType); GR_STATIC_ASSERT(SK_ARRAY_COUNT(kSizes) == kGrVertexAttribTypeCount); } /** - * 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 == kVec2s_GrVertexAttribType); - GR_STATIC_ASSERT(7 == kInt_GrVertexAttribType); - GR_STATIC_ASSERT(8 == kUint_GrVertexAttribType); - GR_STATIC_ASSERT(9 == kGrVertexAttribTypeCount); -} - -/** * converts a GrVertexAttribType to a GrSLType */ static inline GrSLType GrVertexAttribTypeToSLType(GrVertexAttribType type) { @@ -303,8 +273,6 @@ static inline GrSLType GrVertexAttribTypeToSLType(GrVertexAttribType type) { return kVec4f_GrSLType; case kInt_GrVertexAttribType: return kInt_GrSLType; - case kUint_GrVertexAttribType: - return kUint_GrSLType; } } diff --git a/include/gpu/gl/GrGLFunctions.h b/include/gpu/gl/GrGLFunctions.h index 3fd912f222..ad59ec0c00 100644 --- a/include/gpu/gl/GrGLFunctions.h +++ b/include/gpu/gl/GrGLFunctions.h @@ -176,7 +176,6 @@ typedef GrGLvoid (GR_GL_FUNCTION_TYPE* GrGLVertexAttrib2fvProc)(GrGLuint indx, c typedef GrGLvoid (GR_GL_FUNCTION_TYPE* GrGLVertexAttrib3fvProc)(GrGLuint indx, const GrGLfloat* values); typedef GrGLvoid (GR_GL_FUNCTION_TYPE* GrGLVertexAttrib4fvProc)(GrGLuint indx, const GrGLfloat* values); typedef GrGLvoid (GR_GL_FUNCTION_TYPE* GrGLVertexAttribDivisorProc)(GrGLuint index, GrGLuint divisor); -typedef GrGLvoid (GR_GL_FUNCTION_TYPE* GrGLVertexAttribIPointerProc)(GrGLuint indx, GrGLint size, GrGLenum type, GrGLsizei stride, const GrGLvoid* ptr); typedef GrGLvoid (GR_GL_FUNCTION_TYPE* GrGLVertexAttribPointerProc)(GrGLuint indx, GrGLint size, GrGLenum type, GrGLboolean normalized, GrGLsizei stride, const GrGLvoid* ptr); typedef GrGLvoid (GR_GL_FUNCTION_TYPE* GrGLViewportProc)(GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height); diff --git a/include/gpu/gl/GrGLInterface.h b/include/gpu/gl/GrGLInterface.h index 5dd3b61e56..dd9a9fb386 100644 --- a/include/gpu/gl/GrGLInterface.h +++ b/include/gpu/gl/GrGLInterface.h @@ -332,7 +332,6 @@ public: GLPtr<GrGLVertexAttrib3fvProc> fVertexAttrib3fv; GLPtr<GrGLVertexAttrib4fvProc> fVertexAttrib4fv; GLPtr<GrGLVertexAttribDivisorProc> fVertexAttribDivisor; - GLPtr<GrGLVertexAttribIPointerProc> fVertexAttribIPointer; GLPtr<GrGLVertexAttribPointerProc> fVertexAttribPointer; GLPtr<GrGLViewportProc> fViewport; diff --git a/src/gpu/GrCaps.cpp b/src/gpu/GrCaps.cpp index 2568e567fc..46f49357c7 100644 --- a/src/gpu/GrCaps.cpp +++ b/src/gpu/GrCaps.cpp @@ -15,7 +15,6 @@ GrShaderCaps::GrShaderCaps() { fPathRenderingSupport = false; fDstReadInShaderSupport = false; fDualSourceBlendingSupport = false; - fIntegerSupport = false; fShaderPrecisionVaries = false; } @@ -51,7 +50,6 @@ SkString GrShaderCaps::dump() const { r.appendf("Path Rendering Support : %s\n", gNY[fPathRenderingSupport]); r.appendf("Dst Read In Shader Support : %s\n", gNY[fDstReadInShaderSupport]); r.appendf("Dual Source Blending Support : %s\n", gNY[fDualSourceBlendingSupport]); - r.appendf("Integer Support : %s\n", gNY[fIntegerSupport]); r.appendf("Shader Float Precisions (varies: %s):\n", gNY[fShaderPrecisionVaries]); diff --git a/src/gpu/gl/GrGLAssembleInterface.cpp b/src/gpu/gl/GrGLAssembleInterface.cpp index e52d302190..30eed62c5e 100644 --- a/src/gpu/gl/GrGLAssembleInterface.cpp +++ b/src/gpu/gl/GrGLAssembleInterface.cpp @@ -246,10 +246,6 @@ const GrGLInterface* GrGLAssembleGLInterface(void* ctx, GrGLGetProc get) { GET_PROC(VertexAttribDivisor); } - if (glVer >= GR_GL_VER(3,0)) { - GET_PROC(VertexAttribIPointer); - } - GET_PROC(VertexAttribPointer); GET_PROC(Viewport); GET_PROC(BindFragDataLocationIndexed); @@ -682,10 +678,6 @@ const GrGLInterface* GrGLAssembleGLESInterface(void* ctx, GrGLGetProc get) { GET_PROC_SUFFIX(VertexAttribDivisor, EXT); } - if (version >= GR_GL_VER(3,0)) { - GET_PROC(VertexAttribIPointer); - } - GET_PROC(VertexAttribPointer); GET_PROC(Viewport); GET_PROC(BindFramebuffer); diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp index cb3f5dd55f..a913fbeca2 100644 --- a/src/gpu/gl/GrGLCaps.cpp +++ b/src/gpu/gl/GrGLCaps.cpp @@ -279,17 +279,12 @@ void GrGLCaps::init(const GrContextOptions& contextOptions, // we don't support GL_ARB_geometry_shader4, just GL 3.2+ GS glslCaps->fGeometryShaderSupport = ctxInfo.version() >= GR_GL_VER(3, 2) && ctxInfo.glslGeneration() >= k150_GrGLSLGeneration; - glslCaps->fIntegerSupport = ctxInfo.version() >= GR_GL_VER(3, 0) && - ctxInfo.glslGeneration() >= k130_GrGLSLGeneration; } else { glslCaps->fDualSourceBlendingSupport = ctxInfo.hasExtension("GL_EXT_blend_func_extended"); glslCaps->fShaderDerivativeSupport = ctxInfo.version() >= GR_GL_VER(3, 0) || ctxInfo.hasExtension("GL_OES_standard_derivatives"); - - glslCaps->fIntegerSupport = ctxInfo.version() >= GR_GL_VER(3, 0) && - ctxInfo.glslGeneration() >= k330_GrGLSLGeneration; // We use this value for GLSL ES 3.0. } if (ctxInfo.hasExtension("GL_EXT_shader_pixel_local_storage")) { diff --git a/src/gpu/gl/GrGLCreateNullInterface.cpp b/src/gpu/gl/GrGLCreateNullInterface.cpp index f56b1d9773..f0a3e7d4bd 100644 --- a/src/gpu/gl/GrGLCreateNullInterface.cpp +++ b/src/gpu/gl/GrGLCreateNullInterface.cpp @@ -465,9 +465,8 @@ const GrGLInterface* GrGLCreateNullInterface() { functions->fVertexAttrib2fv = noOpGLVertexAttrib2fv; functions->fVertexAttrib3fv = noOpGLVertexAttrib3fv; functions->fVertexAttrib4fv = noOpGLVertexAttrib4fv; - functions->fVertexAttribDivisor = noOpGLVertexAttribDivisor; - functions->fVertexAttribIPointer = noOpGLVertexAttribIPointer; functions->fVertexAttribPointer = noOpGLVertexAttribPointer; + functions->fVertexAttribDivisor = noOpGLVertexAttribDivisor; functions->fViewport = nullGLViewport; functions->fBindFramebuffer = nullGLBindFramebuffer; functions->fBindRenderbuffer = nullGLBindRenderbuffer; diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp index cd28ecaab5..f916b4f436 100644 --- a/src/gpu/gl/GrGLGpu.cpp +++ b/src/gpu/gl/GrGLGpu.cpp @@ -1759,7 +1759,9 @@ void GrGLGpu::setupGeometry(const GrPrimitiveProcessor& primProc, attribState->set(this, attribIndex, vbuf->bufferID(), - attribType, + GrGLAttribTypeToLayout(attribType).fCount, + GrGLAttribTypeToLayout(attribType).fType, + GrGLAttribTypeToLayout(attribType).fNormalized, stride, reinterpret_cast<GrGLvoid*>(vertexOffsetInBytes + offset)); offset += attrib.fOffset; @@ -2538,7 +2540,7 @@ void GrGLGpu::stampRectUsingProgram(GrGLuint program, const SkRect& bounds, GrGL GrGLAttribArrayState* attribs = this->fHWGeometryState.bindArrayAndBufferToDraw(this, arrayBuffer); - attribs->set(this, 0, arrayBuffer, kVec2f_GrVertexAttribType, 2 * sizeof(GrGLfloat), 0); + attribs->set(this, 0, arrayBuffer, 2, GR_GL_FLOAT, false, 2 * sizeof(GrGLfloat), 0); attribs->disableUnusedArrays(this, 0x1); GL_CALL(Uniform4f(posXformUniform, bounds.width(), bounds.height(), bounds.left(), @@ -3479,8 +3481,7 @@ void GrGLGpu::drawDebugWireRect(GrRenderTarget* rt, const SkIRect& rect, GrColor GrGLAttribArrayState* attribs = fHWGeometryState.bindArrayAndBufferToDraw(this, fWireRectArrayBuffer); - attribs->set(this, 0, fWireRectArrayBuffer, kVec2f_GrVertexAttribType, 2 * sizeof(GrGLfloat), - 0); + attribs->set(this, 0, fWireRectArrayBuffer, 2, GR_GL_FLOAT, false, 2 * sizeof(GrGLfloat), 0); attribs->disableUnusedArrays(this, 0x1); GL_CALL(Uniform4fv(fWireRectProgram.fRectUniform, 1, edges)); @@ -3525,8 +3526,7 @@ void GrGLGpu::copySurfaceAsDraw(GrSurface* dst, GrGLAttribArrayState* attribs = fHWGeometryState.bindArrayAndBufferToDraw(this, fCopyProgramArrayBuffer); - attribs->set(this, 0, fCopyProgramArrayBuffer, kVec2f_GrVertexAttribType, 2 * sizeof(GrGLfloat), - 0); + attribs->set(this, 0, fCopyProgramArrayBuffer, 2, GR_GL_FLOAT, false, 2 * sizeof(GrGLfloat), 0); attribs->disableUnusedArrays(this, 0x1); // dst rect edges in NDC (-1 to 1) diff --git a/src/gpu/gl/GrGLInterface.cpp b/src/gpu/gl/GrGLInterface.cpp index c09efae2b8..925f081b34 100644 --- a/src/gpu/gl/GrGLInterface.cpp +++ b/src/gpu/gl/GrGLInterface.cpp @@ -416,13 +416,6 @@ bool GrGLInterface::validate() const { } } - // glVertexAttribIPointer was added in version 3.0 of both desktop and ES. - if (glVer >= GR_GL_VER(3, 0)) { - if (NULL == fFunctions.fVertexAttribIPointer) { - RETURN_FALSE_INTERFACE - } - } - if (kGL_GrGLStandard == fStandard) { if (glVer >= GR_GL_VER(3, 0) || fExtensions.has("GL_ARB_vertex_array_object")) { if (nullptr == fFunctions.fBindVertexArray || diff --git a/src/gpu/gl/GrGLNoOpInterface.cpp b/src/gpu/gl/GrGLNoOpInterface.cpp index f08d737d58..113c47d054 100644 --- a/src/gpu/gl/GrGLNoOpInterface.cpp +++ b/src/gpu/gl/GrGLNoOpInterface.cpp @@ -394,13 +394,6 @@ GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniformMatrix4fv(GrGLint location, GrGLvoid GR_GL_FUNCTION_TYPE noOpGLVertexAttrib4fv(GrGLuint indx, const GrGLfloat* values) { } -GrGLvoid GR_GL_FUNCTION_TYPE noOpGLVertexAttribIPointer(GrGLuint indx, - GrGLint size, - GrGLenum type, - GrGLsizei stride, - const GrGLvoid* ptr) { -} - GrGLvoid GR_GL_FUNCTION_TYPE noOpGLVertexAttribPointer(GrGLuint indx, GrGLint size, GrGLenum type, diff --git a/src/gpu/gl/GrGLNoOpInterface.h b/src/gpu/gl/GrGLNoOpInterface.h index 44894b763a..627de63d7d 100644 --- a/src/gpu/gl/GrGLNoOpInterface.h +++ b/src/gpu/gl/GrGLNoOpInterface.h @@ -287,12 +287,6 @@ GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniformMatrix4fv(GrGLint location, GrGLvoid GR_GL_FUNCTION_TYPE noOpGLVertexAttrib4fv(GrGLuint indx, const GrGLfloat* values); -GrGLvoid GR_GL_FUNCTION_TYPE noOpGLVertexAttribIPointer(GrGLuint indx, - GrGLint size, - GrGLenum type, - GrGLsizei stride, - const GrGLvoid* ptr); - GrGLvoid GR_GL_FUNCTION_TYPE noOpGLVertexAttribPointer(GrGLuint indx, GrGLint size, GrGLenum type, diff --git a/src/gpu/gl/GrGLVertexArray.cpp b/src/gpu/gl/GrGLVertexArray.cpp index fdb395d37a..8cfa8d6550 100644 --- a/src/gpu/gl/GrGLVertexArray.cpp +++ b/src/gpu/gl/GrGLVertexArray.cpp @@ -8,38 +8,14 @@ #include "GrGLVertexArray.h" #include "GrGLGpu.h" -struct AttribLayout { - GrGLint fCount; - GrGLenum fType; - GrGLboolean fNormalized; // Only used by floating point types. -}; -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_SHORT, false}, // kVec2s_GrVertexAttribType - {1, GR_GL_INT, false}, // kInt_GrVertexAttribType - {1, GR_GL_UNSIGNED_INT, false}, // kUint_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 == kVec2s_GrVertexAttribType); -GR_STATIC_ASSERT(7 == kInt_GrVertexAttribType); -GR_STATIC_ASSERT(8 == kUint_GrVertexAttribType); void GrGLAttribArrayState::set(GrGLGpu* gpu, int index, GrGLuint vertexBufferID, - GrVertexAttribType type, + GrGLint size, + GrGLenum type, + GrGLboolean normalized, GrGLsizei stride, GrGLvoid* offset) { SkASSERT(index >= 0 && index < fAttribArrayStates.count()); @@ -51,31 +27,23 @@ void GrGLAttribArrayState::set(GrGLGpu* gpu, } if (!array->fAttribPointerIsValid || array->fVertexBufferID != vertexBufferID || - array->fType != type || + array->fSize != size || + array->fNormalized != normalized || array->fStride != stride || array->fOffset != offset) { gpu->bindVertexBuffer(vertexBufferID); - const AttribLayout& layout = gLayouts[type]; - if (!GrVertexAttribTypeIsIntType(type)) { - GR_GL_CALL(gpu->glInterface(), VertexAttribPointer(index, - layout.fCount, - layout.fType, - layout.fNormalized, - stride, - offset)); - } else { - SkASSERT(gpu->caps()->shaderCaps()->integerSupport()); - SkASSERT(!layout.fNormalized); - GR_GL_CALL(gpu->glInterface(), VertexAttribIPointer(index, - layout.fCount, - layout.fType, - stride, - offset)); - } + GR_GL_CALL(gpu->glInterface(), VertexAttribPointer(index, + size, + type, + normalized, + stride, + offset)); array->fAttribPointerIsValid = true; array->fVertexBufferID = vertexBufferID; - array->fType = type; + array->fSize = size; + array->fNormalized = normalized; + array->fStride = stride; array->fOffset = offset; } } diff --git a/src/gpu/gl/GrGLVertexArray.h b/src/gpu/gl/GrGLVertexArray.h index f5a97672f3..0a5dea6a1e 100644 --- a/src/gpu/gl/GrGLVertexArray.h +++ b/src/gpu/gl/GrGLVertexArray.h @@ -17,6 +17,35 @@ class GrGLVertexBuffer; class GrGLIndexBuffer; class GrGLGpu; +struct GrGLAttribLayout { + GrGLint fCount; + GrGLenum fType; + GrGLboolean fNormalized; +}; + +static inline const GrGLAttribLayout& GrGLAttribTypeToLayout(GrVertexAttribType type) { + static const GrGLAttribLayout kLayouts[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_SHORT, false}, // kVec2s_GrVertexAttribType + {4, GR_GL_INT, false}, // 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 == kVec2s_GrVertexAttribType); + GR_STATIC_ASSERT(7 == kInt_GrVertexAttribType); + GR_STATIC_ASSERT(SK_ARRAY_COUNT(kLayouts) == kGrVertexAttribTypeCount); + return kLayouts[type]; +} + /** * This sets and tracks the vertex attribute array state. It is used internally by GrGLVertexArray * (below) but is separate because it is also used to track the state of vertex array object 0. @@ -42,7 +71,9 @@ public: void set(GrGLGpu*, int attribIndex, GrGLuint vertexBufferID, - GrVertexAttribType type, + GrGLint size, + GrGLenum type, + GrGLboolean normalized, GrGLsizei stride, GrGLvoid* offset); @@ -84,13 +115,15 @@ private: fAttribPointerIsValid = false; } - bool fEnableIsValid; - bool fAttribPointerIsValid; - bool fEnabled; - GrGLuint fVertexBufferID; - GrVertexAttribType fType; - GrGLsizei fStride; - GrGLvoid* fOffset; + bool fEnableIsValid; + bool fAttribPointerIsValid; + bool fEnabled; + GrGLuint fVertexBufferID; + GrGLint fSize; + GrGLenum fType; + GrGLboolean fNormalized; + GrGLsizei fStride; + GrGLvoid* fOffset; }; SkSTArray<16, AttribArrayState, true> fAttribArrayStates; diff --git a/src/gpu/gl/SkNullGLContext.cpp b/src/gpu/gl/SkNullGLContext.cpp index 68b19ce990..dafa1ef0bc 100644 --- a/src/gpu/gl/SkNullGLContext.cpp +++ b/src/gpu/gl/SkNullGLContext.cpp @@ -514,9 +514,8 @@ static GrGLInterface* create_null_interface(State* state) { functions->fVertexAttrib2fv = noOpGLVertexAttrib2fv; functions->fVertexAttrib3fv = noOpGLVertexAttrib3fv; functions->fVertexAttrib4fv = noOpGLVertexAttrib4fv; - functions->fVertexAttribDivisor = noOpGLVertexAttribDivisor; - functions->fVertexAttribIPointer = noOpGLVertexAttribIPointer; functions->fVertexAttribPointer = noOpGLVertexAttribPointer; + functions->fVertexAttribDivisor = noOpGLVertexAttribDivisor; functions->fViewport = nullGLViewport; functions->fBindFramebuffer = nullGLBindFramebuffer; functions->fBindRenderbuffer = nullGLBindRenderbuffer; diff --git a/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp b/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp index 2118c02fa7..bcc3007650 100644 --- a/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp +++ b/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp @@ -956,9 +956,8 @@ const GrGLInterface* GrGLCreateDebugInterface() { functions->fVertexAttrib2fv = noOpGLVertexAttrib2fv; functions->fVertexAttrib3fv = noOpGLVertexAttrib3fv; functions->fVertexAttrib4fv = noOpGLVertexAttrib4fv; - functions->fVertexAttribDivisor = noOpGLVertexAttribDivisor; - functions->fVertexAttribIPointer = noOpGLVertexAttribIPointer; functions->fVertexAttribPointer = noOpGLVertexAttribPointer; + functions->fVertexAttribDivisor = noOpGLVertexAttribDivisor; functions->fViewport = noOpGLViewport; functions->fBindFramebuffer = debugGLBindFramebuffer; functions->fBindRenderbuffer = debugGLBindRenderbuffer; diff --git a/src/gpu/glsl/GrGLSL.h b/src/gpu/glsl/GrGLSL.h index 6fc8f83c7a..dc53d7befa 100644 --- a/src/gpu/glsl/GrGLSL.h +++ b/src/gpu/glsl/GrGLSL.h @@ -104,8 +104,6 @@ static inline const char* GrGLSLTypeString(GrSLType t) { return "bool"; case kInt_GrSLType: return "int"; - case kUint_GrSLType: - return "uint"; default: SkFAIL("Unknown shader var type."); return ""; // suppress warning |