mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 15:38:09 +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>
This commit is contained in:
parent
57e4d0aa1c
commit
e61a98877c
1 changed files with 20 additions and 6 deletions
|
|
@ -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