nak: Add enums for sysvals and attributes
It's much nicer to have a canonical place for all these things to live which gives them actual names. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
This commit is contained in:

committed by
Marge Bot

parent
a4c1ec3892
commit
d4d7f26151
@@ -221,7 +221,7 @@ static uint16_t
|
||||
nak_attribute_attr_addr(gl_vert_attrib attrib)
|
||||
{
|
||||
assert(attrib >= VERT_ATTRIB_GENERIC0);
|
||||
return 0x80 + (attrib - VERT_ATTRIB_GENERIC0) * 0x10;
|
||||
return NAK_ATTR_GENERIC_START + (attrib - VERT_ATTRIB_GENERIC0) * 0x10;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -250,20 +250,20 @@ static uint16_t
|
||||
nak_varying_attr_addr(gl_varying_slot slot)
|
||||
{
|
||||
if (slot >= VARYING_SLOT_PATCH0) {
|
||||
return 0x020 + (slot - VARYING_SLOT_PATCH0) * 0x10;
|
||||
return NAK_ATTR_PATCH_START + (slot - VARYING_SLOT_PATCH0) * 0x10;
|
||||
} else if (slot >= VARYING_SLOT_VAR0) {
|
||||
return 0x080 + (slot - VARYING_SLOT_VAR0) * 0x10;
|
||||
return NAK_ATTR_GENERIC_START + (slot - VARYING_SLOT_VAR0) * 0x10;
|
||||
} else {
|
||||
switch (slot) {
|
||||
case VARYING_SLOT_TESS_LEVEL_OUTER: return 0x000;
|
||||
case VARYING_SLOT_TESS_LEVEL_INNER: return 0x010;
|
||||
case VARYING_SLOT_PRIMITIVE_ID: return 0x060;
|
||||
case VARYING_SLOT_LAYER: return 0x064;
|
||||
case VARYING_SLOT_VIEWPORT: return 0x068;
|
||||
case VARYING_SLOT_PSIZ: return 0x06c;
|
||||
case VARYING_SLOT_POS: return 0x070;
|
||||
case VARYING_SLOT_CLIP_DIST0: return 0x2c0;
|
||||
case VARYING_SLOT_CLIP_DIST1: return 0x2d0;
|
||||
case VARYING_SLOT_TESS_LEVEL_OUTER: return NAK_ATTR_TESS_LOD;
|
||||
case VARYING_SLOT_TESS_LEVEL_INNER: return NAK_ATTR_TESS_INTERRIOR;
|
||||
case VARYING_SLOT_PRIMITIVE_ID: return NAK_ATTR_PRIMITIVE_ID;
|
||||
case VARYING_SLOT_LAYER: return NAK_ATTR_RT_ARRAY_INDEX;
|
||||
case VARYING_SLOT_VIEWPORT: return NAK_ATTR_VIEWPORT_INDEX;
|
||||
case VARYING_SLOT_PSIZ: return NAK_ATTR_POINT_SIZE;
|
||||
case VARYING_SLOT_POS: return NAK_ATTR_POSITION;
|
||||
case VARYING_SLOT_CLIP_DIST0: return NAK_ATTR_CLIP_CULL_DIST_0;
|
||||
case VARYING_SLOT_CLIP_DIST1: return NAK_ATTR_CLIP_CULL_DIST_4;
|
||||
default: unreachable("Invalid varying slot");
|
||||
}
|
||||
}
|
||||
@@ -273,12 +273,12 @@ static uint16_t
|
||||
nak_sysval_attr_addr(gl_system_value sysval)
|
||||
{
|
||||
switch (sysval) {
|
||||
case SYSTEM_VALUE_FRAG_COORD: return 0x070;
|
||||
case SYSTEM_VALUE_POINT_COORD: return 0x2e0;
|
||||
case SYSTEM_VALUE_TESS_COORD: return 0x2f0;
|
||||
case SYSTEM_VALUE_INSTANCE_ID: return 0x2f8;
|
||||
case SYSTEM_VALUE_VERTEX_ID: return 0x2fc;
|
||||
case SYSTEM_VALUE_FRONT_FACE: return 0x3fc;
|
||||
case SYSTEM_VALUE_FRAG_COORD: return NAK_ATTR_POSITION;
|
||||
case SYSTEM_VALUE_POINT_COORD: return NAK_ATTR_POINT_SPRITE;
|
||||
case SYSTEM_VALUE_TESS_COORD: return NAK_ATTR_TESS_COORD;
|
||||
case SYSTEM_VALUE_INSTANCE_ID: return NAK_ATTR_INSTANCE_ID;
|
||||
case SYSTEM_VALUE_VERTEX_ID: return NAK_ATTR_VERTEX_ID;
|
||||
case SYSTEM_VALUE_FRONT_FACE: return NAK_ATTR_FRONT_FACE;
|
||||
default: unreachable("Invalid system value");
|
||||
}
|
||||
}
|
||||
@@ -287,18 +287,18 @@ static uint8_t
|
||||
nak_sysval_sysval_idx(gl_system_value sysval)
|
||||
{
|
||||
switch (sysval) {
|
||||
case SYSTEM_VALUE_SUBGROUP_INVOCATION: return 0x00;
|
||||
case SYSTEM_VALUE_VERTICES_IN: return 0x10;
|
||||
case SYSTEM_VALUE_INVOCATION_ID: return 0x11;
|
||||
case SYSTEM_VALUE_HELPER_INVOCATION: return 0x13;
|
||||
case SYSTEM_VALUE_LOCAL_INVOCATION_INDEX: return 0x20;
|
||||
case SYSTEM_VALUE_LOCAL_INVOCATION_ID: return 0x21;
|
||||
case SYSTEM_VALUE_WORKGROUP_ID: return 0x25;
|
||||
case SYSTEM_VALUE_SUBGROUP_EQ_MASK: return 0x38;
|
||||
case SYSTEM_VALUE_SUBGROUP_LT_MASK: return 0x39;
|
||||
case SYSTEM_VALUE_SUBGROUP_LE_MASK: return 0x3a;
|
||||
case SYSTEM_VALUE_SUBGROUP_GT_MASK: return 0x3b;
|
||||
case SYSTEM_VALUE_SUBGROUP_GE_MASK: return 0x3c;
|
||||
case SYSTEM_VALUE_SUBGROUP_INVOCATION: return NAK_SV_LANE_ID;
|
||||
case SYSTEM_VALUE_VERTICES_IN: return NAK_SV_VERTEX_COUNT;
|
||||
case SYSTEM_VALUE_INVOCATION_ID: return NAK_SV_INVOCATION_ID;
|
||||
case SYSTEM_VALUE_HELPER_INVOCATION: return NAK_SV_THREAD_KILL;
|
||||
case SYSTEM_VALUE_LOCAL_INVOCATION_INDEX: return NAK_SV_COMBINED_TID;
|
||||
case SYSTEM_VALUE_LOCAL_INVOCATION_ID: return NAK_SV_TID;
|
||||
case SYSTEM_VALUE_WORKGROUP_ID: return NAK_SV_CTAID;
|
||||
case SYSTEM_VALUE_SUBGROUP_EQ_MASK: return NAK_SV_LANEMASK_EQ;
|
||||
case SYSTEM_VALUE_SUBGROUP_LT_MASK: return NAK_SV_LANEMASK_LT;
|
||||
case SYSTEM_VALUE_SUBGROUP_LE_MASK: return NAK_SV_LANEMASK_LE;
|
||||
case SYSTEM_VALUE_SUBGROUP_GT_MASK: return NAK_SV_LANEMASK_GT;
|
||||
case SYSTEM_VALUE_SUBGROUP_GE_MASK: return NAK_SV_LANEMASK_GE;
|
||||
default: unreachable("Invalid system value");
|
||||
}
|
||||
}
|
||||
@@ -604,15 +604,13 @@ nak_nir_lower_system_value_instr(nir_builder *b, nir_instr *instr, void *data)
|
||||
}
|
||||
|
||||
case nir_intrinsic_is_helper_invocation: {
|
||||
const uint32_t idx =
|
||||
nak_sysval_sysval_idx(SYSTEM_VALUE_HELPER_INVOCATION);
|
||||
/* Unlike load_helper_invocation, this one isn't re-orderable */
|
||||
val = nir_load_sysval_nv(b, 32, .base = idx);
|
||||
val = nir_load_sysval_nv(b, 32, .base = NAK_SV_THREAD_KILL);
|
||||
break;
|
||||
}
|
||||
|
||||
case nir_intrinsic_shader_clock:
|
||||
val = nir_load_sysval_nv(b, 64, .base = 0x50);
|
||||
val = nir_load_sysval_nv(b, 64, .base = NAK_SV_CLOCK);
|
||||
val = nir_unpack_64_2x32(b, val);
|
||||
break;
|
||||
|
||||
|
@@ -22,6 +22,82 @@ struct nak_compiler {
|
||||
struct nir_shader_compiler_options nir_options;
|
||||
};
|
||||
|
||||
enum PACKED nak_attr {
|
||||
/* System values A */
|
||||
NAK_ATTR_TESS_LOD_LEFT = 0x000,
|
||||
NAK_ATTR_TESS_LOD_RIGHT = 0x004,
|
||||
NAK_ATTR_TESS_LOD_BOTTOM = 0x008,
|
||||
NAK_ATTR_TESS_LOD_TOP = 0x00c,
|
||||
NAK_ATTR_TESS_LOD = NAK_ATTR_TESS_LOD_LEFT,
|
||||
NAK_ATTR_TESS_INTERRIOR_U = 0x010,
|
||||
NAK_ATTR_TESS_INTERRIOR_V = 0x014,
|
||||
NAK_ATTR_TESS_INTERRIOR = NAK_ATTR_TESS_INTERRIOR_U,
|
||||
|
||||
/* Patch attributes */
|
||||
NAK_ATTR_PATCH_START = 0x020,
|
||||
|
||||
/* System values B */
|
||||
NAK_ATTR_PRIMITIVE_ID = 0x060,
|
||||
NAK_ATTR_RT_ARRAY_INDEX = 0x064,
|
||||
NAK_ATTR_VIEWPORT_INDEX = 0x068,
|
||||
NAK_ATTR_POINT_SIZE = 0x06c,
|
||||
NAK_ATTR_POSITION_X = 0x070,
|
||||
NAK_ATTR_POSITION_Y = 0x074,
|
||||
NAK_ATTR_POSITION_Z = 0x078,
|
||||
NAK_ATTR_POSITION_W = 0x07c,
|
||||
NAK_ATTR_POSITION = NAK_ATTR_POSITION_X,
|
||||
|
||||
/* Generic attributes */
|
||||
NAK_ATTR_GENERIC_START = 0x080,
|
||||
|
||||
/* System values C */
|
||||
NAK_ATTR_CLIP_CULL_DIST_0 = 0x2c0,
|
||||
NAK_ATTR_CLIP_CULL_DIST_1 = 0x2c4,
|
||||
NAK_ATTR_CLIP_CULL_DIST_2 = 0x2c8,
|
||||
NAK_ATTR_CLIP_CULL_DIST_3 = 0x2cc,
|
||||
NAK_ATTR_CLIP_CULL_DIST_4 = 0x2d0,
|
||||
NAK_ATTR_CLIP_CULL_DIST_5 = 0x2d4,
|
||||
NAK_ATTR_CLIP_CULL_DIST_6 = 0x2d8,
|
||||
NAK_ATTR_CLIP_CULL_DIST_7 = 0x2dd,
|
||||
NAK_ATTR_CLIP_CULL_DIST = NAK_ATTR_CLIP_CULL_DIST_0,
|
||||
NAK_ATTR_POINT_SPRITE_S = 0x2e0,
|
||||
NAK_ATTR_POINT_SPRITE_T = 0x2e4,
|
||||
NAK_ATTR_POINT_SPRITE = NAK_ATTR_POINT_SPRITE_S,
|
||||
NAK_ATTR_FOG_COORD = 0x2e8,
|
||||
/* Reserved 0x2ec */
|
||||
NAK_ATTR_TESS_COORD_X = 0x2f0,
|
||||
NAK_ATTR_TESS_COORD_Y = 0x2f4,
|
||||
NAK_ATTR_TESS_COORD = NAK_ATTR_TESS_COORD_X,
|
||||
NAK_ATTR_INSTANCE_ID = 0x2f8,
|
||||
NAK_ATTR_VERTEX_ID = 0x2fc,
|
||||
|
||||
/* Not in SPH */
|
||||
NAK_ATTR_FRONT_FACE = 0x3fc,
|
||||
};
|
||||
|
||||
enum PACKED nak_sv {
|
||||
NAK_SV_LANE_ID = 0x00,
|
||||
NAK_SV_VERTEX_COUNT = 0x10,
|
||||
NAK_SV_INVOCATION_ID = 0x11,
|
||||
NAK_SV_THREAD_KILL = 0x13,
|
||||
NAK_SV_INVOCATION_INFO = 0x1d,
|
||||
NAK_SV_COMBINED_TID = 0x20,
|
||||
NAK_SV_TID_X = 0x21,
|
||||
NAK_SV_TID_Y = 0x22,
|
||||
NAK_SV_TID_Z = 0x23,
|
||||
NAK_SV_TID = NAK_SV_TID_X,
|
||||
NAK_SV_CTAID_X = 0x25,
|
||||
NAK_SV_CTAID_Y = 0x26,
|
||||
NAK_SV_CTAID_Z = 0x27,
|
||||
NAK_SV_CTAID = NAK_SV_CTAID_X,
|
||||
NAK_SV_LANEMASK_EQ = 0x38,
|
||||
NAK_SV_LANEMASK_LT = 0x39,
|
||||
NAK_SV_LANEMASK_LE = 0x3a,
|
||||
NAK_SV_LANEMASK_GT = 0x3b,
|
||||
NAK_SV_LANEMASK_GE = 0x3c,
|
||||
NAK_SV_CLOCK = 0x50,
|
||||
};
|
||||
|
||||
struct nvk_xfb_info
|
||||
nak_xfb_from_nir(const struct nir_xfb_info *nir_xfb);
|
||||
|
||||
|
Reference in New Issue
Block a user