Skip to content

Commit 4cb2808

Browse files
committed
drm/asahi: render: Identify and set Z/S strides for layered rendering
Signed-off-by: Asahi Lina <[email protected]>
1 parent 1373d09 commit 4cb2808

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
@@ -788,15 +788,18 @@ impl super::Queue::ver {
788788
stencil_buffer_ptr2: U64(cmdbuf.stencil_buffer_store),
789789
#[ver(G >= G14)]
790790
unk_68_g14_0: Default::default(),
791-
unk_78: Default::default(),
791+
depth_buffer_stride1: U64(cmdbuf.depth_buffer_load_stride),
792+
depth_buffer_stride2: U64(cmdbuf.depth_buffer_store_stride),
793+
stencil_buffer_stride1: U64(cmdbuf.stencil_buffer_load_stride),
794+
stencil_buffer_stride2: U64(cmdbuf.stencil_buffer_store_stride),
792795
depth_meta_buffer_ptr1: U64(cmdbuf.depth_meta_buffer_load),
793-
unk_a0: Default::default(),
796+
depth_meta_buffer_stride1: U64(cmdbuf.depth_meta_buffer_load_stride),
794797
depth_meta_buffer_ptr2: U64(cmdbuf.depth_meta_buffer_store),
795-
unk_b0: Default::default(),
798+
depth_meta_buffer_stride2: U64(cmdbuf.depth_meta_buffer_store_stride),
796799
stencil_meta_buffer_ptr1: U64(cmdbuf.stencil_meta_buffer_load),
797-
unk_c0: Default::default(),
800+
stencil_meta_buffer_stride1: U64(cmdbuf.stencil_meta_buffer_load_stride),
798801
stencil_meta_buffer_ptr2: U64(cmdbuf.stencil_meta_buffer_store),
799-
unk_d0: Default::default(),
802+
stencil_meta_buffer_stride2: U64(cmdbuf.stencil_meta_buffer_store_stride),
800803
tvb_tilemap: inner.scene.tvb_tilemap_pointer(),
801804
tvb_layermeta: inner.scene.tvb_layermeta_pointer(),
802805
mtile_stride_dwords: U64((4 * tile_info.params.rgn_size as u64) << 24),
@@ -888,18 +891,18 @@ impl super::Queue::ver {
888891
r.add(0x15221, 0);
889892
r.add(0x15239, 0);
890893
r.add(0x15229, 0);
891-
r.add(0x15401, 0);
892-
r.add(0x15421, 0);
893-
r.add(0x15409, 0);
894-
r.add(0x15429, 0);
894+
r.add(0x15401, cmdbuf.depth_buffer_load_stride);
895+
r.add(0x15421, cmdbuf.depth_buffer_store_stride);
896+
r.add(0x15409, cmdbuf.stencil_buffer_load_stride);
897+
r.add(0x15429, cmdbuf.stencil_buffer_store_stride);
895898
r.add(0x153c1, cmdbuf.depth_meta_buffer_load);
896-
r.add(0x15411, 0);
899+
r.add(0x15411, cmdbuf.depth_meta_buffer_load_stride);
897900
r.add(0x153c9, cmdbuf.depth_meta_buffer_store);
898-
r.add(0x15431, 0);
901+
r.add(0x15431, cmdbuf.depth_meta_buffer_store_stride);
899902
r.add(0x153d1, cmdbuf.stencil_meta_buffer_load);
900-
r.add(0x15419, 0);
903+
r.add(0x15419, cmdbuf.stencil_meta_buffer_load_stride);
901904
r.add(0x153d9, cmdbuf.stencil_meta_buffer_store);
902-
r.add(0x15439, 0);
905+
r.add(0x15439, cmdbuf.stencil_meta_buffer_store_stride);
903906
r.add(0x16429, inner.scene.tvb_tilemap_pointer().into());
904907
r.add(0x16060, inner.scene.tvb_layermeta_pointer().into());
905908
r.add(0x16431, (4 * tile_info.params.rgn_size as u64) << 24); // ISP_RGN?
@@ -953,14 +956,14 @@ impl super::Queue::ver {
953956
zls_ctrl: U64(unks.reload_zlsctrl),
954957
unk_290: U64(unks.g14_unk),
955958
depth_buffer_ptr1: U64(cmdbuf.depth_buffer_load),
956-
unk_2a0: U64(0x0),
957-
unk_2a8: U64(0x0),
959+
depth_buffer_stride3: U64(cmdbuf.depth_buffer_partial_stride),
960+
depth_meta_buffer_stride3: U64(cmdbuf.depth_meta_buffer_partial_stride),
958961
depth_buffer_ptr2: U64(cmdbuf.depth_buffer_store),
959962
depth_buffer_ptr3: U64(cmdbuf.depth_buffer_partial),
960963
depth_meta_buffer_ptr3: U64(cmdbuf.depth_meta_buffer_partial),
961964
stencil_buffer_ptr1: U64(cmdbuf.stencil_buffer_load),
962-
unk_2d0: U64(0x0),
963-
unk_2d8: U64(0x0),
965+
stencil_buffer_stride3: U64(cmdbuf.stencil_buffer_partial_stride),
966+
stencil_meta_buffer_stride3: U64(cmdbuf.stencil_meta_buffer_partial_stride),
964967
stencil_buffer_ptr2: U64(cmdbuf.stencil_buffer_store),
965968
stencil_buffer_ptr3: U64(cmdbuf.stencil_buffer_partial),
966969
stencil_meta_buffer_ptr3: U64(cmdbuf.stencil_meta_buffer_partial),

0 commit comments

Comments
 (0)