mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 21:50:12 +01:00
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:
parent
61752152f7
commit
45c1280d2c
14 changed files with 27 additions and 15 deletions
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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 ||
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue