Index: src/gpu/gl/GrGLProgramDesc.cpp |
diff --git a/src/gpu/gl/GrGLProgramDesc.cpp b/src/gpu/gl/GrGLProgramDesc.cpp |
index 2476c5532cc3cd89cc14af1c7ccdf4e53ccc6112..c5c31d33aec90b3c12faa317533318fb1b26faeb 100644 |
--- a/src/gpu/gl/GrGLProgramDesc.cpp |
+++ b/src/gpu/gl/GrGLProgramDesc.cpp |
@@ -40,19 +40,6 @@ static bool swizzle_requires_alpha_remapping(const GrGLCaps& caps, |
return false; |
} |
-static uint32_t gen_attrib_key(const GrGeometryProcessor& proc) { |
- uint32_t key = 0; |
- |
- const GrGeometryProcessor::VertexAttribArray& vars = proc.getAttribs(); |
- int numAttributes = vars.count(); |
- SkASSERT(numAttributes <= GrGeometryProcessor::kMaxVertexAttribs); |
- for (int a = 0; a < numAttributes; ++a) { |
- uint32_t value = 1 << a; |
- key |= value; |
- } |
- return key; |
-} |
- |
/** |
* The key for an individual coord transform is made up of a matrix type, a precision, and a bit |
* that indicates the source of the input coords. |
@@ -131,7 +118,6 @@ static uint32_t gen_texture_key(const GrProcessor& proc, const GrGLCaps& caps) { |
static bool get_meta_key(const GrProcessor& proc, |
const GrGLCaps& caps, |
uint32_t transformKey, |
- uint32_t attribKey, |
GrProcessorKeyBuilder* b) { |
size_t processorKeySize = b->size(); |
uint32_t textureKey = gen_texture_key(proc, caps); |
@@ -158,9 +144,6 @@ bool GrGLProgramDescBuilder::Build(const GrOptDrawState& optState, |
GrGpu::DrawType drawType, |
GrGpuGL* gpu, |
GrProgramDesc* desc) { |
- bool inputColorIsUsed = descInfo.fInputColorIsUsed; |
- bool inputCoverageIsUsed = descInfo.fInputCoverageIsUsed; |
- |
// The descriptor is used as a cache key. Thus when a field of the |
// descriptor will not affect program generation (because of the attribute |
// bindings in use or other descriptor field settings) it should be set |
@@ -173,33 +156,29 @@ bool GrGLProgramDescBuilder::Build(const GrOptDrawState& optState, |
desc->fKey.reset(); |
desc->fKey.push_back_n(kProcessorKeysOffset); |
- // We can only have one effect which touches the vertex shader |
- if (optState.hasGeometryProcessor()) { |
- const GrGeometryProcessor& gp = *optState.getGeometryProcessor(); |
- GrProcessorKeyBuilder b(&desc->fKey); |
- gp.getGLProcessorKey(optState.getBatchTracker(), gpu->glCaps(), &b); |
- if (!get_meta_key(gp, gpu->glCaps(), 0, gen_attrib_key(gp), &b)) { |
- desc->fKey.reset(); |
- return false; |
- } |
+ GrProcessorKeyBuilder b(&desc->fKey); |
+ |
+ const GrPrimitiveProcessor& primProc = *optState.getPrimitiveProcessor(); |
+ primProc.getGLProcessorKey(optState.getBatchTracker(), gpu->glCaps(), &b); |
+ if (!get_meta_key(primProc, gpu->glCaps(), 0, &b)) { |
+ desc->fKey.reset(); |
+ return false; |
} |
for (int s = 0; s < optState.numFragmentStages(); ++s) { |
const GrPendingFragmentStage& fps = optState.getFragmentStage(s); |
const GrFragmentProcessor& fp = *fps.getProcessor(); |
- GrProcessorKeyBuilder b(&desc->fKey); |
fp.getGLProcessorKey(gpu->glCaps(), &b); |
if (!get_meta_key(fp, gpu->glCaps(), |
- gen_transform_key(fps, requiresLocalCoordAttrib), 0, &b)) { |
+ gen_transform_key(fps, requiresLocalCoordAttrib), &b)) { |
desc->fKey.reset(); |
return false; |
} |
} |
const GrXferProcessor& xp = *optState.getXferProcessor(); |
- GrProcessorKeyBuilder b(&desc->fKey); |
xp.getGLProcessorKey(gpu->glCaps(), &b); |
- if (!get_meta_key(xp, gpu->glCaps(), 0, 0, &b)) { |
+ if (!get_meta_key(xp, gpu->glCaps(), 0, &b)) { |
desc->fKey.reset(); |
return false; |
} |
@@ -212,8 +191,6 @@ bool GrGLProgramDescBuilder::Build(const GrOptDrawState& optState, |
// make sure any padding in the header is zeroed. |
memset(header, 0, kHeaderSize); |
- header->fHasGeometryProcessor = optState.hasGeometryProcessor(); |
- |
bool isPathRendering = GrGpu::IsPathRenderingDrawType(drawType); |
if (gpu->caps()->pathRenderingSupport() && isPathRendering) { |
header->fUseNvpr = true; |
@@ -222,30 +199,6 @@ bool GrGLProgramDescBuilder::Build(const GrOptDrawState& optState, |
header->fUseNvpr = false; |
} |
- bool hasUniformColor = inputColorIsUsed && (isPathRendering || !descInfo.fHasVertexColor); |
- |
- if (!inputColorIsUsed) { |
- header->fColorInput = GrProgramDesc::kAllOnes_ColorInput; |
- } else if (hasUniformColor) { |
- header->fColorInput = GrProgramDesc::kUniform_ColorInput; |
- } else { |
- header->fColorInput = GrProgramDesc::kAttribute_ColorInput; |
- SkASSERT(!header->fUseNvpr); |
- } |
- |
- bool hasVertexCoverage = !isPathRendering && descInfo.fHasVertexCoverage; |
- |
- bool covIsSolidWhite = !hasVertexCoverage && 0xffffffff == optState.getCoverageColor(); |
- |
- if (covIsSolidWhite || !inputCoverageIsUsed) { |
- header->fCoverageInput = GrProgramDesc::kAllOnes_ColorInput; |
- } else if (!hasVertexCoverage) { |
- header->fCoverageInput = GrProgramDesc::kUniform_ColorInput; |
- } else { |
- header->fCoverageInput = GrProgramDesc::kAttribute_ColorInput; |
- SkASSERT(!header->fUseNvpr); |
- } |
- |
if (descInfo.fReadsDst) { |
const GrDeviceCoordTexture* dstCopy = optState.getDstCopy(); |
SkASSERT(dstCopy || gpu->caps()->dstReadInShaderSupport()); |