mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-02 14:28:05 +02:00
nir: reuse existing psiz-variable
For shaders where there's already a psiz-variable, we should rather reuse it than create a second one. This can happen if a shader writes gl_PointSize, but disables GL_PROGRAM_POINT_SIZE. Fixes:878c94288a("nir: add lowering-pass for point-size mov") Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5328> (cherry picked from commite61a98877c)
This commit is contained in:
parent
45403a5a45
commit
8df640b461
2 changed files with 21 additions and 7 deletions
|
|
@ -967,7 +967,7 @@
|
|||
"description": "nir: reuse existing psiz-variable",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"master_sha": null,
|
||||
"because_sha": "878c94288a8aed3479517660be3e9a88f9b44269"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -33,11 +33,12 @@
|
|||
|
||||
static bool
|
||||
lower_impl(nir_function_impl *impl,
|
||||
const gl_state_index16 *pointsize_state_tokens)
|
||||
const gl_state_index16 *pointsize_state_tokens,
|
||||
nir_variable *out)
|
||||
{
|
||||
nir_shader *shader = impl->function->shader;
|
||||
nir_builder b;
|
||||
nir_variable *in, *out;
|
||||
nir_variable *in;
|
||||
|
||||
nir_builder_init(&b, impl);
|
||||
b.cursor = nir_before_cf_list(&impl->body);
|
||||
|
|
@ -50,9 +51,11 @@ lower_impl(nir_function_impl *impl,
|
|||
pointsize_state_tokens,
|
||||
sizeof(in->state_slots[0].tokens));
|
||||
|
||||
out = nir_variable_create(shader, nir_var_shader_out,
|
||||
glsl_float_type(), "gl_PointSize");
|
||||
out->data.location = VARYING_SLOT_PSIZ;
|
||||
if (!out) {
|
||||
out = nir_variable_create(shader, nir_var_shader_out,
|
||||
glsl_float_type(), "gl_PointSize");
|
||||
out->data.location = VARYING_SLOT_PSIZ;
|
||||
}
|
||||
|
||||
nir_copy_var(&b, out, in);
|
||||
|
||||
|
|
@ -65,5 +68,16 @@ void
|
|||
nir_lower_point_size_mov(nir_shader *shader,
|
||||
const gl_state_index16 *pointsize_state_tokens)
|
||||
{
|
||||
lower_impl(nir_shader_get_entrypoint(shader), pointsize_state_tokens);
|
||||
assert(shader->info.stage == MESA_SHADER_VERTEX);
|
||||
|
||||
nir_variable *out = NULL;
|
||||
nir_foreach_variable(var, &shader->outputs) {
|
||||
if (var->data.location == VARYING_SLOT_PSIZ) {
|
||||
out = var;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
lower_impl(nir_shader_get_entrypoint(shader), pointsize_state_tokens,
|
||||
out);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue