Conor McCarthy : vkd3d: Validate dimension alignments for block-compressed textures.

Alexandre Julliard julliard at winehq.org
Wed Nov 27 16:32:20 CST 2019


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

Author: Conor McCarthy <cmccarthy at codeweavers.com>
Date:   Thu Nov 28 00:19:14 2019 +1000

vkd3d: Validate dimension alignments for block-compressed textures.

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

---

 libs/vkd3d/resource.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c
index e7fc366..f40d986 100644
--- a/libs/vkd3d/resource.c
+++ b/libs/vkd3d/resource.c
@@ -1591,6 +1591,29 @@ static void d3d12_validate_resource_flags(D3D12_RESOURCE_FLAGS flags)
         FIXME("Ignoring D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER.\n");
 }
 
+static bool d3d12_resource_validate_texture_format(const D3D12_RESOURCE_DESC *desc,
+        const struct vkd3d_format *format)
+{
+    if (!vkd3d_format_is_compressed(format))
+        return true;
+
+    if (desc->Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE1D && format->block_height > 1)
+    {
+        WARN("1D texture with a format block height > 1.\n");
+        return false;
+    }
+
+    if (align(desc->Width, format->block_width) != desc->Width
+            || align(desc->Height, format->block_height) != desc->Height)
+    {
+        WARN("Invalid size %"PRIu64"x%u for block compressed format %#x.\n",
+                desc->Width, desc->Height, desc->Format);
+        return false;
+    }
+
+    return true;
+}
+
 static bool d3d12_resource_validate_texture_alignment(const D3D12_RESOURCE_DESC *desc,
         const struct vkd3d_format *format)
 {
@@ -1664,7 +1687,8 @@ HRESULT d3d12_resource_validate_desc(const D3D12_RESOURCE_DESC *desc, struct d3d
                 return E_INVALIDARG;
             }
 
-            if (!d3d12_resource_validate_texture_alignment(desc, format))
+            if (!d3d12_resource_validate_texture_format(desc, format)
+                    || !d3d12_resource_validate_texture_alignment(desc, format))
                 return E_INVALIDARG;
             break;
 




More information about the wine-cvs mailing list