=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: libs/vkd3d: Avoid passing invalid miplevel count to Vulkan.

Alexandre Julliard julliard at winehq.org
Wed Mar 28 16:38:34 CDT 2018


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

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Wed Mar 28 15:03:18 2018 +0200

libs/vkd3d: Avoid passing invalid miplevel count to Vulkan.

Signed-off-by: Józef Kucia <jkucia 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 | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c
index e0ceb4c..81135d3 100644
--- a/libs/vkd3d/resource.c
+++ b/libs/vkd3d/resource.c
@@ -102,6 +102,14 @@ HRESULT vkd3d_create_buffer(struct d3d12_device *device,
     return S_OK;
 }
 
+static unsigned int max_miplevel_count(const D3D12_RESOURCE_DESC *desc)
+{
+    unsigned int size = max(desc->Width, desc->Height);
+    if (desc->Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D)
+        size = max(size, desc->DepthOrArraySize);
+    return vkd3d_log2i(size) + 1;
+}
+
 static HRESULT vkd3d_create_image(struct d3d12_resource *resource, struct d3d12_device *device,
         const D3D12_HEAP_PROPERTIES *heap_properties, D3D12_HEAP_FLAGS heap_flags)
 {
@@ -143,7 +151,7 @@ static HRESULT vkd3d_create_image(struct d3d12_resource *resource, struct d3d12_
         image_info.arrayLayers = desc->DepthOrArraySize;
     }
 
-    image_info.mipLevels = desc->MipLevels;
+    image_info.mipLevels = min(desc->MipLevels, max_miplevel_count(desc));
     image_info.samples = vk_samples_from_dxgi_sample_desc(&desc->SampleDesc);
 
     if (desc->Layout == D3D12_TEXTURE_LAYOUT_UNKNOWN)
@@ -653,12 +661,7 @@ static HRESULT validate_buffer_desc(const D3D12_RESOURCE_DESC *desc)
 static HRESULT validate_texture_desc(D3D12_RESOURCE_DESC *desc)
 {
     if (!desc->MipLevels)
-    {
-        unsigned int size = max(desc->Width, desc->Height);
-        if (desc->Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D)
-            size = max(size, desc->DepthOrArraySize);
-        desc->MipLevels = vkd3d_log2i(size) + 1;
-    }
+        desc->MipLevels = max_miplevel_count(desc);
 
     return S_OK;
 }




More information about the wine-cvs mailing list