nv50/ir: convert system values to gl_system_value

Signed-off-by: Karol Herbst <git@karolherbst.de>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24447>
This commit is contained in:
Karol Herbst
2023-08-02 15:34:29 +02:00
parent f5c41c4b78
commit 286e58b8d8
6 changed files with 19 additions and 31 deletions
@@ -64,14 +64,14 @@ nv50_vertprog_assign_slots(struct nv50_ir_prog_info_out *info)
for (i = 0; i < info->numSysVals; ++i) {
switch (info->sv[i].sn) {
case TGSI_SEMANTIC_INSTANCEID:
case SYSTEM_VALUE_INSTANCE_ID:
prog->vp.attrs[2] |= NV50_3D_VP_GP_BUILTIN_ATTR_EN_INSTANCE_ID;
continue;
case TGSI_SEMANTIC_VERTEXID:
case SYSTEM_VALUE_VERTEX_ID:
prog->vp.attrs[2] |= NV50_3D_VP_GP_BUILTIN_ATTR_EN_VERTEX_ID;
prog->vp.attrs[2] |= NV50_3D_VP_GP_BUILTIN_ATTR_EN_VERTEX_ID_DRAW_ARRAYS_ADD_START;
continue;
case TGSI_SEMANTIC_PRIMID:
case SYSTEM_VALUE_PRIMITIVE_ID:
prog->vp.attrs[2] |= NV50_3D_VP_GP_BUILTIN_ATTR_EN_PRIMITIVE_ID;
break;
default:
@@ -242,16 +242,16 @@ nvc0_vtgp_gen_header(struct nvc0_program *vp, struct nv50_ir_prog_info_out *info
for (i = 0; i < info->numSysVals; ++i) {
switch (info->sv[i].sn) {
case TGSI_SEMANTIC_PRIMID:
case SYSTEM_VALUE_PRIMITIVE_ID:
vp->hdr[5] |= 1 << 24;
break;
case TGSI_SEMANTIC_INSTANCEID:
case SYSTEM_VALUE_INSTANCE_ID:
vp->hdr[10] |= 1 << 30;
break;
case TGSI_SEMANTIC_VERTEXID:
case SYSTEM_VALUE_VERTEX_ID:
vp->hdr[10] |= 1 << 31;
break;
case TGSI_SEMANTIC_TESSCOORD:
case SYSTEM_VALUE_TESS_COORD:
/* We don't have the mask, nor the slots populated. While this could
* be achieved, the vast majority of the time if either of the coords
* are read, then both will be read.
+2 -1
View File
@@ -23,6 +23,7 @@
#ifndef __NV50_IR_DRIVER_H__
#define __NV50_IR_DRIVER_H__
#include "compiler/shader_enums.h"
#include "util/macros.h"
#include "util/blob.h"
@@ -57,7 +58,7 @@ struct nv50_ir_varying
struct nv50_ir_sysval
{
uint8_t sn; /* TGSI semantic name */
gl_system_value sn;
uint8_t slot[4]; /* for nv50: native slots for xyzw (addresses in 32-bit words) */
};
+1 -14
View File
@@ -904,20 +904,6 @@ bool Converter::assignSlots() {
uint8_t i;
BITSET_FOREACH_SET(i, nir->info.system_values_read, SYSTEM_VALUE_MAX) {
switch (i) {
case SYSTEM_VALUE_BARYCENTRIC_LINEAR_CENTROID:
case SYSTEM_VALUE_BARYCENTRIC_LINEAR_PIXEL:
case SYSTEM_VALUE_BARYCENTRIC_LINEAR_SAMPLE:
case SYSTEM_VALUE_BARYCENTRIC_PERSP_CENTROID:
case SYSTEM_VALUE_BARYCENTRIC_PERSP_PIXEL:
case SYSTEM_VALUE_BARYCENTRIC_PERSP_SAMPLE:
case SYSTEM_VALUE_BASE_GLOBAL_INVOCATION_ID:
continue;
default:
info_out->sv[info_out->numSysVals].sn = tgsi_get_sysval_semantic(i);
break;
}
switch (i) {
case SYSTEM_VALUE_VERTEX_ID:
info_out->io.vertexId = info_out->numSysVals;
@@ -929,6 +915,7 @@ bool Converter::assignSlots() {
break;
}
info_out->sv[info_out->numSysVals].sn = (gl_system_value)i;
info_out->numSysVals += 1;
}
+5 -5
View File
@@ -601,15 +601,15 @@ recordLocationSysVal(uint16_t *locs, uint8_t *masks,
uint16_t addr = var->slot[0] * 4;
switch (var->sn) {
case TGSI_SEMANTIC_POSITION: locs[SV_POSITION] = addr; break;
case TGSI_SEMANTIC_INSTANCEID: locs[SV_INSTANCE_ID] = addr; break;
case TGSI_SEMANTIC_VERTEXID: locs[SV_VERTEX_ID] = addr; break;
case TGSI_SEMANTIC_PRIMID: locs[SV_PRIMITIVE_ID] = addr; break;
case SYSTEM_VALUE_FRAG_COORD: locs[SV_POSITION] = addr; break;
case SYSTEM_VALUE_INSTANCE_ID: locs[SV_INSTANCE_ID] = addr; break;
case SYSTEM_VALUE_VERTEX_ID: locs[SV_VERTEX_ID] = addr; break;
case SYSTEM_VALUE_PRIMITIVE_ID: locs[SV_PRIMITIVE_ID] = addr; break;
default:
break;
}
// TODO is this even hit?
if (var->sn == TGSI_SEMANTIC_POSITION && masks)
if (var->sn == SYSTEM_VALUE_FRAG_COORD && masks)
masks[0] = 0;
}
+4 -4
View File
@@ -751,16 +751,16 @@ nvk_vtgp_gen_header(struct nvk_shader *vs, struct nv50_ir_prog_info_out *info)
for (i = 0; i < info->numSysVals; ++i) {
switch (info->sv[i].sn) {
case TGSI_SEMANTIC_PRIMID:
case SYSTEM_VALUE_PRIMITIVE_ID:
vs->hdr[5] |= 1 << 24;
break;
case TGSI_SEMANTIC_INSTANCEID:
case SYSTEM_VALUE_INSTANCE_ID:
vs->hdr[10] |= 1 << 30;
break;
case TGSI_SEMANTIC_VERTEXID:
case SYSTEM_VALUE_VERTEX_ID:
vs->hdr[10] |= 1 << 31;
break;
case TGSI_SEMANTIC_TESSCOORD:
case SYSTEM_VALUE_TESS_COORD:
/* We don't have the mask, nor the slots populated. While this could
* be achieved, the vast majority of the time if either of the coords
* are read, then both will be read.