Henri Verbeet : wined3d: Implement sample masks for the Vulkan adapter.

Alexandre Julliard julliard at winehq.org
Thu Sep 24 15:49:06 CDT 2020


Module: wine
Branch: master
Commit: 69ba059dcb352c3316f5cc1917b2e4e8e5648f47
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=69ba059dcb352c3316f5cc1917b2e4e8e5648f47

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Thu Sep 24 16:19:25 2020 +0330

wined3d: Implement sample masks for the Vulkan adapter.

Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wined3d/context_vk.c      | 12 +++++++++---
 dlls/wined3d/wined3d_private.h |  1 +
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/dlls/wined3d/context_vk.c b/dlls/wined3d/context_vk.c
index aef2430208..a4f5f317f1 100644
--- a/dlls/wined3d/context_vk.c
+++ b/dlls/wined3d/context_vk.c
@@ -1635,8 +1635,12 @@ static int wined3d_graphics_pipeline_vk_compare(const void *key, const struct wi
     if ((ret = memcmp(&a->rs_desc, &b->rs_desc, sizeof(a->rs_desc))))
         return ret;
 
-    if ((ret = memcmp(&a->ms_desc, &b->ms_desc, sizeof(a->ms_desc))))
-        return ret;
+    if (a->ms_desc.rasterizationSamples != b->ms_desc.rasterizationSamples)
+        return a->ms_desc.rasterizationSamples - b->ms_desc.rasterizationSamples;
+    if (a->ms_desc.alphaToCoverageEnable != b->ms_desc.alphaToCoverageEnable)
+        return a->ms_desc.alphaToCoverageEnable - b->ms_desc.alphaToCoverageEnable;
+    if (a->sample_mask != b->sample_mask)
+        return a->sample_mask - b->sample_mask;
 
     if ((ret = memcmp(&a->ds_desc, &b->ds_desc, sizeof(a->ds_desc))))
         return ret;
@@ -1710,6 +1714,7 @@ static void wined3d_context_vk_init_graphics_pipeline_key(struct wined3d_context
     key->rs_desc.lineWidth = 1.0f;
 
     key->ms_desc.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;
+    key->ms_desc.pSampleMask = &key->sample_mask;
 
     key->ds_desc.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO;
     key->ds_desc.maxDepthBounds = 1.0f;
@@ -2020,10 +2025,11 @@ static bool wined3d_context_vk_update_graphics_pipeline_key(struct wined3d_conte
     }
 
     if (key->ms_desc.rasterizationSamples != context_vk->sample_count
-            || isStateDirty(&context_vk->c, STATE_BLEND))
+            || isStateDirty(&context_vk->c, STATE_BLEND) || isStateDirty(&context_vk->c, STATE_SAMPLE_MASK))
     {
         key->ms_desc.rasterizationSamples = context_vk->sample_count;
         key->ms_desc.alphaToCoverageEnable = state->blend_state && state->blend_state->desc.alpha_to_coverage;
+        key->sample_mask = state->sample_mask;
 
         update = true;
     }
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 24a9212ae0..b0bf863d21 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2386,6 +2386,7 @@ struct wined3d_graphics_pipeline_key_vk
     VkVertexInputBindingDescription bindings[MAX_ATTRIBS];
     VkViewport viewport;
     VkRect2D scissor;
+    VkSampleMask sample_mask;
     VkPipelineColorBlendAttachmentState blend_attachments[WINED3D_MAX_RENDER_TARGETS];
 
     VkPipelineVertexInputDivisorStateCreateInfoEXT divisor_desc;




More information about the wine-cvs mailing list