From: Timur Kristóf Date: Tue, 5 Feb 2019 17:08:24 +0000 (+0100) Subject: nir: Add ability for shaders to use window space coordinates. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=317f10bf404b562e1dda79c0636aee86beeccc2f;p=mesa.git nir: Add ability for shaders to use window space coordinates. This patch adds a shader_info field that tells the driver to use window space coordinates for a given vertex shader. It also enables this feature in radeonsi (the only NIR-capable driver that supported it in TGSI), and makes tgsi_to_nir aware of it. Signed-Off-By: Timur Kristóf Tested-by: Andre Heider Tested-by: Rob Clark Reviewed-by: Timothy Arceri Reviewed-by: Eric Anholt --- diff --git a/src/compiler/shader_info.h b/src/compiler/shader_info.h index 8fbdfab1a8e..5b229130a11 100644 --- a/src/compiler/shader_info.h +++ b/src/compiler/shader_info.h @@ -149,6 +149,9 @@ typedef struct shader_info { struct { /* Which inputs are doubles */ uint64_t double_inputs; + + /* True if the shader writes position in window space coordinates pre-transform */ + bool window_space_position; } vs; struct { diff --git a/src/gallium/auxiliary/nir/tgsi_to_nir.c b/src/gallium/auxiliary/nir/tgsi_to_nir.c index 4f30714a746..cee98444290 100644 --- a/src/gallium/auxiliary/nir/tgsi_to_nir.c +++ b/src/gallium/auxiliary/nir/tgsi_to_nir.c @@ -1805,6 +1805,8 @@ tgsi_to_nir(const void *tgsi_tokens, s->num_uniforms = scan.const_file_max[0] + 1; s->num_outputs = scan.file_max[TGSI_FILE_OUTPUT] + 1; + s->info.vs.window_space_position = scan.properties[TGSI_PROPERTY_VS_WINDOW_SPACE_POSITION]; + c->inputs = rzalloc_array(c, struct nir_variable *, s->num_inputs); c->outputs = rzalloc_array(c, struct nir_variable *, s->num_outputs); diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c index 812c2172366..5e29c8f4ccd 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -343,6 +343,9 @@ void si_nir_scan_shader(const struct nir_shader *nir, info->properties[TGSI_PROPERTY_NEXT_SHADER] = pipe_shader_type_from_mesa(nir->info.next_stage); + info->properties[TGSI_PROPERTY_VS_WINDOW_SPACE_POSITION] = + nir->info.vs.window_space_position; + if (nir->info.stage == MESA_SHADER_TESS_CTRL) { info->properties[TGSI_PROPERTY_TCS_VERTICES_OUT] = nir->info.tess.tcs_vertices_out;