diff options
Diffstat (limited to 'src/gallium/auxiliary')
-rw-r--r-- | src/gallium/auxiliary/tgsi/tgsi_from_mesa.c | 82 | ||||
-rw-r--r-- | src/gallium/auxiliary/tgsi/tgsi_from_mesa.h | 3 |
2 files changed, 85 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_from_mesa.c b/src/gallium/auxiliary/tgsi/tgsi_from_mesa.c index 19384cf4b27..72fd5c91c52 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_from_mesa.c +++ b/src/gallium/auxiliary/tgsi/tgsi_from_mesa.c @@ -204,3 +204,85 @@ tgsi_get_gl_frag_result_semantic(gl_frag_result frag_result, assert(false); } } + +/** Map Mesa's SYSTEM_VALUE_x to TGSI_SEMANTIC_x */ +enum tgsi_semantic +tgsi_get_sysval_semantic(unsigned sysval) +{ + switch (sysval) { + /* Vertex shader */ + case SYSTEM_VALUE_VERTEX_ID: + return TGSI_SEMANTIC_VERTEXID; + case SYSTEM_VALUE_INSTANCE_ID: + return TGSI_SEMANTIC_INSTANCEID; + case SYSTEM_VALUE_VERTEX_ID_ZERO_BASE: + return TGSI_SEMANTIC_VERTEXID_NOBASE; + case SYSTEM_VALUE_BASE_VERTEX: + return TGSI_SEMANTIC_BASEVERTEX; + case SYSTEM_VALUE_BASE_INSTANCE: + return TGSI_SEMANTIC_BASEINSTANCE; + case SYSTEM_VALUE_DRAW_ID: + return TGSI_SEMANTIC_DRAWID; + + /* Geometry shader */ + case SYSTEM_VALUE_INVOCATION_ID: + return TGSI_SEMANTIC_INVOCATIONID; + + /* Fragment shader */ + case SYSTEM_VALUE_FRAG_COORD: + return TGSI_SEMANTIC_POSITION; + case SYSTEM_VALUE_POINT_COORD: + return TGSI_SEMANTIC_PCOORD; + case SYSTEM_VALUE_FRONT_FACE: + return TGSI_SEMANTIC_FACE; + case SYSTEM_VALUE_SAMPLE_ID: + return TGSI_SEMANTIC_SAMPLEID; + case SYSTEM_VALUE_SAMPLE_POS: + return TGSI_SEMANTIC_SAMPLEPOS; + case SYSTEM_VALUE_SAMPLE_MASK_IN: + return TGSI_SEMANTIC_SAMPLEMASK; + case SYSTEM_VALUE_HELPER_INVOCATION: + return TGSI_SEMANTIC_HELPER_INVOCATION; + + /* Tessellation shader */ + case SYSTEM_VALUE_TESS_COORD: + return TGSI_SEMANTIC_TESSCOORD; + case SYSTEM_VALUE_VERTICES_IN: + return TGSI_SEMANTIC_VERTICESIN; + case SYSTEM_VALUE_PRIMITIVE_ID: + return TGSI_SEMANTIC_PRIMID; + case SYSTEM_VALUE_TESS_LEVEL_OUTER: + return TGSI_SEMANTIC_TESSOUTER; + case SYSTEM_VALUE_TESS_LEVEL_INNER: + return TGSI_SEMANTIC_TESSINNER; + + /* Compute shader */ + case SYSTEM_VALUE_LOCAL_INVOCATION_ID: + return TGSI_SEMANTIC_THREAD_ID; + case SYSTEM_VALUE_WORK_GROUP_ID: + return TGSI_SEMANTIC_BLOCK_ID; + case SYSTEM_VALUE_NUM_WORK_GROUPS: + return TGSI_SEMANTIC_GRID_SIZE; + case SYSTEM_VALUE_LOCAL_GROUP_SIZE: + return TGSI_SEMANTIC_BLOCK_SIZE; + + /* ARB_shader_ballot */ + case SYSTEM_VALUE_SUBGROUP_SIZE: + return TGSI_SEMANTIC_SUBGROUP_SIZE; + case SYSTEM_VALUE_SUBGROUP_INVOCATION: + return TGSI_SEMANTIC_SUBGROUP_INVOCATION; + case SYSTEM_VALUE_SUBGROUP_EQ_MASK: + return TGSI_SEMANTIC_SUBGROUP_EQ_MASK; + case SYSTEM_VALUE_SUBGROUP_GE_MASK: + return TGSI_SEMANTIC_SUBGROUP_GE_MASK; + case SYSTEM_VALUE_SUBGROUP_GT_MASK: + return TGSI_SEMANTIC_SUBGROUP_GT_MASK; + case SYSTEM_VALUE_SUBGROUP_LE_MASK: + return TGSI_SEMANTIC_SUBGROUP_LE_MASK; + case SYSTEM_VALUE_SUBGROUP_LT_MASK: + return TGSI_SEMANTIC_SUBGROUP_LT_MASK; + + default: + unreachable("Unexpected system value to TGSI"); + } +} diff --git a/src/gallium/auxiliary/tgsi/tgsi_from_mesa.h b/src/gallium/auxiliary/tgsi/tgsi_from_mesa.h index b75f37fed2e..92f08e2211a 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_from_mesa.h +++ b/src/gallium/auxiliary/tgsi/tgsi_from_mesa.h @@ -52,6 +52,9 @@ tgsi_get_gl_frag_result_semantic(gl_frag_result frag_result, unsigned *semantic_name, unsigned *semantic_index); +enum tgsi_semantic +tgsi_get_sysval_semantic(unsigned sysval); + static inline enum pipe_shader_type pipe_shader_type_from_mesa(gl_shader_stage stage) { |