@@ -91,8 +91,11 @@ void GrOpsRenderPass::bindPipeline(const GrProgramInfo& programInfo, const SkRec
9191 }
9292 fTextureBindingStatus = (hasTextures) ?
9393 DynamicStateStatus::kUninitialized : DynamicStateStatus::kDisabled ;
94- fHasVertexAttributes = programInfo.primProc ().hasVertexAttributes ();
95- fHasInstanceAttributes = programInfo.primProc ().hasInstanceAttributes ();
94+ fHasIndexBuffer = false ;
95+ fInstanceBufferStatus = (programInfo.primProc ().hasInstanceAttributes ()) ?
96+ DynamicStateStatus::kUninitialized : DynamicStateStatus::kDisabled ;
97+ fVertexBufferStatus = (programInfo.primProc ().hasVertexAttributes ()) ?
98+ DynamicStateStatus::kUninitialized : DynamicStateStatus::kDisabled ;
9699#endif
97100
98101 fDrawPipelineStatus = DrawPipelineStatus::kOk ;
@@ -149,6 +152,36 @@ void GrOpsRenderPass::drawMeshes(const GrProgramInfo& programInfo, const GrMesh
149152 }
150153}
151154
155+ void GrOpsRenderPass::bindBuffers (const GrBuffer* indexBuffer, const GrBuffer* instanceBuffer,
156+ const GrBuffer* vertexBuffer, GrPrimitiveRestart primRestart) {
157+ if (DrawPipelineStatus::kOk != fDrawPipelineStatus ) {
158+ SkASSERT (DrawPipelineStatus::kNotConfigured != fDrawPipelineStatus );
159+ return ;
160+ }
161+
162+ #ifdef SK_DEBUG
163+ if (indexBuffer) {
164+ fHasIndexBuffer = true ;
165+ }
166+
167+ SkASSERT ((DynamicStateStatus::kDisabled == fInstanceBufferStatus ) != SkToBool (instanceBuffer));
168+ if (instanceBuffer) {
169+ fInstanceBufferStatus = DynamicStateStatus::kConfigured ;
170+ }
171+
172+ SkASSERT ((DynamicStateStatus::kDisabled == fVertexBufferStatus ) != SkToBool (vertexBuffer));
173+ if (vertexBuffer) {
174+ fVertexBufferStatus = DynamicStateStatus::kConfigured ;
175+ }
176+
177+ if (GrPrimitiveRestart::kYes == primRestart) {
178+ SkASSERT (this ->gpu ()->caps ()->usePrimitiveRestart ());
179+ }
180+ #endif
181+
182+ this ->onBindBuffers (indexBuffer, instanceBuffer, vertexBuffer, primRestart);
183+ }
184+
152185bool GrOpsRenderPass::prepareToDraw () {
153186 if (DrawPipelineStatus::kOk != fDrawPipelineStatus ) {
154187 SkASSERT (DrawPipelineStatus::kNotConfigured != fDrawPipelineStatus );
@@ -164,52 +197,45 @@ bool GrOpsRenderPass::prepareToDraw() {
164197 return true ;
165198}
166199
167- void GrOpsRenderPass::draw (const GrBuffer* vertexBuffer, int vertexCount, int baseVertex) {
200+ void GrOpsRenderPass::draw (int vertexCount, int baseVertex) {
168201 if (!this ->prepareToDraw ()) {
169202 return ;
170203 }
171- SkASSERT (SkToBool (vertexBuffer) == fHasVertexAttributes );
172- this ->onDraw (vertexBuffer, vertexCount, baseVertex);
204+ SkASSERT (!fHasIndexBuffer );
205+ SkASSERT (DynamicStateStatus::kConfigured != fInstanceBufferStatus );
206+ SkASSERT (DynamicStateStatus::kUninitialized != fVertexBufferStatus );
207+ this ->onDraw (vertexCount, baseVertex);
173208}
174209
175- void GrOpsRenderPass::drawIndexed (const GrBuffer* indexBuffer, int indexCount,
176- int baseIndex, GrPrimitiveRestart primitiveRestart,
177- uint16_t minIndexValue, uint16_t maxIndexValue,
178- const GrBuffer* vertexBuffer, int baseVertex) {
210+ void GrOpsRenderPass::drawIndexed (int indexCount, int baseIndex, uint16_t minIndexValue,
211+ uint16_t maxIndexValue, int baseVertex) {
179212 if (!this ->prepareToDraw ()) {
180213 return ;
181214 }
182- SkASSERT (GrPrimitiveRestart::kNo == primitiveRestart ||
183- this ->gpu ()->caps ()->usePrimitiveRestart ());
184- SkASSERT (SkToBool (vertexBuffer) == fHasVertexAttributes );
185- this ->onDrawIndexed (indexBuffer, indexCount, baseIndex, primitiveRestart, minIndexValue,
186- maxIndexValue, vertexBuffer, baseVertex);
215+ SkASSERT (fHasIndexBuffer );
216+ SkASSERT (DynamicStateStatus::kConfigured != fInstanceBufferStatus );
217+ SkASSERT (DynamicStateStatus::kUninitialized != fVertexBufferStatus );
218+ this ->onDrawIndexed (indexCount, baseIndex, minIndexValue, maxIndexValue, baseVertex);
187219}
188220
189- void GrOpsRenderPass::drawInstanced (const GrBuffer* instanceBuffer, int instanceCount, int
190- baseInstance, const GrBuffer* vertexBuffer, int vertexCount,
221+ void GrOpsRenderPass::drawInstanced (int instanceCount, int baseInstance, int vertexCount,
191222 int baseVertex) {
192223 if (!this ->prepareToDraw ()) {
193224 return ;
194225 }
195- SkASSERT (SkToBool (vertexBuffer) == fHasVertexAttributes );
196- SkASSERT (SkToBool (instanceBuffer) == fHasInstanceAttributes );
197- this -> onDrawInstanced (instanceBuffer, instanceCount, baseInstance, vertexBuffer, vertexCount,
198- baseVertex);
226+ SkASSERT (! fHasIndexBuffer );
227+ SkASSERT (DynamicStateStatus:: kUninitialized != fInstanceBufferStatus );
228+ SkASSERT (DynamicStateStatus:: kUninitialized != fVertexBufferStatus );
229+ this -> onDrawInstanced (instanceCount, baseInstance, vertexCount, baseVertex);
199230}
200231
201- void GrOpsRenderPass::drawIndexedInstanced (
202- const GrBuffer* indexBuffer, int indexCount, int baseIndex,
203- GrPrimitiveRestart primitiveRestart, const GrBuffer* instanceBuffer, int instanceCount,
204- int baseInstance, const GrBuffer* vertexBuffer, int baseVertex) {
232+ void GrOpsRenderPass::drawIndexedInstanced (int indexCount, int baseIndex, int instanceCount,
233+ int baseInstance, int baseVertex) {
205234 if (!this ->prepareToDraw ()) {
206235 return ;
207236 }
208- SkASSERT (GrPrimitiveRestart::kNo == primitiveRestart ||
209- this ->gpu ()->caps ()->usePrimitiveRestart ());
210- SkASSERT (SkToBool (vertexBuffer) == fHasVertexAttributes );
211- SkASSERT (SkToBool (instanceBuffer) == fHasInstanceAttributes );
212- this ->onDrawIndexedInstanced (indexBuffer, indexCount, baseIndex, primitiveRestart,
213- instanceBuffer, instanceCount, baseInstance, vertexBuffer,
214- baseVertex);
237+ SkASSERT (fHasIndexBuffer );
238+ SkASSERT (DynamicStateStatus::kUninitialized != fInstanceBufferStatus );
239+ SkASSERT (DynamicStateStatus::kUninitialized != fVertexBufferStatus );
240+ this ->onDrawIndexedInstanced (indexCount, baseIndex, instanceCount, baseInstance, baseVertex);
215241}
0 commit comments