i965: Force outputs_written to contain varyings needed by stream-out.
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. Reviewed-by: Juan A. Suarez Romero <jasuarez@igalia.com>
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user