Skip to content

Commit 3ff3a81

Browse files
committed
drm/asahi: render: Identify and set Z/S strides for layered rendering
Signed-off-by: Asahi Lina <lina@asahilina.net>
1 parent ab5b2aa commit 3ff3a81

2 files changed

Lines changed: 32 additions & 26 deletions

File tree

drivers/gpu/drm/asahi/fw/fragment.rs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -87,15 +87,18 @@ pub(crate) mod raw {
8787
#[ver(G >= G14)]
8888
pub(crate) unk_68_g14_0: Array<0x20, u8>,
8989

90-
pub(crate) unk_78: Array<0x4, U64>,
90+
pub(crate) depth_buffer_stride1: U64,
91+
pub(crate) depth_buffer_stride2: U64,
92+
pub(crate) stencil_buffer_stride1: U64,
93+
pub(crate) stencil_buffer_stride2: U64,
9194
pub(crate) depth_meta_buffer_ptr1: U64,
92-
pub(crate) unk_a0: U64,
95+
pub(crate) depth_meta_buffer_stride1: U64,
9396
pub(crate) depth_meta_buffer_ptr2: U64,
94-
pub(crate) unk_b0: U64,
97+
pub(crate) depth_meta_buffer_stride2: U64,
9598
pub(crate) stencil_meta_buffer_ptr1: U64,
96-
pub(crate) unk_c0: U64,
99+
pub(crate) stencil_meta_buffer_stride1: U64,
97100
pub(crate) stencil_meta_buffer_ptr2: U64,
98-
pub(crate) unk_d0: U64,
101+
pub(crate) stencil_meta_buffer_stride2: U64,
99102
pub(crate) tvb_tilemap: GpuPointer<'a, &'a [u8]>,
100103
pub(crate) tvb_layermeta: GpuPointer<'a, &'a [u8]>,
101104
pub(crate) mtile_stride_dwords: U64,
@@ -160,14 +163,14 @@ pub(crate) mod raw {
160163
pub(crate) zls_ctrl: U64,
161164
pub(crate) unk_290: U64,
162165
pub(crate) depth_buffer_ptr1: U64,
163-
pub(crate) unk_2a0: U64,
164-
pub(crate) unk_2a8: U64,
166+
pub(crate) depth_buffer_stride3: U64,
167+
pub(crate) depth_meta_buffer_stride3: U64,
165168
pub(crate) depth_buffer_ptr2: U64,
166169
pub(crate) depth_buffer_ptr3: U64,
167170
pub(crate) depth_meta_buffer_ptr3: U64,
168171
pub(crate) stencil_buffer_ptr1: U64,
169-
pub(crate) unk_2d0: U64,
170-
pub(crate) unk_2d8: U64,
172+
pub(crate) stencil_buffer_stride3: U64,
173+
pub(crate) stencil_meta_buffer_stride3: U64,
171174
pub(crate) stencil_buffer_ptr2: U64,
172175
pub(crate) stencil_buffer_ptr3: U64,
173176
pub(crate) stencil_meta_buffer_ptr3: U64,

drivers/gpu/drm/asahi/queue/render.rs

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -785,15 +785,18 @@ impl super::Queue::ver {
785785
stencil_buffer_ptr2: U64(cmdbuf.stencil_buffer_store),
786786
#[ver(G >= G14)]
787787
unk_68_g14_0: Default::default(),
788-
unk_78: Default::default(),
788+
depth_buffer_stride1: U64(cmdbuf.depth_buffer_load_stride),
789+
depth_buffer_stride2: U64(cmdbuf.depth_buffer_store_stride),
790+
stencil_buffer_stride1: U64(cmdbuf.stencil_buffer_load_stride),
791+
stencil_buffer_stride2: U64(cmdbuf.stencil_buffer_store_stride),
789792
depth_meta_buffer_ptr1: U64(cmdbuf.depth_meta_buffer_load),
790-
unk_a0: Default::default(),
793+
depth_meta_buffer_stride1: U64(cmdbuf.depth_meta_buffer_load_stride),
791794
depth_meta_buffer_ptr2: U64(cmdbuf.depth_meta_buffer_store),
792-
unk_b0: Default::default(),
795+
depth_meta_buffer_stride2: U64(cmdbuf.depth_meta_buffer_store_stride),
793796
stencil_meta_buffer_ptr1: U64(cmdbuf.stencil_meta_buffer_load),
794-
unk_c0: Default::default(),
797+
stencil_meta_buffer_stride1: U64(cmdbuf.stencil_meta_buffer_load_stride),
795798
stencil_meta_buffer_ptr2: U64(cmdbuf.stencil_meta_buffer_store),
796-
unk_d0: Default::default(),
799+
stencil_meta_buffer_stride2: U64(cmdbuf.stencil_meta_buffer_store_stride),
797800
tvb_tilemap: inner.scene.tvb_tilemap_pointer(),
798801
tvb_layermeta: inner.scene.tvb_layermeta_pointer(),
799802
mtile_stride_dwords: U64((4 * tile_info.params.rgn_size as u64) << 24),
@@ -885,18 +888,18 @@ impl super::Queue::ver {
885888
r.add(0x15221, 0);
886889
r.add(0x15239, 0);
887890
r.add(0x15229, 0);
888-
r.add(0x15401, 0);
889-
r.add(0x15421, 0);
890-
r.add(0x15409, 0);
891-
r.add(0x15429, 0);
891+
r.add(0x15401, cmdbuf.depth_buffer_load_stride);
892+
r.add(0x15421, cmdbuf.depth_buffer_store_stride);
893+
r.add(0x15409, cmdbuf.stencil_buffer_load_stride);
894+
r.add(0x15429, cmdbuf.stencil_buffer_store_stride);
892895
r.add(0x153c1, cmdbuf.depth_meta_buffer_load);
893-
r.add(0x15411, 0);
896+
r.add(0x15411, cmdbuf.depth_meta_buffer_load_stride);
894897
r.add(0x153c9, cmdbuf.depth_meta_buffer_store);
895-
r.add(0x15431, 0);
898+
r.add(0x15431, cmdbuf.depth_meta_buffer_store_stride);
896899
r.add(0x153d1, cmdbuf.stencil_meta_buffer_load);
897-
r.add(0x15419, 0);
900+
r.add(0x15419, cmdbuf.stencil_meta_buffer_load_stride);
898901
r.add(0x153d9, cmdbuf.stencil_meta_buffer_store);
899-
r.add(0x15439, 0);
902+
r.add(0x15439, cmdbuf.stencil_meta_buffer_store_stride);
900903
r.add(0x16429, inner.scene.tvb_tilemap_pointer().into());
901904
r.add(0x16060, inner.scene.tvb_layermeta_pointer().into());
902905
r.add(0x16431, (4 * tile_info.params.rgn_size as u64) << 24); // ISP_RGN?
@@ -950,14 +953,14 @@ impl super::Queue::ver {
950953
zls_ctrl: U64(unks.reload_zlsctrl),
951954
unk_290: U64(unks.g14_unk),
952955
depth_buffer_ptr1: U64(cmdbuf.depth_buffer_load),
953-
unk_2a0: U64(0x0),
954-
unk_2a8: U64(0x0),
956+
depth_buffer_stride3: U64(cmdbuf.depth_buffer_partial_stride),
957+
depth_meta_buffer_stride3: U64(cmdbuf.depth_meta_buffer_partial_stride),
955958
depth_buffer_ptr2: U64(cmdbuf.depth_buffer_store),
956959
depth_buffer_ptr3: U64(cmdbuf.depth_buffer_partial),
957960
depth_meta_buffer_ptr3: U64(cmdbuf.depth_meta_buffer_partial),
958961
stencil_buffer_ptr1: U64(cmdbuf.stencil_buffer_load),
959-
unk_2d0: U64(0x0),
960-
unk_2d8: U64(0x0),
962+
stencil_buffer_stride3: U64(cmdbuf.stencil_buffer_partial_stride),
963+
stencil_meta_buffer_stride3: U64(cmdbuf.stencil_meta_buffer_partial_stride),
961964
stencil_buffer_ptr2: U64(cmdbuf.stencil_buffer_store),
962965
stencil_buffer_ptr3: U64(cmdbuf.stencil_buffer_partial),
963966
stencil_meta_buffer_ptr3: U64(cmdbuf.stencil_meta_buffer_partial),

0 commit comments

Comments
 (0)