diff --git a/src/intel/compiler/jay/jay_builder.h b/src/intel/compiler/jay/jay_builder.h index 2ee5fc03e92..83792e56370 100644 --- a/src/intel/compiler/jay/jay_builder.h +++ b/src/intel/compiler/jay/jay_builder.h @@ -453,6 +453,7 @@ struct jayb_send_params { bool check_tdr; bool uniform; bool bindless; + bool pure; }; static inline jay_inst * @@ -572,6 +573,7 @@ _jay_SEND(jay_builder *b, const struct jayb_send_params p) info->check_tdr = p.check_tdr; info->uniform = p.uniform; info->bindless = p.bindless; + info->pure = p.pure; info->ex_desc_imm = p.ex_desc_imm; info->ex_mlen = lens[2]; I->src[0] = jay_imm(((uint32_t) p.msg_desc) | diff --git a/src/intel/compiler/jay/jay_from_nir.c b/src/intel/compiler/jay/jay_from_nir.c index a3c2e6e18c5..98f4706ee54 100644 --- a/src/intel/compiler/jay/jay_from_nir.c +++ b/src/intel/compiler/jay/jay_from_nir.c @@ -1092,6 +1092,7 @@ jay_emit_mem_access(struct nir_to_jay_state *nj, nir_intrinsic_instr *intr) jay_SEND(b, .sfid = sfid, .msg_desc = desc, .srcs = srcs, .nr_srcs = jay_is_null(data) ? 1 : 2, .dst = tmp, .type = data_type, .src_type = { offset_type, data_type }, .uniform = uniform, + .pure = nir_intrinsic_can_reorder(intr), .bindless = surf_type == LSC_ADDR_SURFTYPE_BSS, .ex_desc = ex_desc, .ex_desc_imm = ex_desc_imm); @@ -2025,7 +2026,7 @@ jay_emit_texture(struct nir_to_jay_state *nj, nir_tex_instr *tex) .ex_desc = desc_ex_src, .header = header, .srcs = payload, .nr_srcs = n_sources, .type = JAY_TYPE_U32, .src_type = { src_type }, .dst = tmp, .uniform = payload_uniform, - .bindless = surface_bindless); + .bindless = surface_bindless, .pure = true); /* If we sampled into a temporary, copy out to the final */ if (residency) { diff --git a/src/intel/compiler/jay/jay_opcodes.py b/src/intel/compiler/jay/jay_opcodes.py index 479b21481c9..80bacd8442b 100644 --- a/src/intel/compiler/jay/jay_opcodes.py +++ b/src/intel/compiler/jay/jay_opcodes.py @@ -143,9 +143,11 @@ op('send', 4, None, Props.SIDE_EFFECTS, [ 'bool check_tdr', 'bool uniform', 'bool bindless', + 'bool pure', 'enum jay_type type_0', 'enum jay_type type_1', 'uint8_t ex_mlen', + 'bool pad[3]', 'uint32_t ex_desc_imm', ])