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

Juan A. Suarez Romero jasuarez at igalia.com
Mon Sep 18 10:18:40 UTC 2017


For the series:

Reviewed-by: Juan A. Suarez Romero <jasuarez at igalia.com>


On Fri, 2017-09-15 at 10:17 -0700, Kenneth Graunke wrote:
> 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


More information about the mesa-dev mailing list