Kolbjørn Fredheim : ddraw: Don' t clear the return value anymore, we fill the fields anyway, also a test for the behaviour.

Alexandre Julliard julliard at winehq.org
Tue Mar 25 06:58:26 CDT 2008


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

Author: Kolbjørn Fredheim <coolbeer1980 at yahoo.com>
Date:   Sun Mar 23 17:17:21 2008 +0100

ddraw: Don't clear the return value anymore, we fill the fields anyway, also a test for the behaviour.

---

 dlls/ddraw/tests/d3d.c    |   62 +++++++++++++++++++++++++++++++++++++++++++++
 dlls/ddraw/vertexbuffer.c |    6 ----
 2 files changed, 62 insertions(+), 6 deletions(-)

diff --git a/dlls/ddraw/tests/d3d.c b/dlls/ddraw/tests/d3d.c
index 4e827a5..9281b37 100644
--- a/dlls/ddraw/tests/d3d.c
+++ b/dlls/ddraw/tests/d3d.c
@@ -1530,6 +1530,67 @@ static void TextureLoadTest(void)
     if (Texture2) IDirect3DTexture_Release(Texture2);
 }
 
+static void VertexBufferDescTest(void)
+{
+    HRESULT rc;
+    D3DVERTEXBUFFERDESC desc;
+    union mem_t
+    {
+        D3DVERTEXBUFFERDESC desc2;
+        unsigned char buffer[512];
+    } mem;
+
+    memset(&desc, 0, sizeof(desc));
+    desc.dwSize = sizeof(desc);
+    desc.dwCaps = 0;
+    desc.dwFVF = D3DFVF_XYZ;
+    desc.dwNumVertices = 1;
+    rc = IDirect3D7_CreateVertexBuffer(lpD3D, &desc, &lpVBufSrc, 0);
+    ok(rc==D3D_OK || rc==E_OUTOFMEMORY, "CreateVertexBuffer returned: %x\n", rc);
+    if (!lpVBufSrc)
+    {
+        trace("IDirect3D7::CreateVertexBuffer() failed with an error %x\n", rc);
+        goto out;
+    }
+
+    memset(mem.buffer, 0x12, sizeof(mem.buffer));
+    mem.desc2.dwSize = sizeof(D3DVERTEXBUFFERDESC)*2;
+    rc = IDirect3DVertexBuffer7_GetVertexBufferDesc(lpVBufSrc, &mem.desc2);
+    if(rc != D3D_OK)
+        skip("GetVertexBuffer Failed!\n");
+    ok( mem.desc2.dwSize == sizeof(D3DVERTEXBUFFERDESC)*2, "Size returned from GetVertexBufferDesc does not match the value put in\n" );
+    ok( mem.buffer[sizeof(D3DVERTEXBUFFERDESC)] == 0x12, "GetVertexBufferDesc cleared outside of the struct! (dwSize was double the size of the struct)\n");
+    ok( mem.desc2.dwCaps == desc.dwCaps, "dwCaps returned differs. Got %x, expected %x \n", mem.desc2.dwCaps, desc.dwCaps);
+    ok( mem.desc2.dwFVF == desc.dwFVF, "dwFVF returned differs. Got %x, expected %x \n", mem.desc2.dwFVF, desc.dwFVF);
+    ok (mem.desc2.dwNumVertices == desc.dwNumVertices, "dwNumVertices returned differs. Got %x, expected %x\n", mem.desc2.dwNumVertices, desc.dwNumVertices);
+
+    memset(mem.buffer, 0x12, sizeof(mem.buffer));
+    mem.desc2.dwSize = 0;
+    rc = IDirect3DVertexBuffer7_GetVertexBufferDesc(lpVBufSrc, &mem.desc2);
+    if(rc != D3D_OK)
+        skip("GetVertexBuffer Failed!\n");
+    ok( mem.desc2.dwSize == 0, "Size returned from GetVertexBufferDesc does not match the value put in\n" );
+    ok( mem.buffer[sizeof(D3DVERTEXBUFFERDESC)] == 0x12, "GetVertexBufferDesc cleared outside of the struct! (dwSize was 0)\n");
+    ok( mem.desc2.dwCaps == desc.dwCaps, "dwCaps returned differs. Got %x, expected %x \n", mem.desc2.dwCaps, desc.dwCaps);
+    ok( mem.desc2.dwFVF == desc.dwFVF, "dwFVF returned differs. Got %x, expected %x \n", mem.desc2.dwFVF, desc.dwFVF);
+    ok (mem.desc2.dwNumVertices == desc.dwNumVertices, "dwNumVertices returned differs. Got %x, expected %x\n", mem.desc2.dwNumVertices, desc.dwNumVertices);
+
+    memset(mem.buffer, 0x12, sizeof(mem.buffer));
+    mem.desc2.dwSize = sizeof(D3DVERTEXBUFFERDESC);
+    rc = IDirect3DVertexBuffer7_GetVertexBufferDesc(lpVBufSrc, &mem.desc2);
+    if(rc != D3D_OK)
+        skip("GetVertexBuffer Failed!\n");
+    ok( mem.desc2.dwSize == sizeof(D3DVERTEXBUFFERDESC), "Size returned from GetVertexBufferDesc does not match the value put in\n" );
+    ok( mem.buffer[sizeof(D3DVERTEXBUFFERDESC)] == 0x12, "GetVertexBufferDesc cleared outside of the struct! (dwSize was the size of the struct)\n");
+    ok( mem.desc2.dwCaps == desc.dwCaps, "dwCaps returned differs. Got %x, expected %x \n", mem.desc2.dwCaps, desc.dwCaps);
+    ok( mem.desc2.dwFVF == desc.dwFVF, "dwFVF returned differs. Got %x, expected %x \n", mem.desc2.dwFVF, desc.dwFVF);
+    ok (mem.desc2.dwNumVertices == desc.dwNumVertices, "dwNumVertices returned differs. Got %x, expected %x\n", mem.desc2.dwNumVertices, desc.dwNumVertices);
+
+out:
+    IDirect3DVertexBuffer7_Release(lpVBufSrc);
+}
+
+
 START_TEST(d3d)
 {
     init_function_pointers();
@@ -1548,6 +1609,7 @@ START_TEST(d3d)
         LimitTest();
         D3D7EnumTest();
         CapsTest();
+        VertexBufferDescTest();
         ReleaseDirect3D();
     }
 
