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