Chromium Code Reviews| Index: src/gpu/gl/GrGLProgram.cpp |
| diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp |
| index 0ad7a1875646475a64f2e55254966a5af2b34a69..692e7a728d53216a6f9ac2777edd88fa9f868965 100644 |
| --- a/src/gpu/gl/GrGLProgram.cpp |
| +++ b/src/gpu/gl/GrGLProgram.cpp |
| @@ -13,6 +13,7 @@ |
| #include "GrDrawEffect.h" |
| #include "GrGLEffect.h" |
| #include "GrGpuGL.h" |
| +#include "GrGLPathRendering.h" |
| #include "GrGLShaderVar.h" |
| #include "GrGLSL.h" |
| #include "SkXfermode.h" |
| @@ -25,10 +26,12 @@ GrGLProgram* GrGLProgram::Create(GrGpuGL* gpu, |
| const GrEffectStage* colorStages[], |
| const GrEffectStage* coverageStages[]) { |
| SkAutoTDelete<GrGLShaderBuilder> builder; |
| - if (desc.getHeader().fHasVertexCode ||!gpu->shouldUseFixedFunctionTexturing()) { |
| - builder.reset(SkNEW_ARGS(GrGLFullShaderBuilder, (gpu, desc))); |
| - } else { |
| + if (!desc.getHeader().fHasVertexCode && |
|
bsalomon
2014/08/07 21:02:52
I think we should probably rename this field from
|
| + gpu->glCaps().pathRenderingSupport() && |
| + !gpu->pathRendering()->caps().fragmentInputGenSupport) { |
| builder.reset(SkNEW_ARGS(GrGLFragmentOnlyShaderBuilder, (gpu, desc))); |
| + } else { |
| + builder.reset(SkNEW_ARGS(GrGLFullShaderBuilder, (gpu, desc))); |
| } |
| if (builder->genProgram(colorStages, coverageStages)) { |
| @@ -101,7 +104,8 @@ void GrGLProgram::initSamplerUniforms() { |
| /////////////////////////////////////////////////////////////////////////////// |
| -void GrGLProgram::setData(GrDrawState::BlendOptFlags blendOpts, |
| +void GrGLProgram::setData(GrGpu::DrawType drawType, |
| + GrDrawState::BlendOptFlags blendOpts, |
| const GrEffectStage* colorStages[], |
| const GrEffectStage* coverageStages[], |
| const GrDeviceCoordTexture* dstCopy, |
| @@ -123,7 +127,7 @@ void GrGLProgram::setData(GrDrawState::BlendOptFlags blendOpts, |
| this->setColor(drawState, color, sharedState); |
| this->setCoverage(drawState, coverage, sharedState); |
| - this->setMatrixAndRenderTargetHeight(drawState); |
| + this->setMatrixAndRenderTargetHeight(drawType, drawState); |
| if (NULL != dstCopy) { |
| if (fBuiltinUniformHandles.fDstCopyTopLeftUni.isValid()) { |
| @@ -146,9 +150,8 @@ void GrGLProgram::setData(GrDrawState::BlendOptFlags blendOpts, |
| SkASSERT(!fBuiltinUniformHandles.fDstCopySamplerUni.isValid()); |
| } |
| - fColorEffects->setData(fGpu, fProgramDataManager, colorStages); |
| - fCoverageEffects->setData(fGpu, fProgramDataManager, coverageStages); |
| - |
| + fColorEffects->setData(fGpu, drawType,fProgramDataManager, colorStages); |
| + fCoverageEffects->setData(fGpu, drawType,fProgramDataManager, coverageStages); |
| // PathTexGen state applies to the the fixed function vertex shader. For |
| // custom shaders, it's ignored, so we don't need to change the texgen |
| @@ -232,7 +235,8 @@ void GrGLProgram::setCoverage(const GrDrawState& drawState, |
| } |
| } |
| -void GrGLProgram::setMatrixAndRenderTargetHeight(const GrDrawState& drawState) { |
| +void GrGLProgram::setMatrixAndRenderTargetHeight(GrGpu::DrawType drawType, |
| + const GrDrawState& drawState) { |
| const GrRenderTarget* rt = drawState.getRenderTarget(); |
| SkISize size; |
| size.set(rt->width(), rt->height()); |
| @@ -244,9 +248,7 @@ void GrGLProgram::setMatrixAndRenderTargetHeight(const GrDrawState& drawState) { |
| SkIntToScalar(size.fHeight)); |
| } |
| - if (!fHasVertexShader) { |
| - SkASSERT(!fBuiltinUniformHandles.fViewMatrixUni.isValid()); |
| - SkASSERT(!fBuiltinUniformHandles.fRTAdjustmentUni.isValid()); |
| + if (GrGpu::IsPathRenderingDrawType(drawType)) { |
| fGpu->setProjectionMatrix(drawState.getViewMatrix(), size, rt->origin()); |
| } else if (fMatrixState.fRenderTargetOrigin != rt->origin() || |
| fMatrixState.fRenderTargetSize != size || |