diff --git a/dlls/ddraw/vertexbuffer.c b/dlls/ddraw/vertexbuffer.c
index 209411b..2469644 100644
--- a/dlls/ddraw/vertexbuffer.c
+++ b/dlls/ddraw/vertexbuffer.c
@@ -454,7 +454,6 @@ IDirect3DVertexBufferImpl_GetVertexBufferDesc(IDirect3DVertexBuffer7 *iface,
     ICOM_THIS_FROM(IDirect3DVertexBufferImpl, IDirect3DVertexBuffer7, iface);
     WINED3DVERTEXBUFFER_DESC WDesc;
     HRESULT hr;
-    DWORD size;
     TRACE("(%p)->(%p)\n", This, Desc);
 
     if(!Desc) return DDERR_INVALIDPARAMS;
@@ -469,12 +468,7 @@ IDirect3DVertexBufferImpl_GetVertexBufferDesc(IDirect3DVertexBuffer7 *iface,
         return hr;
     }
 
-    /* Clear the return value of garbage */
-    size = Desc->dwSize;
-    memset(Desc, 0, size);
-
     /* Now fill the Desc structure */
-    Desc->dwSize = size;
     Desc->dwCaps = This->Caps;
     Desc->dwFVF = WDesc.FVF;
     Desc->dwNumVertices = WDesc.Size / get_flexible_vertex_size(WDesc.FVF);




More information about the wine-cvs mailing list