asahi: Identify shared memory layouts

Somehow maps to the tile size. Not sure about the details yet.

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18623>
This commit is contained in:
Alyssa Rosenzweig
2022-09-17 17:14:17 -04:00
parent b8b3c9fa2a
commit bcd75a13e0
2 changed files with 13 additions and 6 deletions
+8 -1
View File
@@ -507,10 +507,17 @@
<field name="Buffer" size="36" start="0:27" type="address" modifier="shr(3)"/>
</struct>
<enum name="Shared layout">
<value name="Vertex/compute" value="0x24"/>
<value name="32x32" value="0x2f"/>
<value name="32x16" value="0x3f"/>
<value name="16x16" value="0x36"/>
</enum>
<struct name="USC Shared" size="4">
<field name="Tag" size="8" start="0" type="USC Control" default="Shared"/>
<field name="Uses shared memory" size="1" start="8" type="bool"/>
<field name="Unk 1" size="12" start="8" type="hex" default="0x48"/>
<field name="Shared layout" size="6" start="10" type="Shared layout"/>
<field name="Pixel stride in 8 bytes" size="4" start="20" type="uint"/>
<field name="Shared memory per threadgroup in 256 bytes" size="8" start="24" type="uint"/>
</struct>
+5 -5
View File
@@ -1321,11 +1321,11 @@ agx_build_pipeline(struct agx_context *ctx, struct agx_compiled_shader *cs, enum
agx_usc_pack(&b, SHARED, cfg) {
if (stage == PIPE_SHADER_FRAGMENT) {
cfg.uses_shared_memory = true;
cfg.unk_1 = 0xbc;
cfg.shared_layout = AGX_SHARED_LAYOUT_32X32;
cfg.pixel_stride_in_8_bytes = 1;
cfg.shared_memory_per_threadgroup_in_256_bytes = 32;
} else {
cfg.unk_1 = 0x90;
cfg.shared_layout = AGX_SHARED_LAYOUT_VERTEX_COMPUTE;
}
}
@@ -1369,7 +1369,7 @@ agx_build_clear_pipeline(struct agx_context *ctx, uint32_t code, uint64_t clear_
agx_usc_pack(&b, SHARED, cfg) {
cfg.uses_shared_memory = true;
cfg.unk_1 = 0xbc;
cfg.shared_layout = AGX_SHARED_LAYOUT_32X32;
cfg.pixel_stride_in_8_bytes = 1;
cfg.shared_memory_per_threadgroup_in_256_bytes = 32;
}
@@ -1450,7 +1450,7 @@ agx_build_reload_pipeline(struct agx_context *ctx, uint32_t code, struct pipe_su
agx_usc_pack(&b, SHARED, cfg) {
cfg.uses_shared_memory = true;
cfg.unk_1 = 0xbc;
cfg.shared_layout = AGX_SHARED_LAYOUT_32X32;
cfg.pixel_stride_in_8_bytes = 1;
cfg.shared_memory_per_threadgroup_in_256_bytes = 32;
}
@@ -1489,7 +1489,7 @@ agx_build_store_pipeline(struct agx_context *ctx, uint32_t code,
agx_usc_pack(&b, SHARED, cfg) {
cfg.uses_shared_memory = true;
cfg.unk_1 = 0xbc;
cfg.shared_layout = AGX_SHARED_LAYOUT_32X32;
cfg.pixel_stride_in_8_bytes = 1;
cfg.shared_memory_per_threadgroup_in_256_bytes = 32;
}