diff options
Diffstat (limited to 'src/gpu/gl')
-rw-r--r-- | src/gpu/gl/GrGLCaps.cpp | 12 | ||||
-rw-r--r-- | src/gpu/gl/GrGLDefines.h | 48 | ||||
-rw-r--r-- | src/gpu/gl/GrGLGpu.cpp | 204 | ||||
-rw-r--r-- | src/gpu/gl/GrGLGpu.h | 18 | ||||
-rw-r--r-- | src/gpu/gl/GrGLProgram.cpp | 9 | ||||
-rw-r--r-- | src/gpu/gl/GrGLUniformHandler.cpp | 2 | ||||
-rw-r--r-- | src/gpu/gl/GrGLVertexArray.h | 3 |
7 files changed, 31 insertions, 265 deletions
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp index 5c6d59fbb6..4467ef9a8b 100644 --- a/src/gpu/gl/GrGLCaps.cpp +++ b/src/gpu/gl/GrGLCaps.cpp @@ -284,17 +284,6 @@ void GrGLCaps::init(const GrContextOptions& contextOptions, ctxInfo.hasExtension("GL_OES_standard_derivatives"); } - if (ctxInfo.hasExtension("GL_EXT_shader_pixel_local_storage")) { - #define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT 0x8F63 - GR_GL_GetIntegerv(gli, GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT, - &glslCaps->fPixelLocalStorageSize); - glslCaps->fPLSPathRenderingSupport = glslCaps->fFBFetchSupport; - } - else { - glslCaps->fPixelLocalStorageSize = 0; - glslCaps->fPLSPathRenderingSupport = false; - } - /************************************************************************** * GrCaps fields **************************************************************************/ @@ -541,6 +530,7 @@ void GrGLCaps::initGLSL(const GrGLContextInfo& ctxInfo) { GrGLSLCaps* glslCaps = static_cast<GrGLSLCaps*>(fShaderCaps.get()); glslCaps->fGLSLGeneration = ctxInfo.glslGeneration(); + if (kGLES_GrGLStandard == standard) { if (ctxInfo.hasExtension("GL_EXT_shader_framebuffer_fetch")) { glslCaps->fFBFetchNeedsCustomOutput = (version >= GR_GL_VER(3, 0)); diff --git a/src/gpu/gl/GrGLDefines.h b/src/gpu/gl/GrGLDefines.h index a759413c5a..318fcd4d53 100644 --- a/src/gpu/gl/GrGLDefines.h +++ b/src/gpu/gl/GrGLDefines.h @@ -161,7 +161,6 @@ #define GR_GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 #define GR_GL_LINE_STIPPLE 0x0B24 #define GR_GL_FRAMEBUFFER_SRGB 0x8DB9 -#define GR_GL_SHADER_PIXEL_LOCAL_STORAGE 0x8F64 /* ErrorCode */ #define GR_GL_NO_ERROR 0 @@ -422,30 +421,29 @@ #define GR_GL_UNSIGNED_SHORT_5_6_5 0x8363 /* Shaders */ -#define GR_GL_FRAGMENT_SHADER 0x8B30 -#define GR_GL_VERTEX_SHADER 0x8B31 -#define GR_GL_GEOMETRY_SHADER 0x8DD9 -#define GR_GL_MAX_VERTEX_ATTRIBS 0x8869 -#define GR_GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB -#define GR_GL_MAX_VARYING_VECTORS 0x8DFC -#define GR_GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D -#define GR_GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C -#define GR_GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 -#define GR_GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD -#define GR_GL_SHADER_TYPE 0x8B4F -#define GR_GL_DELETE_STATUS 0x8B80 -#define GR_GL_LINK_STATUS 0x8B82 -#define GR_GL_VALIDATE_STATUS 0x8B83 -#define GR_GL_ATTACHED_SHADERS 0x8B85 -#define GR_GL_ACTIVE_UNIFORMS 0x8B86 -#define GR_GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 -#define GR_GL_ACTIVE_ATTRIBUTES 0x8B89 -#define GR_GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A -#define GR_GL_SHADING_LANGUAGE_VERSION 0x8B8C -#define GR_GL_CURRENT_PROGRAM 0x8B8D -#define GR_GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 -#define GR_GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A -#define GR_GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE 0x8F63 +#define GR_GL_FRAGMENT_SHADER 0x8B30 +#define GR_GL_VERTEX_SHADER 0x8B31 +#define GR_GL_GEOMETRY_SHADER 0x8DD9 +#define GR_GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GR_GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GR_GL_MAX_VARYING_VECTORS 0x8DFC +#define GR_GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GR_GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GR_GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GR_GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#define GR_GL_SHADER_TYPE 0x8B4F +#define GR_GL_DELETE_STATUS 0x8B80 +#define GR_GL_LINK_STATUS 0x8B82 +#define GR_GL_VALIDATE_STATUS 0x8B83 +#define GR_GL_ATTACHED_SHADERS 0x8B85 +#define GR_GL_ACTIVE_UNIFORMS 0x8B86 +#define GR_GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GR_GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GR_GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GR_GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GR_GL_CURRENT_PROGRAM 0x8B8D +#define GR_GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 +#define GR_GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A /* StencilFunction */ #define GR_GL_NEVER 0x0200 diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp index d7a060031e..84f2bdda8e 100644 --- a/src/gpu/gl/GrGLGpu.cpp +++ b/src/gpu/gl/GrGLGpu.cpp @@ -12,7 +12,6 @@ #include "GrGLTextureRenderTarget.h" #include "GrGpuResourcePriv.h" #include "GrPipeline.h" -#include "GrPLSGeometryProcessor.h" #include "GrRenderTargetPriv.h" #include "GrSurfacePriv.h" #include "GrTexturePriv.h" @@ -21,7 +20,6 @@ #include "builders/GrGLShaderStringBuilder.h" #include "glsl/GrGLSL.h" #include "glsl/GrGLSLCaps.h" -#include "glsl/GrGLSLPLSPathRendering.h" #include "SkStrokeRec.h" #include "SkTemplates.h" @@ -40,6 +38,7 @@ #define CHECK_ALLOC_ERROR(iface) GR_GL_NO_ERROR #endif + /////////////////////////////////////////////////////////////////////////////// @@ -225,14 +224,6 @@ GrGLGpu::GrGLGpu(GrGLContext* ctx, GrContext* context) this->createCopyPrograms(); fWireRectProgram.fProgram = 0; fWireRectArrayBuffer = 0; - if (this->glCaps().shaderCaps()->plsPathRenderingSupport()) { - this->createPLSSetupProgram(); - } - else { - memset(&fPLSSetupProgram, 0, sizeof(fPLSSetupProgram)); - } - fHWPLSEnabled = false; - fPLSHasBeenUsed = false; } GrGLGpu::~GrGLGpu() { @@ -274,106 +265,9 @@ GrGLGpu::~GrGLGpu() { GL_CALL(DeleteBuffers(1, &fWireRectArrayBuffer)); } - if (0 != fPLSSetupProgram.fArrayBuffer) { - GL_CALL(DeleteBuffers(1, &fPLSSetupProgram.fArrayBuffer)); - } - - if (0 != fPLSSetupProgram.fProgram) { - GL_CALL(DeleteProgram(fPLSSetupProgram.fProgram)); - } - delete fProgramCache; } -void GrGLGpu::createPLSSetupProgram() { - const char* version = this->glCaps().glslCaps()->versionDeclString(); - - GrGLSLShaderVar aVertex("a_vertex", kVec2f_GrSLType, GrShaderVar::kAttribute_TypeModifier); - GrGLSLShaderVar uTexCoordXform("u_texCoordXform", kVec4f_GrSLType, - GrShaderVar::kUniform_TypeModifier); - GrGLSLShaderVar uPosXform("u_posXform", kVec4f_GrSLType, GrShaderVar::kUniform_TypeModifier); - GrGLSLShaderVar uTexture("u_texture", kSampler2D_GrSLType, GrShaderVar::kUniform_TypeModifier); - GrGLSLShaderVar vTexCoord("v_texCoord", kVec2f_GrSLType, GrShaderVar::kVaryingOut_TypeModifier); - - SkString vshaderTxt(version); - aVertex.appendDecl(this->glCaps().glslCaps(), &vshaderTxt); - vshaderTxt.append(";"); - uTexCoordXform.appendDecl(this->glCaps().glslCaps(), &vshaderTxt); - vshaderTxt.append(";"); - uPosXform.appendDecl(this->glCaps().glslCaps(), &vshaderTxt); - vshaderTxt.append(";"); - vTexCoord.appendDecl(this->glCaps().glslCaps(), &vshaderTxt); - vshaderTxt.append(";"); - - vshaderTxt.append( - "// PLS Setup Program VS\n" - "void main() {" - " gl_Position.xy = a_vertex * u_posXform.xy + u_posXform.zw;" - " gl_Position.zw = vec2(0, 1);" - "}" - ); - - SkString fshaderTxt(version); - fshaderTxt.append("#extension "); - fshaderTxt.append(this->glCaps().glslCaps()->fbFetchExtensionString()); - fshaderTxt.append(" : require\n"); - fshaderTxt.append("#extension GL_EXT_shader_pixel_local_storage : require\n"); - GrGLSLAppendDefaultFloatPrecisionDeclaration(kDefault_GrSLPrecision, - *this->glCaps().glslCaps(), - &fshaderTxt); - vTexCoord.setTypeModifier(GrShaderVar::kVaryingIn_TypeModifier); - vTexCoord.appendDecl(this->glCaps().glslCaps(), &fshaderTxt); - fshaderTxt.append(";"); - uTexture.appendDecl(this->glCaps().glslCaps(), &fshaderTxt); - fshaderTxt.append(";"); - - fshaderTxt.appendf( - "// PLS Setup Program FS\n" - GR_GL_PLS_PATH_DATA_DECL - "void main() {\n" - " " GR_GL_PLS_DSTCOLOR_NAME " = gl_LastFragColorARM;\n" - " pls.windings = ivec4(0, 0, 0, 0);\n" - "}" - ); - GL_CALL_RET(fPLSSetupProgram.fProgram, CreateProgram()); - const char* str; - GrGLint length; - - str = vshaderTxt.c_str(); - length = SkToInt(vshaderTxt.size()); - GrGLuint vshader = GrGLCompileAndAttachShader(*fGLContext, fPLSSetupProgram.fProgram, - GR_GL_VERTEX_SHADER, &str, &length, 1, &fStats); - - str = fshaderTxt.c_str(); - length = SkToInt(fshaderTxt.size()); - GrGLuint fshader = GrGLCompileAndAttachShader(*fGLContext, fPLSSetupProgram.fProgram, - GR_GL_FRAGMENT_SHADER, &str, &length, 1, &fStats); - - GL_CALL(LinkProgram(fPLSSetupProgram.fProgram)); - - GL_CALL_RET(fPLSSetupProgram.fPosXformUniform, GetUniformLocation(fPLSSetupProgram.fProgram, - "u_posXform")); - - GL_CALL(BindAttribLocation(fPLSSetupProgram.fProgram, 0, "a_vertex")); - - GL_CALL(DeleteShader(vshader)); - GL_CALL(DeleteShader(fshader)); - - GL_CALL(GenBuffers(1, &fPLSSetupProgram.fArrayBuffer)); - fHWGeometryState.setVertexBufferID(this, fPLSSetupProgram.fArrayBuffer); - static const GrGLfloat vdata[] = { - 0, 0, - 0, 1, - 1, 0, - 1, 1 - }; - GL_ALLOC_CALL(this->glInterface(), - BufferData(GR_GL_ARRAY_BUFFER, - (GrGLsizeiptr) sizeof(vdata), - vdata, // data ptr - GR_GL_STATIC_DRAW)); -} - void GrGLGpu::contextAbandoned() { INHERITED::contextAbandoned(); fProgramCache->abandon(); @@ -2307,28 +2201,8 @@ bool GrGLGpu::onReadPixels(GrSurface* surface, return true; } -void GrGLGpu::performFlushWorkaround() { - if (fPLSHasBeenUsed) { - /* There is an ARM driver bug where if we use PLS, and then draw a frame which does not - * use PLS, it leaves garbage all over the place. As a workaround, we use PLS in a - * trivial way every frame. And since we use it every frame, there's never a point at which - * it becomes safe to stop using this workaround once we start. - */ - this->disableScissor(); - // using PLS in the presence of MSAA results in GL_INVALID_OPERATION - this->flushHWAAState(nullptr, false); - SkASSERT(!fHWPLSEnabled); - SkASSERT(fMSAAEnabled != kYes_TriState); - GL_CALL(Enable(GR_GL_SHADER_PIXEL_LOCAL_STORAGE)); - this->stampRectUsingProgram(fPLSSetupProgram.fProgram, - SkRect::MakeXYWH(-100.0f, -100.0f, 0.01f, 0.01f), - fPLSSetupProgram.fPosXformUniform, - fPLSSetupProgram.fArrayBuffer); - GL_CALL(Disable(GR_GL_SHADER_PIXEL_LOCAL_STORAGE)); - } -} - void GrGLGpu::flushRenderTarget(GrGLRenderTarget* target, const SkIRect* bound) { + SkASSERT(target); uint32_t rtID = target->getUniqueID(); @@ -2411,19 +2285,6 @@ void GrGLGpu::onDraw(const DrawArgs& args, const GrNonInstancedVertices& vertice return; } - GrPixelLocalStorageState plsState = args.fPrimitiveProcessor->getPixelLocalStorageState(); - if (!fHWPLSEnabled && plsState != - GrPixelLocalStorageState::kDisabled_GrPixelLocalStorageState) { - GL_CALL(Enable(GR_GL_SHADER_PIXEL_LOCAL_STORAGE)); - this->setupPixelLocalStorage(args); - fHWPLSEnabled = true; - } - if (plsState == GrPixelLocalStorageState::kFinish_GrPixelLocalStorageState) { - GrStencilSettings stencil; - stencil.setDisabled(); - this->flushStencil(stencil); - } - size_t indexOffsetInBytes = 0; this->setupGeometry(*args.fPrimitiveProcessor, vertices, &indexOffsetInBytes); @@ -2445,16 +2306,6 @@ void GrGLGpu::onDraw(const DrawArgs& args, const GrNonInstancedVertices& vertice GL_CALL(DrawArrays(gPrimitiveType2GLMode[vertices.primitiveType()], 0, vertices.vertexCount())); } - - if (fHWPLSEnabled && plsState == GrPixelLocalStorageState::kFinish_GrPixelLocalStorageState) { - // PLS draws always involve multiple draws, finishing up with a non-PLS - // draw that writes to the color buffer. That draw ends up here; we wait - // until after it is complete to actually disable PLS. - GL_CALL(Disable(GR_GL_SHADER_PIXEL_LOCAL_STORAGE)); - fHWPLSEnabled = false; - this->disableScissor(); - } - #if SWAP_PER_DRAW glFlush(); #if defined(SK_BUILD_FOR_MAC) @@ -2469,57 +2320,6 @@ void GrGLGpu::onDraw(const DrawArgs& args, const GrNonInstancedVertices& vertice #endif } -void GrGLGpu::stampRectUsingProgram(GrGLuint program, const SkRect& bounds, GrGLint posXformUniform, - GrGLuint arrayBuffer) { - GL_CALL(UseProgram(program)); - this->fHWGeometryState.setVertexArrayID(this, 0); - - GrGLAttribArrayState* attribs = - this->fHWGeometryState.bindArrayAndBufferToDraw(this, arrayBuffer); - 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(), - bounds.top())); - - GrXferProcessor::BlendInfo blendInfo; - blendInfo.reset(); - this->flushBlend(blendInfo, GrSwizzle()); - this->flushColorWrite(true); - this->flushDrawFace(GrPipelineBuilder::kBoth_DrawFace); - if (!fHWStencilSettings.isDisabled()) { - GL_CALL(Disable(GR_GL_STENCIL_TEST)); - } - GL_CALL(DrawArrays(GR_GL_TRIANGLE_STRIP, 0, 4)); - GL_CALL(UseProgram(fHWProgramID)); - if (!fHWStencilSettings.isDisabled()) { - GL_CALL(Enable(GR_GL_STENCIL_TEST)); - } -} - -void GrGLGpu::setupPixelLocalStorage(const DrawArgs& args) { - fPLSHasBeenUsed = true; - const SkRect& bounds = - static_cast<const GrPLSGeometryProcessor*>(args.fPrimitiveProcessor)->getBounds(); - // setup pixel local storage -- this means capturing and storing the current framebuffer color - // and initializing the winding counts to zero - GrRenderTarget* rt = args.fPipeline->getRenderTarget(); - SkScalar width = SkIntToScalar(rt->width()); - SkScalar height = SkIntToScalar(rt->height()); - // dst rect edges in NDC (-1 to 1) - // having some issues with rounding, just expand the bounds by 1 and trust the scissor to keep - // it contained properly - GrGLfloat dx0 = 2.0f * (bounds.left() - 1) / width - 1.0f; - GrGLfloat dx1 = 2.0f * (bounds.right() + 1) / width - 1.0f; - GrGLfloat dy0 = -2.0f * (bounds.top() - 1) / height + 1.0f; - GrGLfloat dy1 = -2.0f * (bounds.bottom() + 1) / height + 1.0f; - SkRect deviceBounds = SkRect::MakeXYWH(dx0, dy0, dx1 - dx0, dy1 - dy0); - - GL_CALL(Enable(GR_GL_FETCH_PER_SAMPLE_ARM)); - this->stampRectUsingProgram(fPLSSetupProgram.fProgram, deviceBounds, - fPLSSetupProgram.fPosXformUniform, fPLSSetupProgram.fArrayBuffer); -} - void GrGLGpu::onResolveRenderTarget(GrRenderTarget* target) { GrGLRenderTarget* rt = static_cast<GrGLRenderTarget*>(target); if (rt->needsResolve()) { diff --git a/src/gpu/gl/GrGLGpu.h b/src/gpu/gl/GrGLGpu.h index 6f194dcd6c..63f1247962 100644 --- a/src/gpu/gl/GrGLGpu.h +++ b/src/gpu/gl/GrGLGpu.h @@ -134,8 +134,6 @@ public: void drawDebugWireRect(GrRenderTarget*, const SkIRect&, GrColor) override; - void performFlushWorkaround() override; - private: GrGLGpu(GrGLContext* ctx, GrContext* context); @@ -236,11 +234,6 @@ private: const SkIRect& srcRect, const SkIPoint& dstPoint); - void stampRectUsingProgram(GrGLuint program, const SkRect& bounds, GrGLint posXformUniform, - GrGLuint arrayBuffer); - - void setupPixelLocalStorage(const DrawArgs& args); - static bool BlendCoeffReferencesConstant(GrBlendCoeff coeff); class ProgramCache : public ::SkNoncopyable { @@ -362,8 +355,6 @@ private: void createWireRectProgram(); void createUnitRectBuffer(); - void createPLSSetupProgram(); - // GL program-related state ProgramCache* fProgramCache; @@ -574,15 +565,6 @@ private: } } - struct { - GrGLuint fProgram; - GrGLint fPosXformUniform; - GrGLuint fArrayBuffer; - } fPLSSetupProgram; - - bool fHWPLSEnabled; - bool fPLSHasBeenUsed; - typedef GrGpu INHERITED; friend class GrGLPathRendering; // For accessing setTextureUnit. }; diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp index 8ef188bf2b..007d9670bc 100644 --- a/src/gpu/gl/GrGLProgram.cpp +++ b/src/gpu/gl/GrGLProgram.cpp @@ -89,12 +89,9 @@ void GrGLProgram::setData(const GrPrimitiveProcessor& primProc, this->setFragmentData(primProc, pipeline, textureBindings); - if (primProc.getPixelLocalStorageState() != - GrPixelLocalStorageState::kDraw_GrPixelLocalStorageState) { - const GrXferProcessor& xp = pipeline.getXferProcessor(); - fXferProcessor->setData(fProgramDataManager, xp); - append_texture_bindings(xp, textureBindings); - } + const GrXferProcessor& xp = pipeline.getXferProcessor(); + fXferProcessor->setData(fProgramDataManager, xp); + append_texture_bindings(xp, textureBindings); } void GrGLProgram::setFragmentData(const GrPrimitiveProcessor& primProc, diff --git a/src/gpu/gl/GrGLUniformHandler.cpp b/src/gpu/gl/GrGLUniformHandler.cpp index 5335c19da3..1ddb789668 100644 --- a/src/gpu/gl/GrGLUniformHandler.cpp +++ b/src/gpu/gl/GrGLUniformHandler.cpp @@ -26,7 +26,7 @@ GrGLSLUniformHandler::UniformHandle GrGLUniformHandler::internalAddUniformArray( SkDEBUGCODE(static const uint32_t kVisibilityMask = kVertex_Visibility | kFragment_Visibility); SkASSERT(0 == (~kVisibilityMask & visibility)); SkASSERT(0 != visibility); - SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsNumeric(type)); + SkASSERT(kDefault_GrSLPrecision == precision || GrSLTypeIsFloatType(type)); UniformInfo& uni = fUniforms.push_back(); uni.fVariable.setType(type); diff --git a/src/gpu/gl/GrGLVertexArray.h b/src/gpu/gl/GrGLVertexArray.h index 0a5dea6a1e..ebdb681e34 100644 --- a/src/gpu/gl/GrGLVertexArray.h +++ b/src/gpu/gl/GrGLVertexArray.h @@ -24,6 +24,7 @@ struct GrGLAttribLayout { }; static inline const GrGLAttribLayout& GrGLAttribTypeToLayout(GrVertexAttribType type) { + SkASSERT(type >= 0 && type < kGrVertexAttribTypeCount); static const GrGLAttribLayout kLayouts[kGrVertexAttribTypeCount] = { {1, GR_GL_FLOAT, false}, // kFloat_GrVertexAttribType {2, GR_GL_FLOAT, false}, // kVec2f_GrVertexAttribType @@ -32,7 +33,6 @@ static inline const GrGLAttribLayout& GrGLAttribTypeToLayout(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); @@ -41,7 +41,6 @@ static inline const GrGLAttribLayout& GrGLAttribTypeToLayout(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]; } |