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