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