Commit eea701cc authored by Paul Gofman's avatar Paul Gofman Committed by Alexandre Julliard

d3dx9/tests: Factor out test_effect_preshader_compare_pbool_consts() function.

parent 2a3ad1d2
...@@ -4254,7 +4254,7 @@ static const D3DXVECTOR4 test_effect_preshader_fvect_v[] = ...@@ -4254,7 +4254,7 @@ static const D3DXVECTOR4 test_effect_preshader_fvect_v[] =
{91.0f, 0.0f, 0.0f, 0.0f}, {91.0f, 0.0f, 0.0f, 0.0f},
{4.0f, 5.0f, 6.0f, 7.0f}, {4.0f, 5.0f, 6.0f, 7.0f},
}; };
#define TEST_EFFECT_FVECT_BITMASK_BLOCK_SIZE (sizeof(unsigned int) * 8) #define TEST_EFFECT_BITMASK_BLOCK_SIZE (sizeof(unsigned int) * 8)
#define test_effect_preshader_compare_vconsts(a, b, c) \ #define test_effect_preshader_compare_vconsts(a, b, c) \
test_effect_preshader_compare_vconsts_(__LINE__, a, b, c) test_effect_preshader_compare_vconsts_(__LINE__, a, b, c)
...@@ -4278,8 +4278,8 @@ static void test_effect_preshader_compare_vconsts_(unsigned int line, IDirect3DD ...@@ -4278,8 +4278,8 @@ static void test_effect_preshader_compare_vconsts_(unsigned int line, IDirect3DD
{ {
for (i = 0; i < ARRAY_SIZE(test_effect_preshader_fvect_v); ++i) for (i = 0; i < ARRAY_SIZE(test_effect_preshader_fvect_v); ++i)
{ {
if (const_updated_mask[i / TEST_EFFECT_FVECT_BITMASK_BLOCK_SIZE] if (const_updated_mask[i / TEST_EFFECT_BITMASK_BLOCK_SIZE]
& (1u << (i % TEST_EFFECT_FVECT_BITMASK_BLOCK_SIZE))) & (1u << (i % TEST_EFFECT_BITMASK_BLOCK_SIZE)))
{ {
ok_(__FILE__, line)(!memcmp(&fdata[i], &test_effect_preshader_fvect_v[i], sizeof(fdata[i])), ok_(__FILE__, line)(!memcmp(&fdata[i], &test_effect_preshader_fvect_v[i], sizeof(fdata[i])),
"Vertex shader float constants do not match, expected (%g, %g, %g, %g), \ "Vertex shader float constants do not match, expected (%g, %g, %g, %g), \
...@@ -4305,6 +4305,11 @@ got (%g, %g, %g, %g), parameter %s.\n", ...@@ -4305,6 +4305,11 @@ got (%g, %g, %g, %g), parameter %s.\n",
} }
} }
static const BOOL test_effect_preshader_bconsts[] =
{
TRUE, FALSE, TRUE, FALSE, TRUE, TRUE, FALSE
};
static void test_effect_preshader_clear_pbool_consts(IDirect3DDevice9 *device) static void test_effect_preshader_clear_pbool_consts(IDirect3DDevice9 *device)
{ {
BOOL bval = FALSE; BOOL bval = FALSE;
...@@ -4318,6 +4323,52 @@ static void test_effect_preshader_clear_pbool_consts(IDirect3DDevice9 *device) ...@@ -4318,6 +4323,52 @@ static void test_effect_preshader_clear_pbool_consts(IDirect3DDevice9 *device)
} }
} }
#define test_effect_preshader_compare_pbool_consts(a, b, c) \
test_effect_preshader_compare_pbool_consts_(__LINE__, a, b, c)
static void test_effect_preshader_compare_pbool_consts_(unsigned int line, IDirect3DDevice9 *device,
const unsigned int *const_updated_mask, const char *updated_param)
{
unsigned int i;
BOOL bdata[16];
HRESULT hr;
hr = IDirect3DDevice9_GetPixelShaderConstantB(device, 0, bdata, ARRAY_SIZE(bdata));
ok_(__FILE__, line)(hr == D3D_OK, "Got result %#x.\n", hr);
if (!const_updated_mask)
{
for (i = 0; i < ARRAY_SIZE(test_effect_preshader_bconsts); ++i)
{
ok_(__FILE__, line)(!bdata[i] == !test_effect_preshader_bconsts[i],
"Pixel shader boolean constants do not match, expected %#x, got %#x, i %u.\n",
test_effect_preshader_bconsts[i], bdata[i], i);
}
}
else
{
for (i = 0; i < ARRAY_SIZE(test_effect_preshader_bconsts); ++i)
{
if (const_updated_mask[i / TEST_EFFECT_BITMASK_BLOCK_SIZE]
& (1u << (i % TEST_EFFECT_BITMASK_BLOCK_SIZE)))
{
ok_(__FILE__, line)(!bdata[i] == !test_effect_preshader_bconsts[i],
"Pixel shader boolean constants do not match, expected %#x, got %#x, i %u, parameter %s.\n",
test_effect_preshader_bconsts[i], bdata[i], i, updated_param);
}
else
{
ok_(__FILE__, line)(!bdata[i],
"Pixel shader boolean constants updated unexpectedly, parameter %s.\n", updated_param);
}
}
}
for (; i < 16; ++i)
{
ok_(__FILE__, line)(!bdata[i], "Got result %#x, boolean register value %u.\n", hr, bdata[i]);
}
}
static void test_effect_preshader(IDirect3DDevice9 *device) static void test_effect_preshader(IDirect3DDevice9 *device)
{ {
static const D3DXVECTOR4 test_effect_preshader_fvect_p[] = static const D3DXVECTOR4 test_effect_preshader_fvect_p[] =
...@@ -4337,10 +4388,6 @@ static void test_effect_preshader(IDirect3DDevice9 *device) ...@@ -4337,10 +4388,6 @@ static void test_effect_preshader(IDirect3DDevice9 *device)
{11.0f, 21.0f, 31.0f, 0.0f}, {11.0f, 21.0f, 31.0f, 0.0f},
{12.0f, 22.0f, 32.0f, 0.0f} {12.0f, 22.0f, 32.0f, 0.0f}
}; };
static const BOOL test_effect_preshader_bconsts[] =
{
TRUE, FALSE, TRUE, FALSE, TRUE, TRUE, FALSE
};
static const int test_effect_preshader_iconsts[][4] = static const int test_effect_preshader_iconsts[][4] =
{ {
{4, 3, 2, 1} {4, 3, 2, 1}
...@@ -4353,10 +4400,8 @@ static void test_effect_preshader(IDirect3DDevice9 *device) ...@@ -4353,10 +4400,8 @@ static void test_effect_preshader(IDirect3DDevice9 *device)
D3DXHANDLE par; D3DXHANDLE par;
unsigned int npasses; unsigned int npasses;
DWORD value; DWORD value;
BOOL bval;
D3DXVECTOR4 fdata[ARRAY_SIZE(test_effect_preshader_fvect_p)]; D3DXVECTOR4 fdata[ARRAY_SIZE(test_effect_preshader_fvect_p)];
int idata[ARRAY_SIZE(test_effect_preshader_iconsts)][4]; int idata[ARRAY_SIZE(test_effect_preshader_iconsts)][4];
BOOL bdata[ARRAY_SIZE(test_effect_preshader_bconsts)];
IDirect3DVertexShader9 *vshader; IDirect3DVertexShader9 *vshader;
unsigned int i; unsigned int i;
D3DCAPS9 caps; D3DCAPS9 caps;
...@@ -4435,17 +4480,7 @@ static void test_effect_preshader(IDirect3DDevice9 *device) ...@@ -4435,17 +4480,7 @@ static void test_effect_preshader(IDirect3DDevice9 *device)
"Pixel shader integer constants do not match.\n"); "Pixel shader integer constants do not match.\n");
} }
hr = IDirect3DDevice9_GetPixelShaderConstantB(device, 0, bdata, test_effect_preshader_compare_pbool_consts(device, NULL, NULL);
ARRAY_SIZE(test_effect_preshader_bconsts));
ok(hr == D3D_OK, "Got result %#x.\n", hr);
for (i = 0; i < ARRAY_SIZE(test_effect_preshader_bconsts); ++i)
ok(!bdata[i] == !test_effect_preshader_bconsts[i],
"Pixel shader boolean constants do not match.\n");
for (; i < 16; ++i)
{
hr = IDirect3DDevice9_GetPixelShaderConstantB(device, i, &bval, 1);
ok(hr == D3D_OK && !bval, "Got result %#x, boolean register value %u.\n", hr, bval);
}
test_effect_preshader_op_results(device, NULL, NULL); test_effect_preshader_op_results(device, NULL, NULL);
...@@ -5075,7 +5110,7 @@ static void test_effect_commitchanges(IDirect3DDevice9 *device) ...@@ -5075,7 +5110,7 @@ static void test_effect_commitchanges(IDirect3DDevice9 *device)
{ {
const char *param_name; const char *param_name;
const unsigned int const_updated_mask[(ARRAY_SIZE(test_effect_preshader_fvect_v) const unsigned int const_updated_mask[(ARRAY_SIZE(test_effect_preshader_fvect_v)
+ TEST_EFFECT_FVECT_BITMASK_BLOCK_SIZE - 1) / TEST_EFFECT_FVECT_BITMASK_BLOCK_SIZE]; + TEST_EFFECT_BITMASK_BLOCK_SIZE - 1) / TEST_EFFECT_BITMASK_BLOCK_SIZE];
} }
check_vconsts_parameters[] = check_vconsts_parameters[] =
{ {
...@@ -5093,7 +5128,7 @@ static void test_effect_commitchanges(IDirect3DDevice9 *device) ...@@ -5093,7 +5128,7 @@ static void test_effect_commitchanges(IDirect3DDevice9 *device)
{"ts3", {0x00000fc0, 0x00000000}}, {"ts3", {0x00000fc0, 0x00000000}},
}; };
static const unsigned int const_no_update_mask[(ARRAY_SIZE(test_effect_preshader_fvect_v) static const unsigned int const_no_update_mask[(ARRAY_SIZE(test_effect_preshader_fvect_v)
+ TEST_EFFECT_FVECT_BITMASK_BLOCK_SIZE - 1) / TEST_EFFECT_FVECT_BITMASK_BLOCK_SIZE]; + TEST_EFFECT_BITMASK_BLOCK_SIZE - 1) / TEST_EFFECT_BITMASK_BLOCK_SIZE];
static const D3DLIGHT9 light_filler = {D3DLIGHT_POINT}; static const D3DLIGHT9 light_filler = {D3DLIGHT_POINT};
ID3DXEffect *effect; ID3DXEffect *effect;
......
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