It's not a failure, so it can't _fail_ to draw. It should be interpreted such that the drawing succeeds with the vertex count given by the transform feedback object, which is 0.
Reviewed-by: Marek Olšák <marek.ol...@amd.com> Marek On Thu, Jul 30, 2015 at 12:46 PM, Dave Airlie <airl...@gmail.com> wrote: > if we get a request to take the count from feedback, but there > is no buffer to take it from, just draw nothing instead of asserting. > > This fixes this assert killing the ogl conform, and a piglit > test I've sent. > > Signed-off-by: Dave Airlie <airl...@redhat.com> > --- > src/mesa/state_tracker/st_cb_xformfb.c | 6 ++++-- > src/mesa/state_tracker/st_cb_xformfb.h | 2 +- > src/mesa/state_tracker/st_draw.c | 3 ++- > 3 files changed, 7 insertions(+), 4 deletions(-) > > diff --git a/src/mesa/state_tracker/st_cb_xformfb.c > b/src/mesa/state_tracker/st_cb_xformfb.c > index 07c118e..0708e68 100644 > --- a/src/mesa/state_tracker/st_cb_xformfb.c > +++ b/src/mesa/state_tracker/st_cb_xformfb.c > @@ -191,7 +191,6 @@ st_transform_feedback_get_draw_target(struct > gl_transform_feedback_object *obj) > } > } > > - assert(0); > return NULL; > } > > @@ -211,14 +210,17 @@ st_end_transform_feedback(struct gl_context *ctx, > } > > > -void > +bool > st_transform_feedback_draw_init(struct gl_transform_feedback_object *obj, > struct pipe_draw_info *out) > { > struct st_transform_feedback_object *sobj = > st_transform_feedback_object(obj); > > + if (sobj->draw_count == NULL) > + return false; > out->count_from_stream_output = sobj->draw_count; > + return true; > } > > > diff --git a/src/mesa/state_tracker/st_cb_xformfb.h > b/src/mesa/state_tracker/st_cb_xformfb.h > index 998c418..fb50ded 100644 > --- a/src/mesa/state_tracker/st_cb_xformfb.h > +++ b/src/mesa/state_tracker/st_cb_xformfb.h > @@ -38,7 +38,7 @@ struct pipe_draw_info; > extern void > st_init_xformfb_functions(struct dd_function_table *functions); > > -extern void > +extern bool > st_transform_feedback_draw_init(struct gl_transform_feedback_object *obj, > struct pipe_draw_info *out); > > diff --git a/src/mesa/state_tracker/st_draw.c > b/src/mesa/state_tracker/st_draw.c > index 66b2f83..bae8096 100644 > --- a/src/mesa/state_tracker/st_draw.c > +++ b/src/mesa/state_tracker/st_draw.c > @@ -242,7 +242,8 @@ st_draw_vbo(struct gl_context *ctx, > /* Transform feedback drawing is always non-indexed. */ > /* Set info.count_from_stream_output. */ > if (tfb_vertcount) { > - st_transform_feedback_draw_init(tfb_vertcount, &info); > + if (st_transform_feedback_draw_init(tfb_vertcount, &info) == false) > + return; > } > } > > -- > 2.4.3 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev