diff --git a/src/asahi/compiler/agx_compile.c b/src/asahi/compiler/agx_compile.c index 83ac09347b3..71811c1c339 100644 --- a/src/asahi/compiler/agx_compile.c +++ b/src/asahi/compiler/agx_compile.c @@ -3235,7 +3235,7 @@ static nir_mem_access_size_align mem_access_size_align_cb(nir_intrinsic_op intrin, uint8_t bytes, uint8_t bit_size, uint32_t align, uint32_t align_offset, bool offset_is_const, - const void *cb_data) + enum gl_access_qualifier access, const void *cb_data) { align = nir_combined_align(align, align_offset); diff --git a/src/broadcom/compiler/v3d_nir_lower_load_store_bitsize.c b/src/broadcom/compiler/v3d_nir_lower_load_store_bitsize.c index aa8fc8aec07..beb07a4a10b 100644 --- a/src/broadcom/compiler/v3d_nir_lower_load_store_bitsize.c +++ b/src/broadcom/compiler/v3d_nir_lower_load_store_bitsize.c @@ -129,7 +129,7 @@ static nir_mem_access_size_align v3d_size_align_cb(nir_intrinsic_op intrin, uint8_t bytes, uint8_t input_bit_size, uint32_t align, uint32_t align_offset, bool offset_is_const, - const void *cb_data) + enum gl_access_qualifier access, const void *cb_data) { /* we only support single component 32 bit load/stores on scratch */ if (intrin == nir_intrinsic_load_scratch || diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 2e8994b2e02..58af511c087 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -5913,6 +5913,7 @@ typedef nir_mem_access_size_align uint32_t align_mul, uint32_t align_offset, bool offset_is_const, + enum gl_access_qualifier, const void *cb_data); /* clang-format on */ diff --git a/src/compiler/nir/nir_lower_mem_access_bit_sizes.c b/src/compiler/nir/nir_lower_mem_access_bit_sizes.c index 71e1fbd63af..d58c07d5087 100644 --- a/src/compiler/nir/nir_lower_mem_access_bit_sizes.c +++ b/src/compiler/nir/nir_lower_mem_access_bit_sizes.c @@ -159,6 +159,8 @@ lower_mem_load(nir_builder *b, nir_intrinsic_instr *intrin, const uint32_t align_mul = nir_intrinsic_align_mul(intrin); const uint32_t whole_align_offset = nir_intrinsic_align_offset(intrin); const uint32_t whole_align = nir_intrinsic_align(intrin); + const enum gl_access_qualifier access = + nir_intrinsic_has_access(intrin) ? nir_intrinsic_access(intrin) : 0; nir_src *offset_src = nir_get_io_offset_src(intrin); const bool offset_is_const = nir_src_is_const(*offset_src); nir_def *offset = offset_src->ssa; @@ -166,7 +168,7 @@ lower_mem_load(nir_builder *b, nir_intrinsic_instr *intrin, nir_mem_access_size_align requested = mem_access_size_align_cb(intrin->intrinsic, bytes_read, bit_size, align_mul, whole_align_offset, - offset_is_const, cb_data); + offset_is_const, access, cb_data); assert(requested.num_components > 0); assert(requested.bit_size > 0); @@ -191,7 +193,7 @@ lower_mem_load(nir_builder *b, nir_intrinsic_instr *intrin, nir_combined_align(align_mul, chunk_align_offset); requested = mem_access_size_align_cb(intrin->intrinsic, bytes_left, bit_size, align_mul, chunk_align_offset, - offset_is_const, cb_data); + offset_is_const, access, cb_data); unsigned chunk_bytes; assert(requested.num_components > 0); @@ -303,6 +305,8 @@ lower_mem_store(nir_builder *b, nir_intrinsic_instr *intrin, const uint32_t align_mul = nir_intrinsic_align_mul(intrin); const uint32_t whole_align_offset = nir_intrinsic_align_offset(intrin); const uint32_t whole_align = nir_intrinsic_align(intrin); + const enum gl_access_qualifier access = + nir_intrinsic_has_access(intrin) ? nir_intrinsic_access(intrin) : 0; nir_src *offset_src = nir_get_io_offset_src(intrin); const bool offset_is_const = nir_src_is_const(*offset_src); nir_def *offset = offset_src->ssa; @@ -313,7 +317,7 @@ lower_mem_store(nir_builder *b, nir_intrinsic_instr *intrin, nir_mem_access_size_align requested = mem_access_size_align_cb(intrin->intrinsic, bytes_written, bit_size, align_mul, whole_align_offset, - offset_is_const, cb_data); + offset_is_const, access, cb_data); assert(requested.num_components > 0); assert(requested.bit_size > 0); @@ -353,7 +357,7 @@ lower_mem_store(nir_builder *b, nir_intrinsic_instr *intrin, requested = mem_access_size_align_cb(intrin->intrinsic, max_chunk_bytes, bit_size, align_mul, chunk_align_offset, - offset_is_const, cb_data); + offset_is_const, access, cb_data); uint32_t chunk_bytes = requested.num_components * (requested.bit_size / 8); diff --git a/src/freedreno/ir3/ir3_nir.c b/src/freedreno/ir3/ir3_nir.c index c6c37f0ccce..52d5e595f52 100644 --- a/src/freedreno/ir3/ir3_nir.c +++ b/src/freedreno/ir3/ir3_nir.c @@ -968,7 +968,7 @@ nir_mem_access_size_align ir3_mem_access_size_align(nir_intrinsic_op intrin, uint8_t bytes, uint8_t bit_size, uint32_t align, uint32_t align_offset, bool offset_is_const, - const void *cb_data) + enum gl_access_qualifier access, const void *cb_data) { align = nir_combined_align(align, align_offset); assert(util_is_power_of_two_nonzero(align)); diff --git a/src/freedreno/ir3/ir3_nir.h b/src/freedreno/ir3/ir3_nir.h index 86b06fe7498..7f0fe6db1d6 100644 --- a/src/freedreno/ir3/ir3_nir.h +++ b/src/freedreno/ir3/ir3_nir.h @@ -55,7 +55,8 @@ bool ir3_nir_lower_64b_regs(nir_shader *shader); nir_mem_access_size_align ir3_mem_access_size_align( nir_intrinsic_op intrin, uint8_t bytes, uint8_t bit_size, uint32_t align, - uint32_t align_offset, bool offset_is_const, const void *cb_data); + uint32_t align_offset, bool offset_is_const, enum gl_access_qualifier access, + const void *cb_data); bool ir3_nir_opt_branch_and_or_not(nir_shader *nir); bool ir3_optimize_loop(struct ir3_compiler *compiler, diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index 8582ec01c28..a8ecec838d7 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -5716,7 +5716,7 @@ static nir_mem_access_size_align mem_access_size_align_cb(nir_intrinsic_op intrin, uint8_t bytes, uint8_t bit_size, uint32_t align, uint32_t align_offset, bool offset_is_const, - const void *cb_data) + enum gl_access_qualifier access, const void *cb_data) { align = nir_combined_align(align, align_offset); @@ -5744,7 +5744,7 @@ static nir_mem_access_size_align mem_access_scratch_size_align_cb(nir_intrinsic_op intrin, uint8_t bytes, uint8_t bit_size, uint32_t align, uint32_t align_offset, bool offset_is_const, - const void *cb_data) + enum gl_access_qualifier access, const void *cb_data) { bit_size = *(const uint8_t *)cb_data; align = nir_combined_align(align, align_offset); diff --git a/src/intel/compiler/brw_nir.c b/src/intel/compiler/brw_nir.c index 813ccfb9fa6..4561dc257b8 100644 --- a/src/intel/compiler/brw_nir.c +++ b/src/intel/compiler/brw_nir.c @@ -1498,7 +1498,8 @@ bool combine_all_memory_barriers(nir_intrinsic_instr *a, static nir_mem_access_size_align get_mem_access_size_align(nir_intrinsic_op intrin, uint8_t bytes, uint8_t bit_size, uint32_t align_mul, uint32_t align_offset, - bool offset_is_const, const void *cb_data) + bool offset_is_const, enum gl_access_qualifier access, + const void *cb_data) { const uint32_t align = nir_combined_align(align_mul, align_offset); diff --git a/src/intel/compiler/elk/elk_nir.c b/src/intel/compiler/elk/elk_nir.c index 0f396f298ce..dcffad45bbc 100644 --- a/src/intel/compiler/elk/elk_nir.c +++ b/src/intel/compiler/elk/elk_nir.c @@ -1215,7 +1215,8 @@ bool combine_all_memory_barriers(nir_intrinsic_instr *a, static nir_mem_access_size_align get_mem_access_size_align(nir_intrinsic_op intrin, uint8_t bytes, uint8_t bit_size, uint32_t align_mul, uint32_t align_offset, - bool offset_is_const, const void *cb_data) + bool offset_is_const, enum gl_access_qualifier access, + const void *cb_data) { const uint32_t align = nir_combined_align(align_mul, align_offset); diff --git a/src/microsoft/compiler/nir_to_dxil.c b/src/microsoft/compiler/nir_to_dxil.c index 674d35bbcfc..4ba3468df4c 100644 --- a/src/microsoft/compiler/nir_to_dxil.c +++ b/src/microsoft/compiler/nir_to_dxil.c @@ -6247,6 +6247,7 @@ lower_mem_access_bit_sizes_cb(nir_intrinsic_op intrin, uint32_t align_mul, uint32_t align_offset, bool offset_is_const, + enum gl_access_qualifier access, const void *cb_data) { const struct lower_mem_bit_sizes_data *data = cb_data; diff --git a/src/nouveau/codegen/nv50_ir_from_nir.cpp b/src/nouveau/codegen/nv50_ir_from_nir.cpp index 38467379127..85276a8b523 100644 --- a/src/nouveau/codegen/nv50_ir_from_nir.cpp +++ b/src/nouveau/codegen/nv50_ir_from_nir.cpp @@ -149,6 +149,7 @@ private: uint32_t align_mul, uint32_t align_offset, bool offset_is_const, + enum gl_access_qualifier access, const void *cb_data); bool isFloatType(nir_alu_type); @@ -1407,6 +1408,7 @@ Converter::getMemAccessSizeAlign(nir_intrinsic_op intrin, uint32_t align_mul, uint32_t align_offset, bool offset_is_const, + enum gl_access_qualifier access, const void *cb_data) { const Converter* converter = (Converter*) cb_data; diff --git a/src/nouveau/compiler/nak_nir.c b/src/nouveau/compiler/nak_nir.c index fbb2f454f31..8d359a9b423 100644 --- a/src/nouveau/compiler/nak_nir.c +++ b/src/nouveau/compiler/nak_nir.c @@ -825,7 +825,8 @@ static nir_mem_access_size_align nak_mem_access_size_align(nir_intrinsic_op intrin, uint8_t bytes, uint8_t bit_size, uint32_t align_mul, uint32_t align_offset, - bool offset_is_const, const void *cb_data) + bool offset_is_const, enum gl_access_qualifier access, + const void *cb_data) { const uint32_t align = nir_combined_align(align_mul, align_offset); assert(util_is_power_of_two_nonzero(align)); diff --git a/src/panfrost/compiler/bifrost_compile.c b/src/panfrost/compiler/bifrost_compile.c index b82ae8990a9..edd5501b997 100644 --- a/src/panfrost/compiler/bifrost_compile.c +++ b/src/panfrost/compiler/bifrost_compile.c @@ -4721,7 +4721,7 @@ static nir_mem_access_size_align mem_access_size_align_cb(nir_intrinsic_op intrin, uint8_t bytes, uint8_t bit_size, uint32_t align_mul, uint32_t align_offset, bool offset_is_const, - const void *cb_data) + enum gl_access_qualifier access, const void *cb_data) { uint32_t align = nir_combined_align(align_mul, align_offset); assert(util_is_power_of_two_nonzero(align)); diff --git a/src/panfrost/midgard/midgard_compile.c b/src/panfrost/midgard/midgard_compile.c index 6579fd3f311..269b85a24be 100644 --- a/src/panfrost/midgard/midgard_compile.c +++ b/src/panfrost/midgard/midgard_compile.c @@ -327,7 +327,7 @@ static nir_mem_access_size_align mem_access_size_align_cb(nir_intrinsic_op intrin, uint8_t bytes, uint8_t bit_size, uint32_t align_mul, uint32_t align_offset, bool offset_is_const, - const void *cb_data) + enum gl_access_qualifier access, const void *cb_data) { uint32_t align = nir_combined_align(align_mul, align_offset); assert(util_is_power_of_two_nonzero(align));