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 <timur.kristof@gmail.com> Tested-by: Andre Heider <a.heider@gmail.com> Tested-by: Rob Clark <robdclark@gmail.com> Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com> Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:

committed by
Eric Anholt

parent
2780a99ff8
commit
317f10bf40
@@ -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 {
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user