Mesa (main): panfrost: Add Valhall Plane Descriptor XML
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Feb 3 16:00:42 UTC 2022
Module: Mesa
Branch: main
Commit: bfba7533c7a5d2b9c43864a081f220a318152c4c
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=bfba7533c7a5d2b9c43864a081f220a318152c4c
Author: Alyssa Rosenzweig <alyssa at collabora.com>
Date: Wed Feb 2 17:13:20 2022 -0500
panfrost: Add Valhall Plane Descriptor XML
This looks superficially like the Bifrost "Surface" descriptor, but it
additionally specifies the in-memory representation of blocks (clumps). If I
understand correctly, decompression is controlled by the plane descriptor,
rather than the texture descriptor level. This is a bit more flexible than
Bifrost.
Once the new fields here are wired up to Mesa, my
dEQP-GLES2.functional.texture.* failures should go away... I hope!
Signed-off-by: Alyssa Rosenzweig <alyssa at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14851>
---
src/panfrost/lib/genxml/decode.c | 2 +-
src/panfrost/lib/genxml/v9.xml | 164 +++++++++++++++++++++++++++++++++++++--
2 files changed, 158 insertions(+), 8 deletions(-)
diff --git a/src/panfrost/lib/genxml/decode.c b/src/panfrost/lib/genxml/decode.c
index 527812665aa..d65707c52b2 100644
--- a/src/panfrost/lib/genxml/decode.c
+++ b/src/panfrost/lib/genxml/decode.c
@@ -702,7 +702,7 @@ pandecode_bifrost_texture(
#if PAN_ARCH >= 9
/* TODO: count */
for (unsigned i = 0; i < 4; ++i)
- DUMP_ADDR(SURFACE_WITH_STRIDE, temp.surfaces + i * pan_size(SURFACE_WITH_STRIDE), "Surface %u:\n", i);
+ DUMP_ADDR(PLANE, temp.surfaces + i * pan_size(PLANE), "Plane %u:\n", i);
#else
struct pandecode_mapped_memory *tmem = pandecode_find_mapped_gpu_mem_containing(temp.surfaces);
unsigned nr_samples = temp.dimension == MALI_TEXTURE_DIMENSION_3D ?
diff --git a/src/panfrost/lib/genxml/v9.xml b/src/panfrost/lib/genxml/v9.xml
index 9d68b4c081a..5f0bd46bbd1 100644
--- a/src/panfrost/lib/genxml/v9.xml
+++ b/src/panfrost/lib/genxml/v9.xml
@@ -50,7 +50,7 @@
<value name="Depth/stencil" value="7"/>
<value name="Shader" value="8"/>
<value name="Buffer" value="9"/>
- <value name="Surface" value="10"/>
+ <value name="Plane" value="10"/>
</enum>
<enum name="Draw Mode">
@@ -640,13 +640,163 @@
<field name="Border Color A" size="32" start="7:0" type="uint/float" default="0.0"/>
</struct>
- <!-- Size unknown. Need to check what happens with mipmapping, cubemapping, 3D... -->
- <struct name="Surface with Stride" size="32" align="32">
- <field name="Type" size="4" start="0:0" type="Descriptor Type" default="Surface"/>
- <field name="Unk 1" size="28" start="0:4" type="hex" default="0x0200021"/> <!-- XXX: maybe counts -->
- <field name="Surface stride" size="32" start="1:0" type="int"/>
+ <enum name="Plane Type">
+ <value name="Null" value="0"/>
+ <value name="Generic" value="1"/>
+ <value name="ASTC 2D" value="4"/>
+ <value name="ASTC 3D" value="5"/>
+ <value name="AFBC" value="6"/>
+ <value name="Chroma 2p" value="8"/>
+ </enum>
+
+ <enum name="Clump Ordering">
+ <value name="Tiled U-Interleaved" value="1"/>
+ <value name="Linear" value="2"/>
+ </enum>
+
+ <enum name="Clump Format">
+ <value name="RAW8" value="0"/>
+ <value name="RAW16" value="1"/>
+ <value name="RAW32" value="2"/>
+ <value name="RAW64" value="3"/>
+ <value name="RAW128" value="4"/>
+
+ <value name="RAW24" value="8"/>
+ <value name="RAW48" value="9"/>
+ <value name="RAW96" value="10"/>
+
+ <value name="D32X32" value="16"/>
+ <value name="X32D32" value="17"/>
+ <value name="X32S8X24" value="18"/>
+ <value name="X24S8X32" value="19"/>
+ <value name="X24S8" value="20"/>
+ <value name="S8X24" value="21"/>
+ <value name="S8" value="22"/>
+
+ <value name="L4A4" value="24"/>
+ <value name="L8A8" value="25"/>
+ <value name="A8" value="26"/>
+
+ <value name="ETC2 RGB8" value="32"/>
+ <value name="ETC2 R11 UNORM" value="33"/>
+ <value name="ETC2 R11 SNORM" value="34"/>
+ <value name="ETC2 RG11 UNORM" value="35"/>
+ <value name="ETC2 RG11 SNORM" value="36"/>
+ <value name="ETC2 RGBA8" value="37"/>
+ <value name="ETC2 RGB8A1" value="38"/>
+
+ <value name="BC1 UNORM" value="48"/>
+ <value name="BC2 UNORM" value="49"/>
+ <value name="BC3 UNORM" value="50"/>
+ <value name="BC4 UNORM" value="51"/>
+ <value name="BC4 SNORM" value="52"/>
+ <value name="BC5 UNORM" value="53"/>
+ <value name="BC5 SNORM" value="54"/>
+ <value name="BC6H UF16" value="55"/>
+ <value name="BC6H SF16" value="56"/>
+ <value name="BC7 UNORM" value="57"/>
+
+ <value name="Y8 UV8 422" value="64"/>
+ <value name="Y10 UV10 422" value="65"/>
+ <value name="Y16 UV16 422" value="67"/>
+
+ <value name="Y8 UV8 420" value="72"/>
+ <value name="Y10 UV10 420" value="73"/>
+ <value name="Y16 UV16 420" value="75"/>
+ <value name="YUV420 10x6" value="76"/>
+
+ <value name="RAW10" value="120"/>
+ <value name="RAW12" value="121"/>
+
+ <value name="R8G8B8G8" value="124"/>
+ <value name="G8R8G8B8" value="125"/>
+ </enum>
+
+ <enum name="AFBC Superblock Size">
+ <value name="16x16" value="0"/>
+ <value name="32x8" value="1"/>
+ <value name="64x4" value="2"/>
+ </enum>
+
+ <enum name="AFBC Compression Mode">
+ <value name="R8" value="0"/>
+ <value name="R8G8" value="3"/>
+ <value name="R5G6B5" value="4"/>
+ <value name="R4G4B4A4" value="5"/>
+ <value name="R5G5B5A1" value="6"/>
+ <value name="R8G8B8" value="9"/>
+ <value name="R8G8B8A8" value="10"/>
+ <value name="R10G10B10A2" value="11"/>
+ <value name="R11G11B10" value="12"/>
+ <value name="S8" value="14"/>
+ <value name="X24S8" value="15"/>
+
+ <value name="YUV420 6c8" value="32"/>
+ <value name="YUV420 2c8" value="34"/>
+ <value name="YUV420 1c8" value="35"/>
+
+ <value name="YUV422 4c8" value="37"/>
+ <value name="YUV422 2c8" value="38"/>
+ <value name="YUV422 1c8" value="39"/>
+
+ <value name="YUV420 6c10" value="40"/>
+ <value name="YUV420 2c10" value="42"/>
+ <value name="YUV420 1c10" value="43"/>
+
+ <value name="YUV422 4c10" value="45"/>
+ <value name="YUV422 2c10" value="46"/>
+ <value name="YUV422 1c10" value="47"/>
+ </enum>
+
+ <struct name="Plane AFBC Overlay" size="8">
+ <field name="Superblock size" size="3" start="0:8" type="AFBC Superblock Size"/>
+
+ <field name="YTR" size="1" start="0:16" type="bool"/>
+ <field name="Split block" size="1" start="0:17" type="bool"/>
+ <field name="Alpha hint" size="1" start="0:18" type="bool"/>
+ <field name="Tiled header" size="1" start="0:19" type="bool"/>
+ <field name="Prefetch" size="1" start="0:20" type="bool"/>
+ <field name="Compression mode" size="6" start="0:26" type="AFBC Compression Mode"/>
+
+ <field name="Header stride" size="32" start="5:0" type="uint"/>
+ </struct>
+
+ <struct name="Plane ASTC 2D Overlay" size="8">
+ <field name="Block width" size="3" start="26" type="ASTC 2D Dimension"/>
+ <field name="Block height" size="3" start="29" type="ASTC 2D Dimension"/>
+ </struct>
+
+ <struct name="Plane ASTC 3D Overlay" size="8">
+ <field name="Block width" size="2" start="26" type="ASTC 3D Dimension"/>
+ <field name="Block height" size="2" start="28" type="ASTC 3D Dimension"/>
+ <field name="Block depth" size="2" start="30" type="ASTC 3D Dimension"/>
+ </struct>
+
+ <struct name="Plane ASTC Overlay" size="8">
+ <field name="Decode Narrow" size="1" start="24" type="bool"/>
+ <field name="Decode HDR" size="1" start="25" type="bool"/>
+
+ <field name="2D" size="32" start="0" type="Plane ASTC 2D Overlay"/>
+ <field name="3D" size="32" start="0" type="Plane ASTC 3D Overlay"/>
+ </struct>
+
+ <struct name="Plane" size="8" align="32">
+ <field name="Type" size="4" start="0:0" type="Descriptor Type" default="Plane"/>
+ <field name="Plane type" size="4" start="0:4" type="Plane Type"/>
+
+ <field name="AFBC" size="32" start="0:0" type="Plane AFBC Overlay"/>
+ <field name="ASTC" size="32" start="0:0" type="Plane ASTC Overlay"/>
+
+ <!-- Not AFBC -->
+ <field name="Clump ordering" size="4" start="0:8" type="Clump Ordering"/>
+
+ <!-- Generic, Chroma 2p -->
+ <field name="Clump format" size="8" start="24" type="Clump Format"/>
+
+ <field name="Size" size="32" start="1:0" type="uint"/>
<field name="Pointer" size="64" start="2:0" type="address"/>
- <field name="Row stride" size="32" start="4:0" type="int"/>
+ <field name="Row stride" size="32" start="4:0" type="uint"/>
+ <field name="Slice stride" size="32" start="6:0" type="int"/>
</struct>
<struct name="Texture" size="8" align="32">
More information about the mesa-commit
mailing list