Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(361)

Unified Diff: src/gpu/gl/GrGLGpu.cpp

Issue 815643005: Move program descriptor and primitive processor off of optstate (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: bug fix Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/gl/GrGLGpu.h ('k') | src/gpu/gl/GrGLGpuProgramCache.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/gl/GrGLGpu.cpp
diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp
index 182d2587088bc77367358c6cfcca09c2037413fc..aa9a3e664cd2254bee4044c323da4e8347fa65b1 100644
--- a/src/gpu/gl/GrGLGpu.cpp
+++ b/src/gpu/gl/GrGLGpu.cpp
@@ -1336,15 +1336,16 @@ void GrGLGpu::flushScissor(const GrScissorState& scissorState,
this->disableScissor();
}
-bool GrGLGpu::flushGLState(const GrOptDrawState& optState) {
+bool GrGLGpu::flushGLState(const DrawArgs& args) {
GrXferProcessor::BlendInfo blendInfo;
- optState.getXferProcessor()->getBlendInfo(&blendInfo);
+ const GrOptDrawState& optState = *args.fOptState;
+ args.fOptState->getXferProcessor()->getBlendInfo(&blendInfo);
this->flushDither(optState.isDitherState());
this->flushColorWrite(blendInfo.fWriteColor);
this->flushDrawFace(optState.getDrawFace());
- fCurrentProgram.reset(fProgramCache->getProgram(optState));
+ fCurrentProgram.reset(fProgramCache->getProgram(args));
if (NULL == fCurrentProgram.get()) {
SkDEBUGFAIL("Failed to create program!");
return false;
@@ -1362,7 +1363,7 @@ bool GrGLGpu::flushGLState(const GrOptDrawState& optState) {
this->flushBlend(blendInfo);
}
- fCurrentProgram->setData(optState);
+ fCurrentProgram->setData(*args.fPrimitiveProcessor, optState, *args.fBatchTracker);
GrGLRenderTarget* glRT = static_cast<GrGLRenderTarget*>(optState.getRenderTarget());
this->flushStencil(optState.getStencil());
@@ -1377,7 +1378,7 @@ bool GrGLGpu::flushGLState(const GrOptDrawState& optState) {
return true;
}
-void GrGLGpu::setupGeometry(const GrOptDrawState& optState,
+void GrGLGpu::setupGeometry(const GrPrimitiveProcessor& primProc,
const GrDrawTarget::DrawInfo& info,
size_t* indexOffsetInBytes) {
GrGLVertexBuffer* vbuf;
@@ -1400,11 +1401,10 @@ void GrGLGpu::setupGeometry(const GrOptDrawState& optState,
GrGLAttribArrayState* attribState =
fHWGeometryState.bindArrayAndBuffersToDraw(this, vbuf, ibuf);
- const GrPrimitiveProcessor* primProc = optState.getPrimitiveProcessor();
- int vaCount = primProc->numAttribs();
+ int vaCount = primProc.numAttribs();
if (vaCount > 0) {
- GrGLsizei stride = static_cast<GrGLsizei>(primProc->getVertexStride());
+ GrGLsizei stride = static_cast<GrGLsizei>(primProc.getVertexStride());
size_t vertexOffsetInBytes = stride * info.startVertex();
@@ -1414,7 +1414,7 @@ void GrGLGpu::setupGeometry(const GrOptDrawState& optState,
size_t offset = 0;
for (int attribIndex = 0; attribIndex < vaCount; attribIndex++) {
- const GrGeometryProcessor::Attribute& attrib = primProc->getAttrib(attribIndex);
+ const GrGeometryProcessor::Attribute& attrib = primProc.getAttrib(attribIndex);
usedAttribArraysMask |= (1 << attribIndex);
GrVertexAttribType attribType = attrib.fType;
attribState->set(this,
@@ -1431,11 +1431,14 @@ void GrGLGpu::setupGeometry(const GrOptDrawState& optState,
}
}
-void GrGLGpu::buildProgramDesc(const GrOptDrawState& optState,
+void GrGLGpu::buildProgramDesc(GrProgramDesc* desc,
+ const GrPrimitiveProcessor& primProc,
+ const GrOptDrawState& optState,
const GrProgramDesc::DescInfo& descInfo,
GrGpu::DrawType drawType,
- GrProgramDesc* desc) {
- if (!GrGLProgramDescBuilder::Build(optState, descInfo, drawType, this, desc)) {
+ const GrBatchTracker& batchTracker) const {
+ if (!GrGLProgramDescBuilder::Build(desc, primProc, optState, descInfo, drawType, this,
+ batchTracker)) {
SkDEBUGFAIL("Failed to generate GL program descriptor");
}
}
@@ -1823,13 +1826,13 @@ GrGLenum gPrimitiveType2GLMode[] = {
#endif
#endif
-void GrGLGpu::onDraw(const GrOptDrawState& ds, const GrDrawTarget::DrawInfo& info) {
- if (!this->flushGLState(ds)) {
+void GrGLGpu::onDraw(const DrawArgs& args, const GrDrawTarget::DrawInfo& info) {
+ if (!this->flushGLState(args)) {
return;
}
- size_t indexOffsetInBytes;
- this->setupGeometry(ds, info, &indexOffsetInBytes);
+ size_t indexOffsetInBytes = 0;
+ this->setupGeometry(*args.fPrimitiveProcessor, info, &indexOffsetInBytes);
SkASSERT((size_t)info.primitiveType() < SK_ARRAY_COUNT(gPrimitiveType2GLMode));
@@ -1875,15 +1878,15 @@ void GrGLGpu::onStencilPath(const GrPath* path, const StencilPathState& state) {
fPathRendering->stencilPath(path, *state.fStencil);
}
-void GrGLGpu::onDrawPath(const GrOptDrawState& ds, const GrPath* path,
+void GrGLGpu::onDrawPath(const DrawArgs& args, const GrPath* path,
const GrStencilSettings& stencil) {
- if (!this->flushGLState(ds)) {
+ if (!this->flushGLState(args)) {
return;
}
fPathRendering->drawPath(path, stencil);
}
-void GrGLGpu::onDrawPaths(const GrOptDrawState& ds,
+void GrGLGpu::onDrawPaths(const DrawArgs& args,
const GrPathRange* pathRange,
const void* indices,
GrDrawTarget::PathIndexType indexType,
@@ -1891,7 +1894,7 @@ void GrGLGpu::onDrawPaths(const GrOptDrawState& ds,
GrDrawTarget::PathTransformType transformType,
int count,
const GrStencilSettings& stencil) {
- if (!this->flushGLState(ds)) {
+ if (!this->flushGLState(args)) {
return;
}
fPathRendering->drawPaths(pathRange, indices, indexType, transformValues,
« no previous file with comments | « src/gpu/gl/GrGLGpu.h ('k') | src/gpu/gl/GrGLGpuProgramCache.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698