diff options
author | Philip Rebohle <philip.rebohle@tu-dortmund.de> | 2022-09-08 16:18:13 +0300 |
---|---|---|
committer | Hans-Kristian Arntzen <post@arntzen-software.no> | 2022-09-08 17:33:08 +0300 |
commit | 2be740beb15ca46b9f560d5de3130753a3df4603 (patch) | |
tree | 4b4204cbba6752327e6cd7647e00d2b779a2a7f6 | |
parent | 6673bd875497fdf2735e41b7f0b60ea566b4b653 (diff) |
vkd3d: Introduce VKD3D_PIPELINE_TYPE_MESH_GRAPHICS.
This is required to use the correct pipeline layout for
mesh shading pipelines.
Signed-off-by: Philip Rebohle <philip.rebohle@tu-dortmund.de>
-rw-r--r-- | libs/vkd3d/command.c | 6 | ||||
-rw-r--r-- | libs/vkd3d/state.c | 3 | ||||
-rw-r--r-- | libs/vkd3d/vkd3d_private.h | 9 |
3 files changed, 14 insertions, 4 deletions
diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c index 0a321321..7f558fe1 100644 --- a/libs/vkd3d/command.c +++ b/libs/vkd3d/command.c @@ -7512,7 +7512,8 @@ static void STDMETHODCALLTYPE d3d12_command_list_SetPipelineState(d3d12_command_ { TRACE("Binding compute module with hash: %016"PRIx64".\n", state->compute.code.meta.hash); } - else if (state->pipeline_type == VKD3D_PIPELINE_TYPE_GRAPHICS) + else if (state->pipeline_type == VKD3D_PIPELINE_TYPE_GRAPHICS || + state->pipeline_type == VKD3D_PIPELINE_TYPE_MESH_GRAPHICS) { for (i = 0; i < state->graphics.stage_count; i++) { @@ -7535,7 +7536,8 @@ static void STDMETHODCALLTYPE d3d12_command_list_SetPipelineState(d3d12_command_ cmd.shader.stage = VK_SHADER_STAGE_COMPUTE_BIT; vkd3d_breadcrumb_tracer_add_command(list, &cmd); } - else if (state->pipeline_type == VKD3D_PIPELINE_TYPE_GRAPHICS) + else if (state->pipeline_type == VKD3D_PIPELINE_TYPE_GRAPHICS || + state->pipeline_type == VKD3D_PIPELINE_TYPE_MESH_GRAPHICS) { for (i = 0; i < state->graphics.stage_count; i++) { diff --git a/libs/vkd3d/state.c b/libs/vkd3d/state.c index 3d76049d..9303fd0c 100644 --- a/libs/vkd3d/state.c +++ b/libs/vkd3d/state.c @@ -3700,7 +3700,8 @@ bool d3d12_pipeline_state_has_replaced_shaders(struct d3d12_pipeline_state *stat unsigned int i; if (state->pipeline_type == VKD3D_PIPELINE_TYPE_COMPUTE) return !!(state->compute.code.meta.flags & VKD3D_SHADER_META_FLAG_REPLACED); - else if (state->pipeline_type == VKD3D_PIPELINE_TYPE_GRAPHICS) + else if (state->pipeline_type == VKD3D_PIPELINE_TYPE_GRAPHICS || + state->pipeline_type == VKD3D_PIPELINE_TYPE_MESH_GRAPHICS) { for (i = 0; i < state->graphics.stage_count; i++) if (state->graphics.code[i].meta.flags & VKD3D_SHADER_META_FLAG_REPLACED) diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index c71019dc..92eed5ca 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -1373,6 +1373,7 @@ enum vkd3d_pipeline_type { VKD3D_PIPELINE_TYPE_NONE, VKD3D_PIPELINE_TYPE_GRAPHICS, + VKD3D_PIPELINE_TYPE_MESH_GRAPHICS, VKD3D_PIPELINE_TYPE_COMPUTE, VKD3D_PIPELINE_TYPE_RAY_TRACING, }; @@ -1384,6 +1385,7 @@ static inline VkPipelineBindPoint vk_bind_point_from_pipeline_type(enum vkd3d_pi case VKD3D_PIPELINE_TYPE_NONE: break; case VKD3D_PIPELINE_TYPE_GRAPHICS: + case VKD3D_PIPELINE_TYPE_MESH_GRAPHICS: return VK_PIPELINE_BIND_POINT_GRAPHICS; case VKD3D_PIPELINE_TYPE_COMPUTE: return VK_PIPELINE_BIND_POINT_COMPUTE; @@ -1531,6 +1533,9 @@ static inline const struct d3d12_bind_point_layout *d3d12_root_signature_get_lay case VKD3D_PIPELINE_TYPE_GRAPHICS: return &root_signature->graphics; + case VKD3D_PIPELINE_TYPE_MESH_GRAPHICS: + return &root_signature->mesh; + case VKD3D_PIPELINE_TYPE_COMPUTE: return &root_signature->compute; @@ -1677,7 +1682,8 @@ static inline bool d3d12_pipeline_state_is_compute(const struct d3d12_pipeline_s static inline bool d3d12_pipeline_state_is_graphics(const struct d3d12_pipeline_state *state) { - return state && state->pipeline_type == VKD3D_PIPELINE_TYPE_GRAPHICS; + return state && (state->pipeline_type == VKD3D_PIPELINE_TYPE_GRAPHICS || + state->pipeline_type == VKD3D_PIPELINE_TYPE_MESH_GRAPHICS); } /* This returns true for invalid D3D12 API usage. Game intends to use depth-stencil tests, @@ -2333,6 +2339,7 @@ static inline struct vkd3d_pipeline_bindings *d3d12_command_list_get_bindings( break; case VKD3D_PIPELINE_TYPE_GRAPHICS: + case VKD3D_PIPELINE_TYPE_MESH_GRAPHICS: return &list->graphics_bindings; case VKD3D_PIPELINE_TYPE_COMPUTE: |