mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 23:50:11 +01:00
nvk: Add a helper for dispatching compute shaders
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30826>
This commit is contained in:
parent
83feed1d22
commit
105bdf2e36
2 changed files with 55 additions and 0 deletions
|
|
@ -345,6 +345,13 @@ nvk_cmd_buffer_get_cbuf_descriptor_addr(struct nvk_cmd_buffer *cmd,
|
|||
const struct nvk_descriptor_state *desc,
|
||||
const struct nvk_cbuf *cbuf);
|
||||
|
||||
void nvk_cmd_dispatch_shader(struct nvk_cmd_buffer *cmd,
|
||||
struct nvk_shader *shader,
|
||||
const void *push_data, size_t push_size,
|
||||
uint32_t groupCountX,
|
||||
uint32_t groupCountY,
|
||||
uint32_t groupCountZ);
|
||||
|
||||
void nvk_meta_resolve_rendering(struct nvk_cmd_buffer *cmd,
|
||||
const VkRenderingInfo *pRenderingInfo);
|
||||
|
||||
|
|
|
|||
|
|
@ -278,6 +278,54 @@ nvk_CmdDispatchBase(VkCommandBuffer commandBuffer,
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
nvk_cmd_dispatch_shader(struct nvk_cmd_buffer *cmd,
|
||||
struct nvk_shader *shader,
|
||||
const void *push_data, size_t push_size,
|
||||
uint32_t groupCountX,
|
||||
uint32_t groupCountY,
|
||||
uint32_t groupCountZ)
|
||||
{
|
||||
struct nvk_root_descriptor_table root = {
|
||||
.cs.group_count = {
|
||||
groupCountX,
|
||||
groupCountY,
|
||||
groupCountZ,
|
||||
},
|
||||
};
|
||||
assert(push_size <= sizeof(root.push));
|
||||
memcpy(root.push, push_data, push_size);
|
||||
|
||||
uint64_t qmd_addr;
|
||||
VkResult result = nvk_cmd_upload_qmd(cmd, shader, NULL, &root,
|
||||
root.cs.group_count,
|
||||
&qmd_addr, NULL);
|
||||
if (result != VK_SUCCESS) {
|
||||
vk_command_buffer_set_error(&cmd->vk, result);
|
||||
return;
|
||||
}
|
||||
|
||||
struct nv_push *p = nvk_cmd_buffer_push(cmd, 8);
|
||||
|
||||
/* Internal shaders don't want conditional rendering */
|
||||
P_IMMD(p, NVA0C0, SET_RENDER_ENABLE_OVERRIDE, MODE_ALWAYS_RENDER);
|
||||
|
||||
P_MTHD(p, NVA0C0, SEND_PCAS_A);
|
||||
P_NVA0C0_SEND_PCAS_A(p, qmd_addr >> 8);
|
||||
|
||||
if (nvk_cmd_buffer_compute_cls(cmd) <= TURING_COMPUTE_A) {
|
||||
P_IMMD(p, NVA0C0, SEND_SIGNALING_PCAS_B, {
|
||||
.invalidate = INVALIDATE_TRUE,
|
||||
.schedule = SCHEDULE_TRUE
|
||||
});
|
||||
} else {
|
||||
P_IMMD(p, NVC6C0, SEND_SIGNALING_PCAS2_B,
|
||||
PCAS_ACTION_INVALIDATE_COPY_SCHEDULE);
|
||||
}
|
||||
|
||||
P_IMMD(p, NVA0C0, SET_RENDER_ENABLE_OVERRIDE, MODE_USE_RENDER_ENABLE);
|
||||
}
|
||||
|
||||
static void
|
||||
mme_store_global(struct mme_builder *b,
|
||||
struct mme_value64 addr,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue