Henri Verbeet : wined3d: Handle a few more border colours for Vulkan samplers.

Alexandre Julliard julliard at winehq.org
Thu Mar 25 16:49:22 CDT 2021


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Thu Mar 25 16:46:40 2021 +0100

wined3d: Handle a few more border colours for Vulkan samplers.

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

---

 dlls/wined3d/sampler.c | 35 +++++++++++++++++++++++++++++------
 1 file changed, 29 insertions(+), 6 deletions(-)

diff --git a/dlls/wined3d/sampler.c b/dlls/wined3d/sampler.c
index 9381c5d3fb9..7eb3a2ae0be 100644
--- a/dlls/wined3d/sampler.c
+++ b/dlls/wined3d/sampler.c
@@ -172,6 +172,33 @@ static VkSamplerAddressMode vk_address_mode_from_wined3d(enum wined3d_texture_ad
     }
 }
 
+static VkBorderColor vk_border_colour_from_wined3d(const struct wined3d_color *colour)
+{
+    unsigned int i;
+
+    static const struct
+    {
+        struct wined3d_color wined3d_colour;
+        VkBorderColor vk_colour;
+    }
+    colours[] =
+    {
+        {{0.0f, 0.0f, 0.0f, 0.0f}, VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK},
+        {{0.0f, 0.0f, 0.0f, 1.0f}, VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK},
+        {{1.0f, 1.0f, 1.0f, 1.0f}, VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE},
+    };
+
+    for (i = 0; i < ARRAY_SIZE(colours); ++i)
+    {
+        if (!memcmp(&colours[i], colour, sizeof(*colour)))
+            return colours[i].vk_colour;
+    }
+
+    FIXME("Unhandled border colour {%.8e, %.8e, %.8e, %.8e}.\n", colour->r, colour->g, colour->b, colour->a);
+
+    return VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK;
+}
+
 static void wined3d_sampler_vk_cs_init(void *object)
 {
     struct wined3d_sampler_vk *sampler_vk = object;
@@ -211,13 +238,9 @@ static void wined3d_sampler_vk_cs_init(void *object)
     sampler_desc.borderColor = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK;
     sampler_desc.unnormalizedCoordinates = VK_FALSE;
 
-    if ((desc->address_u == WINED3D_TADDRESS_BORDER || desc->address_v == WINED3D_TADDRESS_BORDER
+    if (desc->address_u == WINED3D_TADDRESS_BORDER || desc->address_v == WINED3D_TADDRESS_BORDER
             || desc->address_w == WINED3D_TADDRESS_BORDER)
-            && (desc->border_color[0] != 0.0f || desc->border_color[1] != 0.0f
-            || desc->border_color[2] != 0.0f || desc->border_color[3] != 0.0f))
-        FIXME("Unhandled border colour {%.8e, %.8e, %.8e, %.8e}.\n",
-                desc->border_color[0], desc->border_color[1],
-                desc->border_color[2], desc->border_color[3]);
+        sampler_desc.borderColor = vk_border_colour_from_wined3d((const struct wined3d_color *)desc->border_color);
     if (desc->mip_base_level)
         FIXME("Unhandled mip_base_level %u.\n", desc->mip_base_level);
     if ((d3d_info->wined3d_creation_flags & WINED3D_SRGB_READ_WRITE_CONTROL) && !desc->srgb_decode)




More information about the wine-cvs mailing list