diff --git a/src/nouveau/compiler/nak.h b/src/nouveau/compiler/nak.h index d77ef9d9e11..83f8571fb84 100644 --- a/src/nouveau/compiler/nak.h +++ b/src/nouveau/compiler/nak.h @@ -183,9 +183,12 @@ struct nak_shader_info { struct { bool writes_layer; bool writes_point_size; + bool writes_vprs_table_index; uint8_t clip_enable; uint8_t cull_enable; + uint8_t _pad[3]; + struct nak_xfb_info xfb; } vtg; diff --git a/src/nouveau/compiler/nak/api.rs b/src/nouveau/compiler/nak/api.rs index 3f9abe99f09..c146b83dd97 100644 --- a/src/nouveau/compiler/nak/api.rs +++ b/src/nouveau/compiler/nak/api.rs @@ -290,6 +290,8 @@ impl ShaderBin { ShaderIoInfo::Vtg(io) => nak_shader_info__bindgen_ty_2 { writes_layer: io.attr_written(NAK_ATTR_RT_ARRAY_INDEX), writes_point_size: io.attr_written(NAK_ATTR_POINT_SIZE), + writes_vprs_table_index: io + .attr_written(NAK_ATTR_VPRS_TABLE_INDEX), clip_enable: io.clip_enable.try_into().unwrap(), cull_enable: io.cull_enable.try_into().unwrap(), xfb: if let Some(xfb) = &io.xfb { @@ -297,6 +299,7 @@ impl ShaderBin { } else { unsafe { std::mem::zeroed() } }, + _pad: Default::default(), }, _ => unsafe { std::mem::zeroed() }, }, diff --git a/src/nouveau/compiler/nak_nir.c b/src/nouveau/compiler/nak_nir.c index cac815b96c1..098a60d4ece 100644 --- a/src/nouveau/compiler/nak_nir.c +++ b/src/nouveau/compiler/nak_nir.c @@ -351,6 +351,9 @@ nak_varying_attr_addr(const struct nak_compiler *nak, gl_varying_slot slot) 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; + case VARYING_SLOT_PRIMITIVE_SHADING_RATE: + return nak->sm >= 86 ? NAK_ATTR_VPRS_TABLE_INDEX + : NAK_ATTR_VIEWPORT_INDEX; default: unreachable("Invalid varying slot"); } } diff --git a/src/nouveau/compiler/nak_private.h b/src/nouveau/compiler/nak_private.h index 57211f537fe..6407b542e19 100644 --- a/src/nouveau/compiler/nak_private.h +++ b/src/nouveau/compiler/nak_private.h @@ -37,6 +37,9 @@ enum ENUM_PACKED nak_attr { /* Patch attributes */ NAK_ATTR_PATCH_START = 0x020, + /* System values B? */ + NAK_ATTR_VPRS_TABLE_INDEX = 0x5c, + /* System values B */ NAK_ATTR_PRIMITIVE_ID = 0x060, NAK_ATTR_RT_ARRAY_INDEX = 0x064,