intel/fs: Track instance id in gs_thread_payload
This change moves the instance id gs_thread_payload constructor and lowering code will simply use that. Also, this change takes the Xe2 register width in consideration that fixes a couple of tests involving geometry shaders with gl_InvocationID on Xe2. Signed-off-by: Sagar Ghuge <sagar.ghuge@intel.com> Reviewed-by: Caio Oliveira <caio.oliveira@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26960>
This commit is contained in:
@@ -122,6 +122,7 @@ struct gs_thread_payload : public thread_payload {
|
|||||||
|
|
||||||
fs_reg urb_handles;
|
fs_reg urb_handles;
|
||||||
fs_reg primitive_id;
|
fs_reg primitive_id;
|
||||||
|
fs_reg instance_id;
|
||||||
fs_reg icp_handle_start;
|
fs_reg icp_handle_start;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -220,11 +220,7 @@ emit_system_values_block(nir_to_brw_state &ntb, nir_block *block)
|
|||||||
assert(s.stage == MESA_SHADER_GEOMETRY);
|
assert(s.stage == MESA_SHADER_GEOMETRY);
|
||||||
reg = &ntb.system_values[SYSTEM_VALUE_INVOCATION_ID];
|
reg = &ntb.system_values[SYSTEM_VALUE_INVOCATION_ID];
|
||||||
if (reg->file == BAD_FILE) {
|
if (reg->file == BAD_FILE) {
|
||||||
const fs_builder abld = ntb.bld.annotate("gl_InvocationID", NULL);
|
*reg = s.gs_payload().instance_id;
|
||||||
fs_reg g1(retype(brw_vec8_grf(1, 0), BRW_REGISTER_TYPE_UD));
|
|
||||||
fs_reg iid = abld.vgrf(BRW_REGISTER_TYPE_UD, 1);
|
|
||||||
abld.SHR(iid, g1, brw_imm_ud(27u));
|
|
||||||
*reg = iid;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@@ -113,6 +113,11 @@ gs_thread_payload::gs_thread_payload(fs_visitor &v)
|
|||||||
urb_handles = bld.vgrf(BRW_REGISTER_TYPE_UD);
|
urb_handles = bld.vgrf(BRW_REGISTER_TYPE_UD);
|
||||||
bld.AND(urb_handles, brw_ud8_grf(r, 0),
|
bld.AND(urb_handles, brw_ud8_grf(r, 0),
|
||||||
v.devinfo->ver >= 20 ? brw_imm_ud(0xFFFFFF) : brw_imm_ud(0xFFFF));
|
v.devinfo->ver >= 20 ? brw_imm_ud(0xFFFFFF) : brw_imm_ud(0xFFFF));
|
||||||
|
|
||||||
|
/* R1: Instance ID stored in bits 31:27 */
|
||||||
|
instance_id = bld.vgrf(BRW_REGISTER_TYPE_UD);
|
||||||
|
bld.SHR(instance_id, brw_ud8_grf(r, 0), brw_imm_ud(27u));
|
||||||
|
|
||||||
r += reg_unit(v.devinfo);
|
r += reg_unit(v.devinfo);
|
||||||
|
|
||||||
if (gs_prog_data->include_primitive_id) {
|
if (gs_prog_data->include_primitive_id) {
|
||||||
|
Reference in New Issue
Block a user