[PATCH vkd3d 3/6] vkd3d: Implement primitive restart.

Józef Kucia joseph.kucia at gmail.com
Mon Dec 3 04:31:28 CST 2018


From: Józef Kucia <jkucia at codeweavers.com>

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
 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 1fefb6149cff..03d8ef35ffd2 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 2fc31da08a96..f97755925888 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;
-- 
2.18.1




More information about the wine-devel mailing list