=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: vkd3d: Implement primitive restart.

Alexandre Julliard julliard at winehq.org
Mon Dec 3 15:23:59 CST 2018


Module: vkd3d
Branch: master
Commit: afb648d19da2f645f09771240f257e6d85fd0301
URL:    https://source.winehq.org/git/vkd3d.git/?a=commit;h=afb648d19da2f645f09771240f257e6d85fd0301

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Mon Dec  3 11:31:28 2018 +0100

vkd3d: Implement primitive restart.

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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 1fefb61..03d8ef3 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 2fc31da..f977559 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;




More information about the wine-cvs mailing list