lavapipe: fix initialization of pipe_stream_output with unwritten outputs

nir_assign_io_var_locations() does not use outputs_written when assigning
driver locations. Use driver_location to avoid incorrectly guessing what
locations it assigned.

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8364>
This commit is contained in:
Rhys Perry 2021-02-04 14:10:59 +00:00 committed by Marge Bot
parent 47ed5c57df
commit 8731a1beb7
1 changed files with 5 additions and 4 deletions

View File

@ -681,13 +681,14 @@ lvp_pipeline_compile(struct lvp_pipeline *pipeline,
stage == MESA_SHADER_TESS_EVAL) {
xfb_info = nir_gather_xfb_info(pipeline->pipeline_nir[stage], NULL);
if (xfb_info) {
unsigned num_outputs = 0;
uint8_t output_mapping[VARYING_SLOT_TESS_MAX];
memset(output_mapping, 0, sizeof(output_mapping));
for (unsigned attr = 0; attr < VARYING_SLOT_MAX; attr++) {
if (pipeline->pipeline_nir[stage]->info.outputs_written & BITFIELD64_BIT(attr))
output_mapping[attr] = num_outputs++;
nir_foreach_shader_out_variable(var, pipeline->pipeline_nir[stage]) {
unsigned slots = var->data.compact ? DIV_ROUND_UP(glsl_get_length(var->type), 4)
: glsl_count_attribute_slots(var->type, false);
for (unsigned i = 0; i < slots; i++)
output_mapping[var->data.location + i] = var->data.driver_location + i;
}
shstate.stream_output.num_outputs = xfb_info->output_count;