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); |