aco/builder: use accessor functions instead of casting to subtypes
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28370>
This commit is contained in:

committed by
Marge Bot

parent
1187189235
commit
cd62f97719
@@ -630,7 +630,7 @@ formats = [(f if len(f) == 5 else f + ('',)) for f in formats]
|
|||||||
|
|
||||||
Result ${name}(${', '.join(args)})
|
Result ${name}(${', '.join(args)})
|
||||||
{
|
{
|
||||||
${struct} *instr = create_instruction<${struct}>(opcode, (Format)(${'|'.join('(int)Format::%s' % f.name for f in formats)}), ${num_operands}, ${num_definitions});
|
Instruction* instr = create_instruction<${struct}>(opcode, (Format)(${'|'.join('(int)Format::%s' % f.name for f in formats)}), ${num_operands}, ${num_definitions});
|
||||||
% for i in range(num_definitions):
|
% for i in range(num_definitions):
|
||||||
instr->definitions[${i}] = def${i};
|
instr->definitions[${i}] = def${i};
|
||||||
instr->definitions[${i}].setPrecise(is_precise);
|
instr->definitions[${i}].setPrecise(is_precise);
|
||||||
@@ -641,7 +641,7 @@ formats = [(f if len(f) == 5 else f + ('',)) for f in formats]
|
|||||||
% endfor
|
% endfor
|
||||||
% for f in formats:
|
% for f in formats:
|
||||||
% for dest, field_name in zip(f.get_builder_field_dests(), f.get_builder_field_names()):
|
% for dest, field_name in zip(f.get_builder_field_dests(), f.get_builder_field_names()):
|
||||||
instr->${dest} = ${field_name};
|
instr->${f.get_accessor()}().${dest} = ${field_name};
|
||||||
% endfor
|
% endfor
|
||||||
${f.get_builder_initialization(num_operands)}
|
${f.get_builder_initialization(num_operands)}
|
||||||
% endfor
|
% endfor
|
||||||
|
@@ -102,6 +102,18 @@ class Format(IntEnum):
|
|||||||
DPP16 = 1 << 13
|
DPP16 = 1 << 13
|
||||||
DPP8 = 1 << 14
|
DPP8 = 1 << 14
|
||||||
|
|
||||||
|
def get_accessor(self):
|
||||||
|
if self in [Format.VOP3, Format.VOP3P]:
|
||||||
|
return "valu"
|
||||||
|
elif self in [Format.SOPP, Format.SOPK]:
|
||||||
|
return "salu"
|
||||||
|
elif self in [Format.FLAT, Format.GLOBAL, Format.SCRATCH]:
|
||||||
|
return "flatlike"
|
||||||
|
elif self in [Format.PSEUDO_BRANCH, Format.PSEUDO_REDUCTION, Format.PSEUDO_BARRIER]:
|
||||||
|
return self.name.split("_")[-1].lower()
|
||||||
|
else:
|
||||||
|
return self.name.lower()
|
||||||
|
|
||||||
def get_builder_fields(self):
|
def get_builder_fields(self):
|
||||||
if self == Format.SOPK:
|
if self == Format.SOPK:
|
||||||
return [('uint32_t', 'imm', '0')]
|
return [('uint32_t', 'imm', '0')]
|
||||||
@@ -217,10 +229,12 @@ class Format(IntEnum):
|
|||||||
res = ''
|
res = ''
|
||||||
if self == Format.SDWA:
|
if self == Format.SDWA:
|
||||||
for i in range(min(num_operands, 2)):
|
for i in range(min(num_operands, 2)):
|
||||||
res += 'instr->sel[{0}] = SubdwordSel(op{0}.op.bytes(), 0, false);'.format(i)
|
res += 'instr->sdwa().sel[{0}] = SubdwordSel(op{0}.op.bytes(), 0, false);'.format(i)
|
||||||
res += 'instr->dst_sel = SubdwordSel(def0.bytes(), 0, false);\n'
|
res += 'instr->sdwa().dst_sel = SubdwordSel(def0.bytes(), 0, false);\n'
|
||||||
elif self in [Format.DPP16, Format.DPP8]:
|
elif self == Format.DPP16:
|
||||||
res += 'instr->fetch_inactive &= program->gfx_level >= GFX10;\n'
|
res += 'instr->dpp16().fetch_inactive &= program->gfx_level >= GFX10;\n'
|
||||||
|
elif self == Format.DPP8:
|
||||||
|
res += 'instr->dpp8().fetch_inactive &= program->gfx_level >= GFX10;\n'
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user