=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: d3d11: Sanitize buffer view flags.

Alexandre Julliard julliard at winehq.org
Mon Sep 19 10:32:13 CDT 2016


Module: wine
Branch: master
Commit: 9c0212267fc587979d5e289667635b5e8a07043f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9c0212267fc587979d5e289667635b5e8a07043f

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Sun Sep 18 16:18:13 2016 +0200

d3d11: Sanitize buffer view flags.

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>

---

 dlls/d3d11/view.c | 25 +++++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/dlls/d3d11/view.c b/dlls/d3d11/view.c
index 205513d..d670cb2 100644
--- a/dlls/d3d11/view.c
+++ b/dlls/d3d11/view.c
@@ -2061,6 +2061,16 @@ static const struct ID3D10ShaderResourceView1Vtbl d3d10_shader_resource_view_vtb
     d3d10_shader_resource_view_GetDesc1,
 };
 
+static unsigned int wined3d_view_flags_from_d3d11_bufferex_flags(unsigned int d3d11_flags)
+{
+    unsigned int wined3d_flags = d3d11_flags & WINED3D_VIEW_BUFFER_RAW;
+
+    if (d3d11_flags != wined3d_flags)
+        FIXME("Unhandled flags %#x.\n", d3d11_flags & ~wined3d_flags);
+
+    return wined3d_flags;
+}
+
 static HRESULT wined3d_shader_resource_view_desc_from_d3d11(struct wined3d_shader_resource_view_desc *wined3d_desc,
         const D3D11_SHADER_RESOURCE_VIEW_DESC *desc)
 {
@@ -2143,7 +2153,7 @@ static HRESULT wined3d_shader_resource_view_desc_from_d3d11(struct wined3d_shade
             break;
 
         case D3D11_SRV_DIMENSION_BUFFEREX:
-            wined3d_desc->flags = desc->u.BufferEx.Flags;
+            wined3d_desc->flags = wined3d_view_flags_from_d3d11_bufferex_flags(desc->u.BufferEx.Flags);
             wined3d_desc->u.buffer.start_idx = desc->u.BufferEx.FirstElement;
             wined3d_desc->u.buffer.count = desc->u.BufferEx.NumElements;
             break;
@@ -2381,6 +2391,17 @@ static const struct ID3D11UnorderedAccessViewVtbl d3d11_unordered_access_view_vt
     d3d11_unordered_access_view_GetDesc,
 };
 
+static unsigned int wined3d_view_flags_from_d3d11_buffer_uav_flags(unsigned int d3d11_flags)
+{
+    unsigned int wined3d_flags = d3d11_flags & (WINED3D_VIEW_BUFFER_RAW
+            | WINED3D_VIEW_BUFFER_APPEND | WINED3D_VIEW_BUFFER_COUNTER);
+
+    if (d3d11_flags != wined3d_flags)
+        FIXME("Unhandled flags %#x.\n", d3d11_flags & ~wined3d_flags);
+
+    return wined3d_flags;
+}
+
 static HRESULT wined3d_unordered_access_view_desc_from_d3d11(struct wined3d_unordered_access_view_desc *wined3d_desc,
         const D3D11_UNORDERED_ACCESS_VIEW_DESC *desc)
 {
@@ -2390,7 +2411,7 @@ static HRESULT wined3d_unordered_access_view_desc_from_d3d11(struct wined3d_unor
     switch (desc->ViewDimension)
     {
         case D3D11_UAV_DIMENSION_BUFFER:
-            wined3d_desc->flags = desc->u.Buffer.Flags;
+            wined3d_desc->flags = wined3d_view_flags_from_d3d11_buffer_uav_flags(desc->u.Buffer.Flags);
             wined3d_desc->u.buffer.start_idx = desc->u.Buffer.FirstElement;
             wined3d_desc->u.buffer.count = desc->u.Buffer.NumElements;
             break;




More information about the wine-cvs mailing list