| Index: src/gpu/gl/GrGpuGL_program.cpp
|
| diff --git a/src/gpu/gl/GrGpuGL_program.cpp b/src/gpu/gl/GrGpuGL_program.cpp
|
| index cb8810cc79600450945d8db98f2c11079ff5710f..368cebe03786be85bd9b106d222bb907024b690e 100644
|
| --- a/src/gpu/gl/GrGpuGL_program.cpp
|
| +++ b/src/gpu/gl/GrGpuGL_program.cpp
|
| @@ -91,28 +91,30 @@ int GrGpuGL::ProgramCache::search(const GrProgramDesc& desc) const {
|
| return SkTSearch(fEntries, fCount, desc, sizeof(Entry*), less);
|
| }
|
|
|
| -GrGLProgram* GrGpuGL::ProgramCache::getProgram(const GrOptDrawState& optState, DrawType type) {
|
| +GrGLProgram* GrGpuGL::ProgramCache::getProgram(const GrOptDrawState& optState,
|
| + const GrProgramDesc& desc,
|
| + DrawType type) {
|
| #ifdef PROGRAM_CACHE_STATS
|
| ++fTotalRequests;
|
| #endif
|
|
|
| Entry* entry = NULL;
|
|
|
| - uint32_t hashIdx = optState.programDesc().getChecksum();
|
| + uint32_t hashIdx = desc.getChecksum();
|
| hashIdx ^= hashIdx >> 16;
|
| if (kHashBits <= 8) {
|
| hashIdx ^= hashIdx >> 8;
|
| }
|
| hashIdx &=((1 << kHashBits) - 1);
|
| Entry* hashedEntry = fHashTable[hashIdx];
|
| - if (hashedEntry && hashedEntry->fProgram->getDesc() == optState.programDesc()) {
|
| + if (hashedEntry && hashedEntry->fProgram->getDesc() == desc) {
|
| SkASSERT(hashedEntry->fProgram);
|
| entry = hashedEntry;
|
| }
|
|
|
| int entryIdx;
|
| if (NULL == entry) {
|
| - entryIdx = this->search(optState.programDesc());
|
| + entryIdx = this->search(desc);
|
| if (entryIdx >= 0) {
|
| entry = fEntries[entryIdx];
|
| #ifdef PROGRAM_CACHE_STATS
|
| @@ -126,7 +128,7 @@ GrGLProgram* GrGpuGL::ProgramCache::getProgram(const GrOptDrawState& optState, D
|
| #ifdef PROGRAM_CACHE_STATS
|
| ++fCacheMisses;
|
| #endif
|
| - GrGLProgram* program = GrGLProgramBuilder::CreateProgram(optState, type, fGpu);
|
| + GrGLProgram* program = GrGLProgramBuilder::CreateProgram(optState, desc, type, fGpu);
|
| if (NULL == program) {
|
| return NULL;
|
| }
|
| @@ -201,7 +203,9 @@ GrGLProgram* GrGpuGL::ProgramCache::getProgram(const GrOptDrawState& optState, D
|
|
|
| #define GL_CALL(X) GR_GL_CALL(this->glInterface(), X)
|
|
|
| -bool GrGpuGL::flushGraphicsState(const GrOptDrawState& optState, DrawType type) {
|
| +bool GrGpuGL::flushGraphicsState(const GrOptDrawState& optState,
|
| + const GrProgramDesc& desc,
|
| + DrawType type) {
|
| // GrGpu::setupClipAndFlushState should have already checked this and bailed if not true.
|
| SkASSERT(optState.getRenderTarget());
|
|
|
| @@ -216,7 +220,7 @@ bool GrGpuGL::flushGraphicsState(const GrOptDrawState& optState, DrawType type)
|
| GrBlendCoeff srcCoeff = optState.getSrcBlendCoeff();
|
| GrBlendCoeff dstCoeff = optState.getDstBlendCoeff();
|
|
|
| - fCurrentProgram.reset(fProgramCache->getProgram(optState, type));
|
| + fCurrentProgram.reset(fProgramCache->getProgram(optState, desc, type));
|
| if (NULL == fCurrentProgram.get()) {
|
| SkDEBUGFAIL("Failed to create program!");
|
| return false;
|
| @@ -302,10 +306,9 @@ void GrGpuGL::setupGeometry(const GrOptDrawState& optState,
|
| }
|
|
|
| void GrGpuGL::buildProgramDesc(const GrOptDrawState& optState,
|
| - const GrProgramDesc::DescInfo& descInfo,
|
| GrGpu::DrawType drawType,
|
| GrProgramDesc* desc) {
|
| - if (!GrGLProgramDescBuilder::Build(optState, descInfo, drawType, this, desc)) {
|
| + if (!GrGLProgramDescBuilder::Build(optState, drawType, this, desc)) {
|
| SkDEBUGFAIL("Failed to generate GL program descriptor");
|
| }
|
| }
|
|
|