asahi: Fix CDM Launch/Barrier naming

"Launch" is actually just a barrier, and it seems likely to use the same
bit assignments as in VDM...

Signed-off-by: Asahi Lina <lina@asahilina.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26614>
This commit is contained in:
Asahi Lina 2023-11-10 14:10:59 +09:00 committed by Alyssa Rosenzweig
parent 412922ed73
commit c20210c643
3 changed files with 43 additions and 20 deletions

View file

@ -863,10 +863,10 @@
<!-- CDM commands start -->
<enum name="CDM Block Type">
<value name="Header" value="0"/>
<value name="Launch" value="0"/>
<value name="Stream Link" value="1"/>
<value name="Stream Terminate" value="2"/>
<value name="Launch" value="3"/>
<value name="Barrier" value="3"/>
</enum>
<enum name="CDM Mode">
@ -884,13 +884,13 @@
<value name="Indirect local" value="2"/>
</enum>
<struct name="CDM Header" size="8">
<struct name="CDM Launch" size="8">
<field name="Uniform register count" size="3" start="1" type="uint" modifier="groups(64)"/>
<field name="Texture state register count" size="5" start="4" type="uint" modifier="groups(8)"/>
<field name="Sampler state register count" size="3" start="9" type="Sampler states"/>
<field name="Preshader register count" size="4" start="12" type="uint" modifier="groups(16)"/>
<field name="Mode" size="2" start="27" type="CDM Mode"/>
<field name="Block Type" size="3" start="29" type="CDM Block Type" default="Header"/>
<field name="Block Type" size="3" start="29" type="CDM Block Type" default="Launch"/>
<field name="Pipeline" size="26" start="1:6" type="address" modifier="shr(6)"/>
</struct>
@ -915,9 +915,29 @@
<field name="Z" size="32" start="2:0" type="uint"/>
</struct>
<struct name="CDM Launch" size="4">
<field name="Unknown" size="12" start="0" type="hex" default="0x160"/>
<field name="Block Type" size="3" start="29" type="CDM Block Type" default="Launch"/>
<struct name="CDM Barrier" size="4">
<field name="USC cache inval" size="1" start="3" type="bool" default="false"/>
<field name="Unk 4" size="1" start="4" type="bool" default="false"/>
<field name="Unk 5" size="1" start="5" type="bool" default="false"/>
<field name="Unk 6" size="1" start="6" type="bool" default="false"/>
<field name="Unk 7" size="1" start="7" type="bool" default="false"/>
<field name="Unk 8" size="1" start="8" type="bool" default="false"/>
<field name="Unk 9" size="1" start="9" type="bool" default="false"/>
<field name="Unk 10" size="1" start="10" type="bool" default="false"/>
<field name="Unk 11" size="1" start="11" type="bool" default="false"/>
<field name="Unk 12" size="1" start="12" type="bool" default="false"/>
<field name="Unk 13" size="1" start="13" type="bool" default="false"/>
<field name="Unk 14" size="1" start="14" type="bool" default="false"/>
<field name="Unk 15" size="1" start="15" type="bool" default="false"/>
<field name="Unk 16" size="1" start="16" type="bool" default="false"/>
<field name="Unk 17" size="1" start="17" type="bool" default="false"/>
<field name="Unk 18" size="1" start="18" type="bool" default="false"/>
<field name="Unk 19" size="1" start="19" type="bool" default="false"/>
<field name="Unk 20" size="1" start="20" type="bool" default="false"/>
<field name="Unk 24" size="1" start="24" type="bool" default="false"/>
<field name="Unk 26" size="1" start="26" type="bool" default="false"/>
<field name="Returns" size="1" start="27" type="bool" default="false"/>
<field name="Block Type" size="3" start="29" type="CDM Block Type" default="Barrier"/>
</struct>
<struct name="CDM Stream Link" size="8">

View file

@ -570,8 +570,8 @@ agxdecode_cdm(const uint8_t *map, uint64_t *link, bool verbose,
enum agx_cdm_block_type block_type = (map[3] >> 5);
switch (block_type) {
case AGX_CDM_BLOCK_TYPE_HEADER: {
size_t length = AGX_CDM_HEADER_LENGTH;
case AGX_CDM_BLOCK_TYPE_LAUNCH: {
size_t length = AGX_CDM_LAUNCH_LENGTH;
#define CDM_PRINT(STRUCT_NAME, human) \
do { \
@ -580,11 +580,11 @@ agxdecode_cdm(const uint8_t *map, uint64_t *link, bool verbose,
length += AGX_CDM_##STRUCT_NAME##_LENGTH; \
} while (0);
agx_unpack(agxdecode_dump_stream, map, CDM_HEADER, hdr);
agx_unpack(agxdecode_dump_stream, map, CDM_LAUNCH, hdr);
agxdecode_stateful(hdr.pipeline, "Pipeline", agxdecode_usc, verbose,
params, &hdr.sampler_state_register_count);
DUMP_UNPACKED(CDM_HEADER, hdr, "Compute\n");
map += AGX_CDM_HEADER_LENGTH;
DUMP_UNPACKED(CDM_LAUNCH, hdr, "Compute\n");
map += AGX_CDM_LAUNCH_LENGTH;
/* Added in G14X */
if (params->gpu_generation >= 14 && params->num_clusters_total > 1)
@ -622,9 +622,9 @@ agxdecode_cdm(const uint8_t *map, uint64_t *link, bool verbose,
return STATE_DONE;
}
case AGX_CDM_BLOCK_TYPE_LAUNCH: {
DUMP_CL(CDM_LAUNCH, map, "Launch");
return AGX_CDM_LAUNCH_LENGTH;
case AGX_CDM_BLOCK_TYPE_BARRIER: {
DUMP_CL(CDM_BARRIER, map, "Barrier");
return AGX_CDM_BARRIER_LENGTH;
}
default:

View file

@ -4053,7 +4053,7 @@ agx_launch(struct agx_batch *batch, const struct pipe_grid_info *info,
/* TODO: Ensure space if we allow multiple kernels in a batch */
uint8_t *out = batch->cdm.current;
agx_pack(out, CDM_HEADER, cfg) {
agx_pack(out, CDM_LAUNCH, cfg) {
if (info->indirect)
cfg.mode = AGX_CDM_MODE_INDIRECT_GLOBAL;
else
@ -4068,7 +4068,7 @@ agx_launch(struct agx_batch *batch, const struct pipe_grid_info *info,
cfg.pipeline =
agx_build_pipeline(batch, cs, stage, info->variable_shared_mem);
}
out += AGX_CDM_HEADER_LENGTH;
out += AGX_CDM_LAUNCH_LENGTH;
/* Added in G14X */
if (dev->params.gpu_generation >= 14 && dev->params.num_clusters_total > 1) {
@ -4100,9 +4100,12 @@ agx_launch(struct agx_batch *batch, const struct pipe_grid_info *info,
}
out += AGX_CDM_LOCAL_SIZE_LENGTH;
agx_pack(out, CDM_LAUNCH, cfg)
;
out += AGX_CDM_LAUNCH_LENGTH;
agx_pack(out, CDM_BARRIER, cfg) {
cfg.unk_5 = true;
cfg.unk_6 = true;
cfg.unk_8 = true;
}
out += AGX_CDM_BARRIER_LENGTH;
batch->cdm.current = out;
assert(batch->cdm.current <= batch->cdm.end &&