[Mesa-dev] [PATCH 3/3] i965: Force outputs_written to contain varyings needed by stream-out.

Kenneth Graunke kenneth at whitecape.org
Fri Sep 15 17:17:51 UTC 2017


If transform feedback is recording a varying, it needs a slot in the
VUE map, regardless of whether or not the shader writes it.

Together with the previous patch, this fixes:
- KHR-GL45.enhanced_layouts.xfb_capture_struct

The test captures a structure where the vertex shader writes the first
and third members - but the second still needs a slot.
---
 src/mesa/drivers/dri/i965/brw_link.cpp | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_link.cpp b/src/mesa/drivers/dri/i965/brw_link.cpp
index a1082a7a05a..c0fda0d4799 100644
--- a/src/mesa/drivers/dri/i965/brw_link.cpp
+++ b/src/mesa/drivers/dri/i965/brw_link.cpp
@@ -181,7 +181,8 @@ unify_interfaces(struct shader_info **infos)
 }
 
 static void
-update_xfb_info(struct gl_transform_feedback_info *xfb_info)
+update_xfb_info(struct gl_transform_feedback_info *xfb_info,
+                struct shader_info *info)
 {
    if (!xfb_info)
       return;
@@ -210,6 +211,8 @@ update_xfb_info(struct gl_transform_feedback_info *xfb_info)
          output->ComponentOffset = 3;
          break;
       }
+
+      info->outputs_written |= 1ull << output->OutputRegister;
    }
 }
 
@@ -236,8 +239,6 @@ brw_link_shader(struct gl_context *ctx, struct gl_shader_program *shProg)
       prog->ShadowSamplers = shader->shadow_samplers;
       _mesa_update_shader_textures_used(shProg, prog);
 
-      update_xfb_info(prog->sh.LinkedTransformFeedback);
-
       bool debug_enabled =
          (INTEL_DEBUG & intel_debug_flag_for_shader_stage(shader->Stage));
 
@@ -252,6 +253,8 @@ brw_link_shader(struct gl_context *ctx, struct gl_shader_program *shProg)
                                  compiler->scalar_stage[stage]);
       infos[stage] = &prog->nir->info;
 
+      update_xfb_info(prog->sh.LinkedTransformFeedback, infos[stage]);
+
       /* Make a pass over the IR to add state references for any built-in
        * uniforms that are used.  This has to be done now (during linking).
        * Code generation doesn't happen until the first time this shader is
-- 
2.14.1



More information about the mesa-dev mailing list