nak/qmd: Add a nak_get_qmd_cbuf_desc_layout() helper

Fixes: 976f22a5da ("nvk: Implement CmdProcess/ExecuteGeneratedCommandsEXT")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33771>
This commit is contained in:
Faith Ekstrand
2025-02-26 10:17:10 -06:00
committed by Marge Bot
parent 755a6884d3
commit c540e5e2cc
2 changed files with 40 additions and 0 deletions
+8
View File
@@ -263,6 +263,14 @@ struct nak_qmd_dispatch_size_layout {
struct nak_qmd_dispatch_size_layout
nak_get_qmd_dispatch_size_layout(const struct nv_device_info *dev);
struct nak_qmd_cbuf_desc_layout {
uint16_t addr_lo_start, addr_lo_end;
uint16_t addr_hi_start, addr_hi_end;
};
struct nak_qmd_cbuf_desc_layout
nak_get_qmd_cbuf_desc_layout(const struct nv_device_info *dev, uint8_t idx);
#ifdef __cplusplus
}
#endif
+32
View File
@@ -18,6 +18,7 @@ trait QMD {
fn new() -> Self;
fn set_barrier_count(&mut self, barrier_count: u8);
fn set_cbuf(&mut self, idx: u8, addr: u64, size: u32);
fn cbuf_desc_layout(idx: u8) -> nak_qmd_cbuf_desc_layout;
fn set_global_size(&mut self, width: u32, height: u32, depth: u32);
fn set_local_size(&mut self, width: u16, height: u16, depth: u16);
fn set_prog_addr(&mut self, addr: u64);
@@ -135,6 +136,19 @@ macro_rules! qmd_impl_set_cbuf {
set_array!(bv, $c, $s, CONSTANT_BUFFER_VALID, idx, true);
}
fn cbuf_desc_layout(idx: u8) -> nak_qmd_cbuf_desc_layout {
let lo =
paste! {$c::[<$s _CONSTANT_BUFFER_ADDR_LOWER>]}(idx.into());
let hi =
paste! {$c::[<$s _CONSTANT_BUFFER_ADDR_UPPER>]}(idx.into());
nak_qmd_cbuf_desc_layout {
addr_lo_start: lo.start as u16,
addr_lo_end: lo.end as u16,
addr_hi_start: hi.start as u16,
addr_hi_end: hi.end as u16,
}
}
};
}
@@ -436,3 +450,21 @@ pub extern "C" fn nak_get_qmd_dispatch_size_layout(
panic!("Unsupported shader model");
}
}
#[no_mangle]
pub extern "C" fn nak_get_qmd_cbuf_desc_layout(
dev: &nv_device_info,
idx: u8,
) -> nak_qmd_cbuf_desc_layout {
if dev.cls_compute >= clc6c0::AMPERE_COMPUTE_A {
Qmd3_0::cbuf_desc_layout(idx.into())
} else if dev.cls_compute >= clc3c0::VOLTA_COMPUTE_A {
Qmd2_2::cbuf_desc_layout(idx.into())
} else if dev.cls_compute >= clc0c0::PASCAL_COMPUTE_A {
Qmd2_1::cbuf_desc_layout(idx.into())
} else if dev.cls_compute >= cla0c0::KEPLER_COMPUTE_A {
Qmd0_6::cbuf_desc_layout(idx.into())
} else {
panic!("Unsupported shader model");
}
}