pan/va: Use XML for special FAU page 0
Now all special FAU handling is unified, which makes both assembler and disassembler considerably nicer. This adds some more special FAU indices from page 0 that were previously missing, allowing them to be assembled and disasembled. Signed-off-by: Alyssa Rosenzweig <alyssa@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15364>
This commit is contained in:
parent
31a171d92d
commit
b0faf422b7
|
@ -94,6 +94,32 @@
|
|||
<value name="Return from shader">return</value>
|
||||
</enum>
|
||||
|
||||
<enum name="FAU special page 0">
|
||||
<desc>
|
||||
Situated between the immediates hard-coded in the hardware and the
|
||||
uniforms defined purely in software, Valhall has a some special
|
||||
"constants" passing through data structures. These are encoded like the
|
||||
table of immediates, as if special constant $i$ were lookup table entry
|
||||
$32 + i$.
|
||||
</desc>
|
||||
<reserved/>
|
||||
<reserved/>
|
||||
<value desc="Warp ID and warps/core - 1">warp_id</value>
|
||||
<reserved/>
|
||||
<value desc="Bounding box maximum X/Y">framebuffer_size</value>
|
||||
<value desc="ATEST datum">atest_datum</value>
|
||||
<value desc="Sample positions">sample</value>
|
||||
<reserved/>
|
||||
<value desc="Blend descriptor 0">blend_descriptor_0</value>
|
||||
<value desc="Blend descriptor 1">blend_descriptor_1</value>
|
||||
<value desc="Blend descriptor 2">blend_descriptor_2</value>
|
||||
<value desc="Blend descriptor 3">blend_descriptor_3</value>
|
||||
<value desc="Blend descriptor 4">blend_descriptor_4</value>
|
||||
<value desc="Blend descriptor 5">blend_descriptor_5</value>
|
||||
<value desc="Blend descriptor 6">blend_descriptor_6</value>
|
||||
<value desc="Blend descriptor 7">blend_descriptor_7</value>
|
||||
</enum>
|
||||
|
||||
<enum name="FAU special page 1">
|
||||
<desc>
|
||||
Situated between the immediates hard-coded in the hardware and the
|
||||
|
|
|
@ -91,21 +91,7 @@ def parse_int(s, minimum, maximum):
|
|||
return number
|
||||
|
||||
def encode_source(op, fau):
|
||||
if op == 'atest_datum':
|
||||
fau.set_page(0)
|
||||
return 0x2A | 0xC0
|
||||
elif op.startswith('blend_descriptor_'):
|
||||
fau.set_page(0)
|
||||
|
||||
fin = op[len('blend_descriptor_'):]
|
||||
die_if(len(fin) != 3, 'Bad syntax')
|
||||
die_if(fin[1] != '_', 'Bad syntax')
|
||||
die_if(fin[2] not in ['x', 'y'], 'Bad component')
|
||||
|
||||
rt = parse_int(fin[0], 0, 7)
|
||||
hi = 1 if (fin[2] == 'y') else 0
|
||||
return (0x30 | (2*rt) + hi) | 0xC0
|
||||
elif op[0] == '`':
|
||||
if op[0] == '`':
|
||||
die_if(op[1] != 'r', f"Expected register after discard {op}")
|
||||
return parse_int(op[2:], 0, 63) | 0x40
|
||||
elif op[0] == 'r':
|
||||
|
@ -116,14 +102,6 @@ def encode_source(op, fau):
|
|||
return (val & 0x3F) | 0x80
|
||||
elif op[0] == 'i':
|
||||
return int(op[3:]) | 0xC0
|
||||
elif op in enums['fau_special_page_1'].bare_values:
|
||||
idx = 32 + (enums['fau_special_page_1'].bare_values.index(op) << 1)
|
||||
fau.set_page(1)
|
||||
return idx | 0xC0
|
||||
elif op in enums['fau_special_page_3'].bare_values:
|
||||
idx = 32 + (enums['fau_special_page_3'].bare_values.index(op) << 1)
|
||||
fau.set_page(3)
|
||||
return idx | 0xC0
|
||||
elif op.startswith('0x'):
|
||||
try:
|
||||
val = int(op, base=0)
|
||||
|
@ -133,8 +111,15 @@ def encode_source(op, fau):
|
|||
die_if(val not in immediates, 'Unexpected immediate value')
|
||||
return immediates.index(val) | 0xC0
|
||||
else:
|
||||
for i in [0, 1, 3]:
|
||||
if op in enums[f'fau_special_page_{i}'].bare_values:
|
||||
idx = 32 + (enums[f'fau_special_page_{i}'].bare_values.index(op) << 1)
|
||||
fau.set_page(i)
|
||||
return idx | 0xC0
|
||||
|
||||
die('Invalid operand')
|
||||
|
||||
|
||||
def encode_dest(op):
|
||||
die_if(op[0] != 'r', f"Expected register destination {op}")
|
||||
|
||||
|
|
|
@ -78,22 +78,16 @@ va_print_src(FILE *fp, uint8_t src, unsigned fau_page)
|
|||
|
||||
if (type == VA_SRC_IMM_TYPE) {
|
||||
if (value >= 32) {
|
||||
if (fau_page == 0) {
|
||||
if (value >= 0x30)
|
||||
fprintf(fp, "blend_descriptor_%u_%c", (value - 0x30) >> 1, value & 1 ? 'y' : 'x');
|
||||
else if (value == 0x2A)
|
||||
fprintf(fp, "atest_datum");
|
||||
else
|
||||
fprintf(fp, "unk:%X", value);
|
||||
} else if (fau_page == 1) {
|
||||
if (fau_page == 0)
|
||||
fputs(valhall_fau_special_page_0[(value - 0x20) >> 1] + 1, fp);
|
||||
else if (fau_page == 1)
|
||||
fputs(valhall_fau_special_page_1[(value - 0x20) >> 1] + 1, fp);
|
||||
fprintf(fp, ".w%u", value & 1);
|
||||
} else if (fau_page == 3) {
|
||||
else if (fau_page == 3)
|
||||
fputs(valhall_fau_special_page_3[(value - 0x20) >> 1] + 1, fp);
|
||||
fprintf(fp, ".w%u", value & 1);
|
||||
} else {
|
||||
fprintf(fp, "unk:%X", value);
|
||||
}
|
||||
else
|
||||
fprintf(fp, "reserved_page2");
|
||||
|
||||
fprintf(fp, ".w%u", value & 1);
|
||||
} else {
|
||||
fprintf(fp, "0x%X", va_immediates[value]);
|
||||
}
|
||||
|
|
|
@ -48,9 +48,9 @@ e6 00 00 00 00 c1 91 06 MOV.i32 r1, core_id.w0
|
|||
42 43 04 00 00 c0 a5 00 V2F32_TO_V2F16 r0, `r2, `r3
|
||||
40 c0 00 28 90 c0 a5 48 FADD.v2f16.barrier r0, `r0.abs, 0x0.neg
|
||||
c0 00 00 00 00 f6 10 01 IADD_IMM.i32 r54, 0x0, #0x0
|
||||
3c d0 ea 00 02 bc 7d 68 ATEST.td @r60, r60, 0x3F800000, atest_datum
|
||||
3c d0 ea 00 02 bc 7d 68 ATEST.td @r60, r60, 0x3F800000, atest_datum.w0
|
||||
40 db 05 04 00 c1 a1 00 MKVEC.v2i16 r1, `r0.h00, 0x3C000000.h10
|
||||
f0 00 3c 33 04 40 7f 78 BLEND.slot0.v4.f16.return @r0:r1, blend_descriptor_0_x, r60, target:0x0
|
||||
f0 00 3c 33 04 40 7f 78 BLEND.slot0.v4.f16.return @r0:r1, blend_descriptor_0.w0, r60, target:0x0
|
||||
7b 0d 00 40 04 84 5e 08 LEA_BUF_IMM.slot1.wait0 @r4:r5, `r59, table:0xD, index:0x0
|
||||
00 dd c0 08 14 c2 b2 00 FMA.f32 r2, r0, 0x44000000.neg.h1, 0x0.neg
|
||||
41 88 c0 00 04 c1 b2 00 FMA.f32 r1, `r1, u8, 0x0.neg
|
||||
|
@ -202,7 +202,7 @@ c0 00 00 00 00 c9 10 01 IADD_IMM.i32 r9, 0x0, #0x0
|
|||
49 3e c0 22 04 c9 b3 30 FMA.v2f16.wait12 r9, `r9, r62.h00, 0x0.neg
|
||||
47 43 00 00 00 c3 a4 00 FADD.f32 r3, `r7, `r3
|
||||
43 09 00 08 00 c3 a4 40 FADD.f32.wait0126 r3, `r3, r9.h1
|
||||
3c 03 ea 00 02 bc 7d 68 ATEST.td @r60, r60, r3, atest_datum
|
||||
3c 03 ea 00 02 bc 7d 68 ATEST.td @r60, r60, r3, atest_datum.w0
|
||||
46 42 00 00 00 c2 a4 00 FADD.f32 r2, `r6, `r2
|
||||
44 40 00 00 00 c0 a4 00 FADD.f32 r0, `r4, `r0
|
||||
48 7e c0 22 04 ff b3 00 FMA.v2f16 r63, `r8, `r62.h00, 0x0.neg
|
||||
|
@ -210,9 +210,9 @@ c0 00 00 00 00 c9 10 01 IADD_IMM.i32 r9, 0x0, #0x0
|
|||
41 3f 00 08 00 c1 a4 00 FADD.f32 r1, `r1, r63.h1
|
||||
40 7f 00 04 00 c0 a4 00 FADD.f32 r0, `r0, `r63.h0
|
||||
42 49 00 04 00 c2 a4 48 FADD.f32.barrier r2, `r2, `r9.h0
|
||||
f0 00 3c 32 08 40 7f 78 BLEND.slot0.v4.f32.return @r0:r1:r2:r3, blend_descriptor_0_x, r60, target:0x0
|
||||
f0 00 3c 32 08 40 7f 78 BLEND.slot0.v4.f32.return @r0:r1:r2:r3, blend_descriptor_0.w0, r60, target:0x0
|
||||
c0 00 00 00 00 f6 10 01 IADD_IMM.i32 r54, 0x0, #0x0
|
||||
c0 f1 00 00 10 c1 2f 08 BRANCHZI.eq.absolute.wait0 0x0, blend_descriptor_0_y
|
||||
c0 f1 00 00 10 c1 2f 08 BRANCHZI.eq.absolute.wait0 0x0, blend_descriptor_0.w1
|
||||
80 00 c0 17 34 7c 25 01 TEX_FETCH.slot0.f.32.2d @r0:r1:r2:r3, @r60:r61, u0
|
||||
80 00 00 00 00 c1 91 02 MOV.i32 r1, u64
|
||||
81 00 00 00 00 c1 91 02 MOV.i32 r1, u65
|
||||
|
|
Loading…
Reference in New Issue