Mesa (master): st/mesa: don' t draw instead of asserting in transform feedback
Dave Airlie
airlied at kemper.freedesktop.org
Thu Jul 30 21:28:54 UTC 2015
Module: Mesa
Branch: master
Commit: 518abd0bbe1886550b43c62679a2ebd41e8199e9
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=518abd0bbe1886550b43c62679a2ebd41e8199e9
Author: Dave Airlie <airlied at gmail.com>
Date: Thu Jul 30 20:44:50 2015 +1000
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 <marek.olsak at amd.com>
Signed-off-by: Dave Airlie <airlied at 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;
}
}
More information about the mesa-commit
mailing list