=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: vkd3d: Avoid allocating memory in d3d12_command_list_RSSetScissorRects().

Alexandre Julliard julliard at winehq.org
Tue Jun 11 16:49:24 CDT 2019


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

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Tue Jun 11 10:13:33 2019 +0200

vkd3d: Avoid allocating memory in d3d12_command_list_RSSetScissorRects().

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/command.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c
index ec9e25d..cb7f086 100644
--- a/libs/vkd3d/command.c
+++ b/libs/vkd3d/command.c
@@ -3562,7 +3562,11 @@ static void STDMETHODCALLTYPE d3d12_command_list_RSSetViewports(ID3D12GraphicsCo
 
     TRACE("iface %p, viewport_count %u, viewports %p.\n", iface, viewport_count, viewports);
 
-    assert(viewport_count <= D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE);
+    if (viewport_count > ARRAY_SIZE(vk_viewports))
+    {
+        FIXME("Viewport count %u > D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE.\n", viewport_count);
+        viewport_count = ARRAY_SIZE(vk_viewports);
+    }
 
     for (i = 0; i < viewport_count; ++i)
     {
@@ -3588,16 +3592,16 @@ static void STDMETHODCALLTYPE d3d12_command_list_RSSetScissorRects(ID3D12Graphic
         UINT rect_count, const D3D12_RECT *rects)
 {
     struct d3d12_command_list *list = impl_from_ID3D12GraphicsCommandList1(iface);
+    VkRect2D vk_rects[D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE];
     const struct vkd3d_vk_device_procs *vk_procs;
-    struct VkRect2D *vk_rects;
     unsigned int i;
 
     TRACE("iface %p, rect_count %u, rects %p.\n", iface, rect_count, rects);
 
-    if (!(vk_rects = vkd3d_calloc(rect_count, sizeof(*vk_rects))))
+    if (rect_count > ARRAY_SIZE(vk_rects))
     {
-        ERR("Failed to allocate Vulkan scissor rects.\n");
-        return;
+        FIXME("Rect count %u > D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE.\n", rect_count);
+        rect_count = ARRAY_SIZE(vk_rects);
     }
 
     for (i = 0; i < rect_count; ++i)
@@ -3610,8 +3614,6 @@ static void STDMETHODCALLTYPE d3d12_command_list_RSSetScissorRects(ID3D12Graphic
 
     vk_procs = &list->device->vk_procs;
     VK_CALL(vkCmdSetScissor(list->vk_command_buffer, 0, rect_count, vk_rects));
-
-    free(vk_rects);
 }
 
 static void STDMETHODCALLTYPE d3d12_command_list_OMSetBlendFactor(ID3D12GraphicsCommandList1 *iface,




More information about the wine-cvs mailing list