From afb648d19da2f645f09771240f257e6d85fd0301 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B3zef=20Kucia?= Date: Mon, 3 Dec 2018 11:31:28 +0100 Subject: [PATCH] vkd3d: Implement primitive restart. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Józef Kucia Signed-off-by: Henri Verbeet Signed-off-by: Alexandre Julliard --- libs/vkd3d/state.c | 17 ++++++++++++++++- libs/vkd3d/vkd3d_private.h | 1 + 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/libs/vkd3d/state.c b/libs/vkd3d/state.c index 1fefb614..03d8ef35 100644 --- a/libs/vkd3d/state.c +++ b/libs/vkd3d/state.c @@ -2233,6 +2233,21 @@ static HRESULT d3d12_pipeline_state_init_graphics(struct d3d12_pipeline_state *s graphics->attribute_count = j; vkd3d_shader_free_shader_signature(&input_signature); + switch (desc->IBStripCutValue) + { + case D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED: + graphics->primitive_restart_enable = VK_FALSE; + break; + case D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFF: + case D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFFFFFF: + graphics->primitive_restart_enable = VK_TRUE; + break; + default: + WARN("Invalid index buffer strip cut value %#x.\n", desc->IBStripCutValue); + hr = E_INVALIDARG; + goto fail; + } + sub_pass_desc.flags = 0; sub_pass_desc.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS; sub_pass_desc.inputAttachmentCount = 0; @@ -2491,7 +2506,7 @@ VkPipeline d3d12_pipeline_state_get_or_create_pipeline(struct d3d12_pipeline_sta ia_desc.pNext = NULL; ia_desc.flags = 0; ia_desc.topology = topology; - ia_desc.primitiveRestartEnable = VK_FALSE; + ia_desc.primitiveRestartEnable = graphics->primitive_restart_enable; blend_desc.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO; blend_desc.pNext = NULL; diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index 2fc31da0..f9775592 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -531,6 +531,7 @@ struct d3d12_graphics_pipeline_state size_t attachment_count, rt_idx; VkRenderPass render_pass; + VkBool32 primitive_restart_enable; struct VkPipelineRasterizationStateCreateInfo rs_desc; struct VkPipelineMultisampleStateCreateInfo ms_desc; struct VkPipelineDepthStencilStateCreateInfo ds_desc;