Index: src/gpu/gl/GrGLProgramDesc.cpp |
diff --git a/src/gpu/gl/GrGLProgramDesc.cpp b/src/gpu/gl/GrGLProgramDesc.cpp |
index 954a482f3a1df5d898322ef323c3423adcbe0cb2..6a2d38869219649a3754a840b2bd117fcf02979c 100644 |
--- a/src/gpu/gl/GrGLProgramDesc.cpp |
+++ b/src/gpu/gl/GrGLProgramDesc.cpp |
@@ -122,16 +122,11 @@ static bool get_meta_key(const GrProcessor& proc, |
const GrGLCaps& caps, |
uint32_t transformKey, |
uint32_t attribKey, |
- GrProcessorKeyBuilder* b, |
- uint16_t* processorKeySize) { |
+ GrProcessorKeyBuilder* b) { |
const GrBackendProcessorFactory& factory = proc.getFactory(); |
factory.getGLProcessorKey(proc, caps, b); |
- size_t size = b->size(); |
- if (size > SK_MaxU16) { |
- *processorKeySize = 0; // suppresses a warning. |
- return false; |
- } |
- *processorKeySize = SkToU16(size); |
+ |
+ size_t processorKeySize = b->size(); |
uint32_t textureKey = gen_texture_key(proc, caps); |
uint32_t classID = proc.getFactory().classID(); |
@@ -141,62 +136,13 @@ static bool get_meta_key(const GrProcessor& proc, |
if ((textureKey | transformKey | classID) & kMetaKeyInvalidMask) { |
return false; |
} |
- |
- uint32_t* key = b->add32n(2); |
- key[0] = (textureKey << 16 | transformKey); |
- key[1] = (classID << 16); |
- return true; |
-} |
- |
-struct GeometryProcessorKeyBuilder { |
- typedef GrGeometryProcessor StagedProcessor; |
- static bool GetProcessorKey(const GrGeometryProcessor& gp, |
- const GrGLCaps& caps, |
- bool, |
- GrProcessorKeyBuilder* b, |
- uint16_t* keySize) { |
- /* 0 because no transforms on a GP */ |
- return get_meta_key(gp, caps, 0, gen_attrib_key(gp), b, keySize); |
- } |
-}; |
- |
-struct FragmentProcessorKeyBuilder { |
- typedef GrPendingFragmentStage StagedProcessor; |
- static bool GetProcessorKey(const GrPendingFragmentStage& fps, |
- const GrGLCaps& caps, |
- bool useLocalCoords, |
- GrProcessorKeyBuilder* b, |
- uint16_t* keySize) { |
- /* 0 because no attribs on a fP */ |
- return get_meta_key(*fps.getProcessor(), caps, gen_transform_key(fps, useLocalCoords), 0, |
- b, keySize); |
- } |
-}; |
- |
- |
-template <class ProcessorKeyBuilder> |
-bool GrGLProgramDescBuilder::BuildStagedProcessorKey( |
- const typename ProcessorKeyBuilder::StagedProcessor& stage, |
- const GrGLCaps& caps, |
- bool requiresLocalCoordAttrib, |
- GrProgramDesc* desc, |
- int* offsetAndSizeIndex) { |
- GrProcessorKeyBuilder b(&desc->fKey); |
- uint16_t processorKeySize; |
- uint32_t processorOffset = desc->fKey.count(); |
- if (processorOffset > SK_MaxU16 || |
- !ProcessorKeyBuilder::GetProcessorKey(stage, caps, requiresLocalCoordAttrib, &b, |
- &processorKeySize)){ |
- desc->fKey.reset(); |
+ if (processorKeySize > SK_MaxU16) { |
return false; |
} |
- uint16_t* offsetAndSize = |
- reinterpret_cast<uint16_t*>(desc->fKey.begin() + kProcessorKeyOffsetsAndLengthOffset + |
- *offsetAndSizeIndex * 2 * sizeof(uint16_t)); |
- offsetAndSize[0] = SkToU16(processorOffset); |
- offsetAndSize[1] = processorKeySize; |
- ++(*offsetAndSizeIndex); |
+ uint32_t* key = b->add32n(2); |
+ key[0] = (textureKey << 16 | transformKey); |
+ key[1] = (classID << 16 | SkToU16(processorKeySize)); |
return true; |
} |
@@ -215,32 +161,27 @@ bool GrGLProgramDescBuilder::Build(const GrOptDrawState& optState, |
bool requiresLocalCoordAttrib = descInfo.fRequiresLocalCoordAttrib; |
- int numStages = optState.numTotalStages(); |
- |
- GR_STATIC_ASSERT(0 == kProcessorKeyOffsetsAndLengthOffset % sizeof(uint32_t)); |
- // Make room for everything up to and including the array of offsets to effect keys. |
+ GR_STATIC_ASSERT(0 == kProcessorKeysOffset % sizeof(uint32_t)); |
+ // Make room for everything up to the effect keys. |
desc->fKey.reset(); |
- desc->fKey.push_back_n(kProcessorKeyOffsetsAndLengthOffset + 2 * sizeof(uint16_t) * numStages); |
- |
- int offsetAndSizeIndex = 0; |
+ desc->fKey.push_back_n(kProcessorKeysOffset); |
// We can only have one effect which touches the vertex shader |
if (optState.hasGeometryProcessor()) { |
- if (!BuildStagedProcessorKey<GeometryProcessorKeyBuilder>(*optState.getGeometryProcessor(), |
- gpu->glCaps(), |
- false, |
- desc, |
- &offsetAndSizeIndex)) { |
+ const GrGeometryProcessor& gp = *optState.getGeometryProcessor(); |
+ GrProcessorKeyBuilder b(&desc->fKey); |
+ if (!get_meta_key(gp, gpu->glCaps(), 0, gen_attrib_key(gp), &b)) { |
+ desc->fKey.reset(); |
return false; |
} |
} |
for (int s = 0; s < optState.numFragmentStages(); ++s) { |
- if (!BuildStagedProcessorKey<FragmentProcessorKeyBuilder>(optState.getFragmentStage(s), |
- gpu->glCaps(), |
- requiresLocalCoordAttrib, |
- desc, |
- &offsetAndSizeIndex)) { |
+ const GrPendingFragmentStage& fps = optState.getFragmentStage(s); |
+ GrProcessorKeyBuilder b(&desc->fKey); |
+ if (!get_meta_key(*fps.getProcessor(), gpu->glCaps(), |
+ gen_transform_key(fps, requiresLocalCoordAttrib), 0, &b)) { |
+ desc->fKey.reset(); |
return false; |
} |
} |