Module: wine Branch: master Commit: 785e6fa61f2366ca16fb6c1634231aa5ddf5db0e URL: http://source.winehq.org/git/wine.git/?a=commit;h=785e6fa61f2366ca16fb6c1634...
Author: Alexander Dorofeyev alexd4@inbox.lv Date: Sun Mar 9 16:09:26 2008 +0200
d3d8/tests: Cover one more case in p8_texture_test.
Test if a P8 texture gets properly updated if there was a palette change while this texture wasn't bound to any stage.
---
dlls/d3d8/tests/visual.c | 59 ++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 54 insertions(+), 5 deletions(-)
diff --git a/dlls/d3d8/tests/visual.c b/dlls/d3d8/tests/visual.c index 601a33c..f997bc9 100644 --- a/dlls/d3d8/tests/visual.c +++ b/dlls/d3d8/tests/visual.c @@ -914,7 +914,7 @@ static void p8_texture_test(IDirect3DDevice8 *device) { IDirect3D8 *d3d = NULL; HRESULT hr; - IDirect3DTexture8 *texture = NULL; + IDirect3DTexture8 *texture = NULL, *texture2 = NULL; D3DLOCKED_RECT lr; unsigned char *data; DWORD color, red, green, blue; @@ -943,6 +943,23 @@ static void p8_texture_test(IDirect3DDevice8 *device) }
hr = IDirect3DDevice8_CreateTexture(device, 1, 1, 1, 0, D3DFMT_P8, + D3DPOOL_MANAGED, &texture2); + ok(hr == D3D_OK, "IDirect3DDevice8_CreateTexture failed, hr = %08x\n", hr); + if(!texture2) { + skip("Failed to create D3DFMT_P8 texture\n"); + goto out; + } + + memset(&lr, 0, sizeof(lr)); + hr = IDirect3DTexture8_LockRect(texture2, 0, &lr, NULL, 0); + ok(hr == D3D_OK, "IDirect3DTexture8_LockRect failed, hr = %08x\n", hr); + data = lr.pBits; + *data = 1; + + hr = IDirect3DTexture8_UnlockRect(texture2, 0); + ok(hr == D3D_OK, "IDirect3DTexture8_UnlockRect failed, hr = %08x\n", hr); + + hr = IDirect3DDevice8_CreateTexture(device, 1, 1, 1, 0, D3DFMT_P8, D3DPOOL_MANAGED, &texture); ok(hr == D3D_OK, "IDirect3DDevice8_CreateTexture failed, hr = %08x\n", hr); if(!texture) { @@ -959,9 +976,6 @@ static void p8_texture_test(IDirect3DDevice8 *device) hr = IDirect3DTexture8_UnlockRect(texture, 0); ok(hr == D3D_OK, "IDirect3DTexture8_UnlockRect failed, hr = %08x\n", hr);
- hr = IDirect3DDevice8_SetTexture(device, 0, (IDirect3DBaseTexture8 *) texture); - ok(hr == D3D_OK, "IDirect3DDevice8_SetTexture failed, hr = %08x\n", hr); - hr = IDirect3DDevice8_Clear(device, 0, NULL, D3DCLEAR_TARGET, 0xff000000, 0.0, 0); ok(hr == D3D_OK, "IDirect3DDevice8_Clear failed, hr = %08x\n", hr);
@@ -998,12 +1012,18 @@ static void p8_texture_test(IDirect3DDevice8 *device) hr = IDirect3DDevice8_SetCurrentTexturePalette(device, 0); ok(hr == D3D_OK, "IDirect3DDevice8_SetCurrentTexturePalette failed, hr = %08x\n", hr);
+ hr = IDirect3DDevice8_SetTexture(device, 0, (IDirect3DBaseTexture8 *) texture2); + ok(hr == D3D_OK, "IDirect3DDevice8_SetTexture failed, hr = %08x\n", hr); + hr = IDirect3DDevice8_DrawPrimitiveUP(device, D3DPT_TRIANGLESTRIP, 2, quad, 5 * sizeof(float)); + ok(hr == D3D_OK, "IDirect3DDevice8_DrawPrimitiveUP failed, hr = %08x\n", hr); + + hr = IDirect3DDevice8_SetTexture(device, 0, (IDirect3DBaseTexture8 *) texture); + ok(hr == D3D_OK, "IDirect3DDevice8_SetTexture failed, hr = %08x\n", hr); hr = IDirect3DDevice8_DrawPrimitiveUP(device, D3DPT_TRIANGLESTRIP, 2, quad, 5 * sizeof(float)); ok(hr == D3D_OK, "IDirect3DDevice8_DrawPrimitiveUP failed, hr = %08x\n", hr);
hr = IDirect3DDevice8_SetCurrentTexturePalette(device, 1); ok(hr == D3D_OK, "IDirect3DDevice8_SetCurrentTexturePalette failed, hr = %08x\n", hr); - hr = IDirect3DDevice8_DrawPrimitiveUP(device, D3DPT_TRIANGLESTRIP, 2, quad2, 5 * sizeof(float)); ok(hr == D3D_OK, "IDirect3DDevice8_DrawPrimitiveUP failed, hr = %08x\n", hr);
@@ -1030,6 +1050,34 @@ static void p8_texture_test(IDirect3DDevice8 *device) "got color %08x, expected 0x000000ff\n", color); }
+ hr = IDirect3DDevice8_Clear(device, 0, NULL, D3DCLEAR_TARGET, 0xff000000, 0.0, 0); + ok(hr == D3D_OK, "IDirect3DDevice8_Clear failed, hr = %08x\n", hr); + + hr = IDirect3DDevice8_BeginScene(device); + ok(hr == D3D_OK, "IDirect3DDevice8_BeginScene failed, hr = %08x\n", hr); + if(SUCCEEDED(hr)) { + hr = IDirect3DDevice8_SetTexture(device, 0, (IDirect3DBaseTexture8 *) texture2); + ok(hr == D3D_OK, "IDirect3DDevice8_SetTexture failed, hr = %08x\n", hr); + + hr = IDirect3DDevice8_DrawPrimitiveUP(device, D3DPT_TRIANGLESTRIP, 2, quad, 5 * sizeof(float)); + ok(hr == D3D_OK, "IDirect3DDevice8_DrawPrimitiveUP failed, hr = %08x\n", hr); + + hr = IDirect3DDevice8_EndScene(device); + ok(hr == D3D_OK, "IDirect3DDevice8_EndScene failed, hr = %08x\n", hr); + } + + hr = IDirect3DDevice8_Present(device, NULL, NULL, NULL, NULL); + ok(hr == D3D_OK, "IDirect3DDevice8_Present failed, hr = %08x\n", hr); + + todo_wine { + color = getPixelColor(device, 32, 32); + red = (color & 0x00ff0000) >> 16; + green = (color & 0x0000ff00) >> 8; + blue = (color & 0x000000ff) >> 0; + ok(red == 0 && blue == 0xff && green == 0, + "got color %08x, expected 0x000000ff\n", color); + } + /* Test palettes with alpha */ IDirect3DDevice8_GetDeviceCaps(device, &caps); if (!(caps.TextureCaps & D3DPTEXTURECAPS_ALPHAPALETTE)) { @@ -1110,6 +1158,7 @@ static void p8_texture_test(IDirect3DDevice8 *device)
out: if(texture) IDirect3DTexture8_Release(texture); + if(texture2) IDirect3DTexture8_Release(texture2); IDirect3D8_Release(d3d); }