| Index: src/gpu/gl/GrGLProgram.cpp
|
| diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp
|
| index e1f0310bca1f009f9d78afb7230fdc532d08b77f..bd36e598967170c9d88b865a0798806c1b807527 100644
|
| --- a/src/gpu/gl/GrGLProgram.cpp
|
| +++ b/src/gpu/gl/GrGLProgram.cpp
|
| @@ -103,8 +103,9 @@ void GrGLProgram::bindTextures(const Proc* ip, const GrProcessor& processor) {
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -void GrGLProgram::setData(const GrOptDrawState& optState) {
|
| - this->setRenderTargetState(optState);
|
| +void GrGLProgram::setData(const GrPrimitiveProcessor& primProc, const GrOptDrawState& optState,
|
| + const GrBatchTracker& batchTracker) {
|
| + this->setRenderTargetState(primProc, optState);
|
|
|
| const GrDeviceCoordTexture* dstCopy = optState.getDstCopy();
|
| if (dstCopy) {
|
| @@ -130,9 +131,7 @@ void GrGLProgram::setData(const GrOptDrawState& optState) {
|
|
|
| // we set the textures, and uniforms for installed processors in a generic way, but subclasses
|
| // of GLProgram determine how to set coord transforms
|
| - const GrPrimitiveProcessor& primProc = *optState.getPrimitiveProcessor();
|
| - const GrBatchTracker& bt = optState.getBatchTracker();
|
| - fGeometryProcessor->fGLProc->setData(fProgramDataManager, primProc, bt);
|
| + fGeometryProcessor->fGLProc->setData(fProgramDataManager, primProc, batchTracker);
|
| this->bindTextures(fGeometryProcessor.get(), primProc);
|
|
|
| if (fXferProcessor.get()) {
|
| @@ -140,26 +139,27 @@ void GrGLProgram::setData(const GrOptDrawState& optState) {
|
| fXferProcessor->fGLProc->setData(fProgramDataManager, xp);
|
| this->bindTextures(fXferProcessor.get(), xp);
|
| }
|
| - this->setFragmentData(optState);
|
| + this->setFragmentData(primProc, optState);
|
|
|
| // Some of GrGLProgram subclasses need to update state here
|
| this->didSetData(optState.drawType());
|
| }
|
|
|
| -void GrGLProgram::setFragmentData(const GrOptDrawState& optState) {
|
| +void GrGLProgram::setFragmentData(const GrPrimitiveProcessor& primProc,
|
| + const GrOptDrawState& optState) {
|
| int numProcessors = fFragmentProcessors->fProcs.count();
|
| for (int e = 0; e < numProcessors; ++e) {
|
| const GrPendingFragmentStage& stage = optState.getFragmentStage(e);
|
| const GrProcessor& processor = *stage.processor();
|
| fFragmentProcessors->fProcs[e]->fGLProc->setData(fProgramDataManager, processor);
|
| - this->setTransformData(optState.getPrimitiveProcessor(),
|
| + this->setTransformData(primProc,
|
| stage,
|
| e,
|
| fFragmentProcessors->fProcs[e]);
|
| this->bindTextures(fFragmentProcessors->fProcs[e], processor);
|
| }
|
| }
|
| -void GrGLProgram::setTransformData(const GrPrimitiveProcessor* primProc,
|
| +void GrGLProgram::setTransformData(const GrPrimitiveProcessor& primProc,
|
| const GrPendingFragmentStage& processor,
|
| int index,
|
| GrGLInstalledFragProc* ip) {
|
| @@ -173,7 +173,8 @@ void GrGLProgram::didSetData(GrGpu::DrawType drawType) {
|
| SkASSERT(!GrGpu::IsPathRenderingDrawType(drawType));
|
| }
|
|
|
| -void GrGLProgram::setRenderTargetState(const GrOptDrawState& optState) {
|
| +void GrGLProgram::setRenderTargetState(const GrPrimitiveProcessor& primProc,
|
| + const GrOptDrawState& optState) {
|
| // Load the RT height uniform if it is needed to y-flip gl_FragCoord.
|
| if (fBuiltinUniformHandles.fRTHeightUni.isValid() &&
|
| fRenderTargetState.fRenderTargetSize.fHeight != optState.getRenderTarget()->height()) {
|
| @@ -182,10 +183,11 @@ void GrGLProgram::setRenderTargetState(const GrOptDrawState& optState) {
|
| }
|
|
|
| // call subclasses to set the actual view matrix
|
| - this->onSetRenderTargetState(optState);
|
| + this->onSetRenderTargetState(primProc, optState);
|
| }
|
|
|
| -void GrGLProgram::onSetRenderTargetState(const GrOptDrawState& optState) {
|
| +void GrGLProgram::onSetRenderTargetState(const GrPrimitiveProcessor&,
|
| + const GrOptDrawState& optState) {
|
| const GrRenderTarget* rt = optState.getRenderTarget();
|
| SkISize size;
|
| size.set(rt->width(), rt->height());
|
| @@ -220,7 +222,7 @@ void GrGLNvprProgram::didSetData(GrGpu::DrawType drawType) {
|
| pathProc->didSetData(fGpu->glPathRendering());
|
| }
|
|
|
| -void GrGLNvprProgram::setTransformData(const GrPrimitiveProcessor* primProc,
|
| +void GrGLNvprProgram::setTransformData(const GrPrimitiveProcessor& primProc,
|
| const GrPendingFragmentStage& proc,
|
| int index,
|
| GrGLInstalledFragProc* ip) {
|
| @@ -230,13 +232,13 @@ void GrGLNvprProgram::setTransformData(const GrPrimitiveProcessor* primProc,
|
| fGpu->glPathRendering(), fProgramID);
|
| }
|
|
|
| -void GrGLNvprProgram::onSetRenderTargetState(const GrOptDrawState& optState) {
|
| +void GrGLNvprProgram::onSetRenderTargetState(const GrPrimitiveProcessor& primProc,
|
| + const GrOptDrawState& optState) {
|
| SkASSERT(GrGpu::IsPathRenderingDrawType(optState.drawType()) &&
|
| - !optState.getPrimitiveProcessor()->willUseGeoShader() &&
|
| - optState.getPrimitiveProcessor()->numAttribs() == 0);
|
| + !primProc.willUseGeoShader() && primProc.numAttribs() == 0);
|
| const GrRenderTarget* rt = optState.getRenderTarget();
|
| SkISize size;
|
| size.set(rt->width(), rt->height());
|
| - fGpu->glPathRendering()->setProjectionMatrix(optState.getPrimitiveProcessor()->viewMatrix(),
|
| + fGpu->glPathRendering()->setProjectionMatrix(primProc.viewMatrix(),
|
| size, rt->origin());
|
| }
|
|
|