| Index: src/gpu/gl/builders/GrGLProgramBuilder.cpp
|
| diff --git a/src/gpu/gl/builders/GrGLProgramBuilder.cpp b/src/gpu/gl/builders/GrGLProgramBuilder.cpp
|
| index a628febb6962336b0165dd750a1577f76686e5d1..c83c1481da0b84a6fa3cf3cb167108a49dad53c9 100644
|
| --- a/src/gpu/gl/builders/GrGLProgramBuilder.cpp
|
| +++ b/src/gpu/gl/builders/GrGLProgramBuilder.cpp
|
| @@ -29,19 +29,17 @@ static const GrGLShaderVar::Precision kDefaultFragmentPrecision = GrGLShaderVar:
|
| const int GrGLProgramBuilder::kVarsPerBlock = 8;
|
|
|
| GrGLProgram* GrGLProgramBuilder::CreateProgram(const GrOptDrawState& optState,
|
| - const GrGLProgramDesc& desc,
|
| GrGpu::DrawType drawType,
|
| GrGpuGL* gpu) {
|
| // create a builder. This will be handed off to effects so they can use it to add
|
| // uniforms, varyings, textures, etc
|
| - SkAutoTDelete<GrGLProgramBuilder> builder(CreateProgramBuilder(desc,
|
| - optState,
|
| + SkAutoTDelete<GrGLProgramBuilder> builder(CreateProgramBuilder(optState,
|
| drawType,
|
| optState.hasGeometryProcessor(),
|
| gpu));
|
|
|
| GrGLProgramBuilder* pb = builder.get();
|
| - const GrGLProgramDesc::KeyHeader& header = pb->header();
|
| + const GrGLProgramDesc::GLKeyHeader& header = pb->header();
|
|
|
| // emit code to read the dst copy texture, if necessary
|
| if (GrGLFragmentShaderBuilder::kNoDstRead_DstReadKey != header.fDstReadKey
|
| @@ -77,7 +75,7 @@ GrGLProgram* GrGLProgramBuilder::CreateProgram(const GrOptDrawState& optState,
|
| }
|
|
|
| // write the secondary color output if necessary
|
| - if (GrOptDrawState::kNone_SecondaryOutputType != header.fSecondaryOutputType) {
|
| + if (GrGLProgramDesc::kNone_SecondaryOutputType != header.fSecondaryOutputType) {
|
| pb->fFS.enableSecondaryOutput(inputColor, inputCoverage);
|
| }
|
|
|
| @@ -87,41 +85,41 @@ GrGLProgram* GrGLProgramBuilder::CreateProgram(const GrOptDrawState& optState,
|
| }
|
|
|
| GrGLProgramBuilder*
|
| -GrGLProgramBuilder::CreateProgramBuilder(const GrGLProgramDesc& desc,
|
| - const GrOptDrawState& optState,
|
| +GrGLProgramBuilder::CreateProgramBuilder(const GrOptDrawState& optState,
|
| GrGpu::DrawType drawType,
|
| bool hasGeometryProcessor,
|
| GrGpuGL* gpu) {
|
| - if (desc.getHeader().fUseFragShaderOnly) {
|
| + const GrGLProgramDesc& desc = optState.desc().cast<GrGLProgramDesc>();
|
| + if (desc.header().fUseFragShaderOnly) {
|
| SkASSERT(gpu->glCaps().pathRenderingSupport());
|
| SkASSERT(gpu->glPathRendering()->texturingMode() ==
|
| GrGLPathRendering::FixedFunction_TexturingMode);
|
| + SkASSERT(GrGLProgramDesc::kAttribute_ColorInput != desc.header().fColorInput);
|
| + SkASSERT(GrGLProgramDesc::kAttribute_ColorInput != desc.header().fCoverageInput);
|
| SkASSERT(!hasGeometryProcessor);
|
| - return SkNEW_ARGS(GrGLLegacyNvprProgramBuilder, (gpu, optState, desc));
|
| + return SkNEW_ARGS(GrGLLegacyNvprProgramBuilder, (gpu, optState));
|
| } else if (GrGpu::IsPathRenderingDrawType(drawType)) {
|
| SkASSERT(gpu->glCaps().pathRenderingSupport());
|
| SkASSERT(gpu->glPathRendering()->texturingMode() ==
|
| GrGLPathRendering::SeparableShaders_TexturingMode);
|
| SkASSERT(!hasGeometryProcessor);
|
| - return SkNEW_ARGS(GrGLNvprProgramBuilder, (gpu, optState, desc));
|
| + return SkNEW_ARGS(GrGLNvprProgramBuilder, (gpu, optState));
|
| } else {
|
| - return SkNEW_ARGS(GrGLProgramBuilder, (gpu, optState, desc));
|
| + return SkNEW_ARGS(GrGLProgramBuilder, (gpu, optState));
|
| }
|
| }
|
|
|
| /////////////////////////////////////////////////////////////////////////////
|
|
|
| -GrGLProgramBuilder::GrGLProgramBuilder(GrGpuGL* gpu,
|
| - const GrOptDrawState& optState,
|
| - const GrGLProgramDesc& desc)
|
| +GrGLProgramBuilder::GrGLProgramBuilder(GrGpuGL* gpu, const GrOptDrawState& optState)
|
| : fVS(this)
|
| , fGS(this)
|
| - , fFS(this, desc)
|
| + , fFS(this, optState.desc().cast<GrGLProgramDesc>().header().fFragPosKey)
|
| , fOutOfStage(true)
|
| , fStageIndex(-1)
|
| , fGeometryProcessor(NULL)
|
| , fOptState(optState)
|
| - , fDesc(desc)
|
| + , fDesc(optState.desc().cast<GrGLProgramDesc>())
|
| , fGpu(gpu)
|
| , fUniforms(kVarsPerBlock) {
|
| }
|
| @@ -231,7 +229,9 @@ void GrGLProgramBuilder::emitAndInstallProcs(const GrOptDrawState& optState,
|
| if (optState.hasGeometryProcessor()) {
|
| const GrGeometryProcessor& gp = *optState.getGeometryProcessor();
|
| fVS.emitAttributes(gp);
|
| - ProcKeyProvider keyProvider(&fDesc, ProcKeyProvider::kGeometry_ProcessorType);
|
| + ProcKeyProvider keyProvider(&fDesc,
|
| + ProcKeyProvider::kGeometry_ProcessorType,
|
| + GrGLProgramDesc::kEffectKeyOffsetsAndLengthOffset);
|
| GrGLSLExpr4 output;
|
| this->emitAndInstallProc<GrGeometryProcessor>(gp, 0, keyProvider, *inputCoverage, &output);
|
| *inputCoverage = output;
|
| @@ -240,7 +240,9 @@ void GrGLProgramBuilder::emitAndInstallProcs(const GrOptDrawState& optState,
|
| }
|
|
|
| void GrGLProgramBuilder::emitAndInstallFragProcs(int procOffset, int numProcs, GrGLSLExpr4* inOut) {
|
| - ProcKeyProvider keyProvider(&fDesc, ProcKeyProvider::kFragment_ProcessorType);
|
| + ProcKeyProvider keyProvider(&fDesc,
|
| + ProcKeyProvider::kFragment_ProcessorType,
|
| + GrGLProgramDesc::kEffectKeyOffsetsAndLengthOffset);
|
| for (int e = procOffset; e < numProcs; ++e) {
|
| GrGLSLExpr4 output;
|
| const GrFragmentStage& stage = fOptState.getFragmentStage(e);
|
|
|