nir_lower_mem_access_bit_sizes: pass access to callback

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Georg Lehmann <dadschoorse@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31904>
This commit is contained in:
Rhys Perry 2024-10-22 12:21:09 +01:00 committed by Marge Bot
parent 61752152f7
commit 45c1280d2c
14 changed files with 27 additions and 15 deletions

View file

@ -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);

View file

@ -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 ||

View file

@ -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 */

View file

@ -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);

View file

@ -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));

View file

@ -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,

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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;

View file

@ -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;

View file

@ -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));

View file

@ -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));

View file

@ -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));