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:
@@ -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.
|
||||
|
||||
@@ -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) */
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user