summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorCharmaine Lee <[email protected]>2017-03-15 15:18:14 -0700
committerBrian Paul <[email protected]>2017-04-07 13:46:43 -0600
commitfed72ff6cb85fa6044335cfc41d8492458f53750 (patch)
tree77b1fd6e776ea33e1d70fa7b8d81cf08ce6da16e /src
parent4e17b59f6cea79df078f553376b0392fbbf1ae0a (diff)
svga: do not emulate wide points in GS when doing transform feedback
Emulating wide points in geometry shader when doing transform feedback is problematic. This patch disables the emulation. Tested with piglit test ext_transform_feedback-points. Also tested with MTT glretrace, mesa demos pointblast and spriteblast. Reviewed-by: Brian Paul <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/svga/svga_state_tgsi_transform.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/gallium/drivers/svga/svga_state_tgsi_transform.c b/src/gallium/drivers/svga/svga_state_tgsi_transform.c
index 9e643ff49a7..b567aab6bc8 100644
--- a/src/gallium/drivers/svga/svga_state_tgsi_transform.c
+++ b/src/gallium/drivers/svga/svga_state_tgsi_transform.c
@@ -249,9 +249,11 @@ update_tgsi_transform(struct svga_context *svga, unsigned dirty)
if (svga->curr.reduced_prim == PIPE_PRIM_POINTS) {
/* If the current prim type is POINTS and the current geometry shader
* emits wide points, transform the shader to emulate wide points using
- * quads.
+ * quads. NOTE: we don't do emulation of wide points in GS when
+ * transform feedback is enabled.
*/
- if (gs != NULL && (gs->base.info.writes_psize || gs->wide_point)) {
+ if (gs != NULL && !gs->base.stream_output &&
+ (gs->base.info.writes_psize || gs->wide_point)) {
orig_gs = gs->base.parent ? gs->base.parent : &gs->base;
new_gs = emulate_point_sprite(svga, orig_gs, orig_gs->tokens);
}
@@ -260,7 +262,7 @@ update_tgsi_transform(struct svga_context *svga, unsigned dirty)
* shader emits wide point then create a new geometry shader to emulate
* wide point.
*/
- else if (gs == NULL &&
+ else if (gs == NULL && !vs->base.stream_output &&
(svga->curr.rast->pointsize > 1.0 ||
vs->base.info.writes_psize)) {
new_gs = add_point_sprite_shader(svga);