From: Dave Airlie Date: Thu, 30 Jul 2015 10:44:50 +0000 (+1000) Subject: st/mesa: don't draw instead of asserting in transform feedback X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=518abd0bbe1886550b43c62679a2ebd41e8199e9;p=mesa.git st/mesa: don't draw instead of asserting in transform feedback if we get a request to take the count from feedback, but there is no buffer to take it from, just draw as if we got 0 vertices so nothing. This fixes this assert killing the ogl conform, and a piglit test I've sent. Reviewed-by: Marek Olšák Signed-off-by: Dave Airlie --- diff --git a/src/mesa/state_tracker/st_cb_xformfb.c b/src/mesa/state_tracker/st_cb_xformfb.c index 07c118e227b..0708e68ec7b 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 998c418257b..fb50deddfae 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 66b2f832933..bae8096e080 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; } }