void GrGLProgramBuilder::bindProgramResourceLocations(GrGLuint programID) { fUniformHandler.bindUniformLocations(programID, fGpu->glCaps()); const GrGLCaps& caps = this->gpu()->glCaps(); if (fFS.hasCustomColorOutput() && caps.bindFragDataLocationSupport()) { GL_CALL(BindFragDataLocation(programID, 0, GrGLSLFragmentShaderBuilder::DeclaredColorOutputName())); } if (fFS.hasSecondaryOutput() && caps.shaderCaps()->mustDeclareFragmentShaderOutput()) { GL_CALL(BindFragDataLocationIndexed(programID, 0, 1, GrGLSLFragmentShaderBuilder::DeclaredSecondaryColorOutputName())); } // handle NVPR separable varyings if (!fGpu->glCaps().shaderCaps()->pathRenderingSupport() || !fGpu->glPathRendering()->shouldBindFragmentInputs()) { return; } int count = fVaryingHandler.fPathProcVaryingInfos.count(); for (int i = 0; i < count; ++i) { GL_CALL(BindFragmentInputLocation(programID, i, fVaryingHandler.fPathProcVaryingInfos[i].fVariable.c_str())); fVaryingHandler.fPathProcVaryingInfos[i].fLocation = i; } }
void GrGLShaderBuilder::bindProgramLocations(GrGLuint programId) const { if (fHasCustomColorOutput) { GL_CALL(BindFragDataLocation(programId, 0, declared_color_output_name())); } if (fHasSecondaryOutput) { GL_CALL(BindFragDataLocationIndexed(programId, 0, 1, dual_source_output_name())); } }
void GrGLFragmentShaderBuilder::bindFragmentShaderLocations(GrGLuint programID) { const GrGLCaps& caps = fProgramBuilder->gpu()->glCaps(); if (fHasCustomColorOutput && caps.bindFragDataLocationSupport()) { GL_CALL(BindFragDataLocation(programID, 0, declared_color_output_name())); } if (fHasSecondaryOutput && caps.glslCaps()->mustDeclareFragmentShaderOutput()) { GL_CALL(BindFragDataLocationIndexed(programID, 0, 1, declared_secondary_color_output_name())); } }
void GrGLFragmentShaderBuilder::bindFragmentShaderLocations(GrGLuint programID) { // ES 3.00 requires custom color output but doesn't support bindFragDataLocation if (fHasCustomColorOutput && kGLES_GrGLStandard != fProgramBuilder->gpu()->ctxInfo().standard()) { GL_CALL(BindFragDataLocation(programID, 0, declared_color_output_name())); } if (fHasSecondaryOutput) { GL_CALL(BindFragDataLocationIndexed(programID, 0, 1, dual_source_output_name())); } }
void GrGLShaderBuilder::bindProgramLocations(GrGLuint programId) { if (fHasCustomColorOutput) { GL_CALL(BindFragDataLocation(programId, 0, declared_color_output_name())); } if (fHasSecondaryOutput) { GL_CALL(BindFragDataLocationIndexed(programId, 0, 1, dual_source_output_name())); } // skbug.com/2056 bool usingBindUniform = fGpu->glInterface()->fFunctions.fBindUniformLocation != NULL; if (usingBindUniform) { int count = fUniforms.count(); for (int i = 0; i < count; ++i) { GL_CALL(BindUniformLocation(programId, i, fUniforms[i].fVariable.c_str())); fUniforms[i].fLocation = i; } } }