mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-21 17:38:08 +02:00
panvk: Move cmd_bind_shaders() to panvk_vX_shader.c
We had planned for a CSF specialization, but it turns out the CSF/JM are almost the same and we can have something generic implemented in panvk_vX_shader.c Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Rebecca Mckeever <rebecca.mckeever@collabora.com> Reviewed-by: Mary Guillemard <mary.guillemard@collabora.com> Reviewed-by: Lars-Ivar Hesselberg Simonsen <lars-ivar.simonsen@arm.com> Reviewed-by: John Anthony <john.anthony@arm.com> Acked-by: Erik Faye-Lund <erik.faye-lund@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30969>
This commit is contained in:
parent
0426c14c7a
commit
173939ed9b
2 changed files with 50 additions and 45 deletions
|
|
@ -456,47 +456,3 @@ panvk_per_arch(CmdPushConstants2KHR)(
|
|||
|
||||
panvk_cmd_push_constants(&cmdbuf->state.push_constants, pPushConstantsInfo);
|
||||
}
|
||||
|
||||
static void
|
||||
panvk_cmd_bind_shader(struct panvk_cmd_buffer *cmd, const gl_shader_stage stage,
|
||||
struct panvk_shader *shader)
|
||||
{
|
||||
switch (stage) {
|
||||
case MESA_SHADER_COMPUTE:
|
||||
cmd->state.compute.shader = shader;
|
||||
memset(&cmd->state.compute.cs.desc, 0,
|
||||
sizeof(cmd->state.compute.cs.desc));
|
||||
break;
|
||||
case MESA_SHADER_VERTEX:
|
||||
cmd->state.gfx.vs.shader = shader;
|
||||
cmd->state.gfx.linked = false;
|
||||
memset(&cmd->state.gfx.vs.desc, 0, sizeof(cmd->state.gfx.vs.desc));
|
||||
break;
|
||||
case MESA_SHADER_FRAGMENT:
|
||||
cmd->state.gfx.fs.shader = shader;
|
||||
cmd->state.gfx.linked = false;
|
||||
cmd->state.gfx.fs.rsd = 0;
|
||||
memset(&cmd->state.gfx.fs.desc, 0, sizeof(cmd->state.gfx.fs.desc));
|
||||
break;
|
||||
default:
|
||||
assert(!"Unsupported stage");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
panvk_per_arch(cmd_bind_shaders)(struct vk_command_buffer *vk_cmd,
|
||||
uint32_t stage_count,
|
||||
const gl_shader_stage *stages,
|
||||
struct vk_shader **const shaders)
|
||||
{
|
||||
struct panvk_cmd_buffer *cmd =
|
||||
container_of(vk_cmd, struct panvk_cmd_buffer, vk);
|
||||
|
||||
for (uint32_t i = 0; i < stage_count; i++) {
|
||||
struct panvk_shader *shader =
|
||||
container_of(shaders[i], struct panvk_shader, vk);
|
||||
|
||||
panvk_cmd_bind_shader(cmd, stages[i], shader);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1323,6 +1323,55 @@ static const struct vk_shader_ops panvk_shader_ops = {
|
|||
panvk_shader_get_executable_internal_representations,
|
||||
};
|
||||
|
||||
/* FIXME: make this unconditional when the CSF command buffer logic is
|
||||
* implemented. */
|
||||
#if PAN_ARCH <= 7
|
||||
static void
|
||||
panvk_cmd_bind_shader(struct panvk_cmd_buffer *cmd, const gl_shader_stage stage,
|
||||
struct panvk_shader *shader)
|
||||
{
|
||||
switch (stage) {
|
||||
case MESA_SHADER_COMPUTE:
|
||||
cmd->state.compute.shader = shader;
|
||||
memset(&cmd->state.compute.cs.desc, 0,
|
||||
sizeof(cmd->state.compute.cs.desc));
|
||||
break;
|
||||
case MESA_SHADER_VERTEX:
|
||||
cmd->state.gfx.vs.shader = shader;
|
||||
cmd->state.gfx.linked = false;
|
||||
memset(&cmd->state.gfx.vs.desc, 0, sizeof(cmd->state.gfx.vs.desc));
|
||||
break;
|
||||
case MESA_SHADER_FRAGMENT:
|
||||
cmd->state.gfx.fs.shader = shader;
|
||||
cmd->state.gfx.linked = false;
|
||||
#if PAN_ARCH <= 7
|
||||
cmd->state.gfx.fs.rsd = 0;
|
||||
#endif
|
||||
memset(&cmd->state.gfx.fs.desc, 0, sizeof(cmd->state.gfx.fs.desc));
|
||||
break;
|
||||
default:
|
||||
assert(!"Unsupported stage");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
panvk_cmd_bind_shaders(struct vk_command_buffer *vk_cmd, uint32_t stage_count,
|
||||
const gl_shader_stage *stages,
|
||||
struct vk_shader **const shaders)
|
||||
{
|
||||
struct panvk_cmd_buffer *cmd =
|
||||
container_of(vk_cmd, struct panvk_cmd_buffer, vk);
|
||||
|
||||
for (uint32_t i = 0; i < stage_count; i++) {
|
||||
struct panvk_shader *shader =
|
||||
container_of(shaders[i], struct panvk_shader, vk);
|
||||
|
||||
panvk_cmd_bind_shader(cmd, stages[i], shader);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
const struct vk_device_shader_ops panvk_per_arch(device_shader_ops) = {
|
||||
.get_nir_options = panvk_get_nir_options,
|
||||
.get_spirv_options = panvk_get_spirv_options,
|
||||
|
|
@ -1335,6 +1384,6 @@ const struct vk_device_shader_ops panvk_per_arch(device_shader_ops) = {
|
|||
/* FIXME: make the assignment unconditional when the CSF command buffer logic is
|
||||
* implemented. */
|
||||
#if PAN_ARCH <= 7
|
||||
.cmd_bind_shaders = panvk_per_arch(cmd_bind_shaders),
|
||||
.cmd_bind_shaders = panvk_cmd_bind_shaders,
|
||||
#endif
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue