Commit 785e6fa6 authored by Alexander Dorofeyev's avatar Alexander Dorofeyev Committed by Alexandre Julliard

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.
parent 8f8076c3
......@@ -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);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment