radv: fix dual source blending
Add the index to the location when assigning driver locations for output variables. Otherwise two fragment shader outputs declared as: layout (location = 0, index = 0) out vec4 output1; layout (location = 0, index = 1) out vec4 output2; will end up aliasing one another. Note that this patch will make the second output variable in the above example alias a possible third output variable with location = 1 and index = 0. But this shouldn't be a problem in practice since only one color attachment is supported when dual-source blending is used. Cc: "13.0" <mesa-stable@lists.freedesktop.org> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
@@ -4125,7 +4125,7 @@ static void
|
||||
handle_shader_output_decl(struct nir_to_llvm_context *ctx,
|
||||
struct nir_variable *variable)
|
||||
{
|
||||
int idx = variable->data.location;
|
||||
int idx = variable->data.location + variable->data.index;
|
||||
unsigned attrib_count = glsl_count_attribute_slots(variable->type, false);
|
||||
|
||||
variable->data.driver_location = idx * 4;
|
||||
@@ -4155,7 +4155,7 @@ handle_shader_output_decl(struct nir_to_llvm_context *ctx,
|
||||
si_build_alloca_undef(ctx, ctx->f32, "");
|
||||
}
|
||||
}
|
||||
ctx->output_mask |= ((1ull << attrib_count) - 1) << variable->data.location;
|
||||
ctx->output_mask |= ((1ull << attrib_count) - 1) << idx;
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
Reference in New Issue
Block a user