blorp: Use 3DSTATE_URB_ALLOC_* instructions

Use 3DSTATE_URB_ALLOC_* instruction to program URB for multislice device
config.

In case only one slice is available in the device, SliceN fields will be
ignored by HW.

Signed-off-by: Sagar Ghuge <sagar.ghuge@intel.com>
Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32736>
This commit is contained in:
Sagar Ghuge
2023-09-21 22:03:24 -07:00
committed by Marge Bot
parent 190bde3969
commit 604a384e97
+11
View File
@@ -285,12 +285,23 @@ emit_urb_config(struct blorp_batch *batch,
blorp_pre_emit_urb_config(batch, &urb_cfg);
for (int i = 0; i <= MESA_SHADER_GEOMETRY; i++) {
#if GFX_VER >= 12
blorp_emit(batch, GENX(3DSTATE_URB_ALLOC_VS), urb) {
urb._3DCommandSubOpcode += i;
urb.VSURBEntryAllocationSize = urb_cfg.size[i] - 1;
urb.VSURBStartingAddressSlice0 = urb_cfg.start[i];
urb.VSURBStartingAddressSliceN = urb_cfg.start[i];
urb.VSNumberofURBEntriesSlice0 = urb_cfg.entries[i];
urb.VSNumberofURBEntriesSliceN = urb_cfg.entries[i];
}
#else
blorp_emit(batch, GENX(3DSTATE_URB_VS), urb) {
urb._3DCommandSubOpcode += i;
urb.VSURBStartingAddress = urb_cfg.start[i];
urb.VSURBEntryAllocationSize = urb_cfg.size[i] - 1;
urb.VSNumberofURBEntries = urb_cfg.entries[i];
}
#endif
}
if (batch->blorp->config.use_mesh_shading) {