diff options
author | Marek Olšák <[email protected]> | 2015-08-10 01:50:11 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2015-08-13 01:25:26 +0200 |
commit | e7a52a5cb810de49a8282cb9f9caea5d554c3348 (patch) | |
tree | c2a208dbe6ef29c22eff4acfd53103bd33c13e07 /src/gallium/drivers/radeonsi/si_shader.h | |
parent | 8e11be0ddb0920633c5fab8d6a6460b7591a2627 (diff) |
radeonsi: add support for gl_PrimitiveID in the fragment shader
It must be obtained from the VS.
The GS scenario A must be enabled for PrimID to be generated for the VS.
+ 4 piglits
Reviewed-by: Michel Dänzer <[email protected]>
Diffstat (limited to 'src/gallium/drivers/radeonsi/si_shader.h')
-rw-r--r-- | src/gallium/drivers/radeonsi/si_shader.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/gallium/drivers/radeonsi/si_shader.h b/src/gallium/drivers/radeonsi/si_shader.h index 82e9c915965..cd845c12e64 100644 --- a/src/gallium/drivers/radeonsi/si_shader.h +++ b/src/gallium/drivers/radeonsi/si_shader.h @@ -221,6 +221,7 @@ union si_shader_key { uint64_t es_enabled_outputs; unsigned as_es:1; /* export shader */ unsigned as_ls:1; /* local shader */ + unsigned export_prim_id; /* when PS needs it and GS is disabled */ } vs; struct { unsigned prim_mode:3; @@ -231,6 +232,7 @@ union si_shader_key { * This describes how outputs are laid out in memory. */ uint64_t es_enabled_outputs; unsigned as_es:1; /* export shader */ + unsigned export_prim_id; /* when PS needs it and GS is disabled */ } tes; /* tessellation evaluation shader */ }; @@ -289,6 +291,16 @@ static inline struct si_shader* si_get_vs_state(struct si_context *sctx) return sctx->vs_shader->current; } +static inline bool si_vs_exports_prim_id(struct si_shader *shader) +{ + if (shader->selector->type == PIPE_SHADER_VERTEX) + return shader->key.vs.export_prim_id; + else if (shader->selector->type == PIPE_SHADER_TESS_EVAL) + return shader->key.tes.export_prim_id; + else + return false; +} + /* radeonsi_shader.c */ int si_shader_create(struct si_screen *sscreen, LLVMTargetMachineRef tm, struct si_shader *shader); |