On 9 March 2016 at 14:38, Paul Gofman <gofmanp(a)gmail.com> wrote:
> +static float test_effect_preshader_fconstsv[][4] =
> +{
> + {11.0, 12.0, 13.0, 0.0 },
> + {21.0, 22.0, 23.0, 0.0 },
> + {31.0, 32.0, 33.0, 0.0 },
> + {41.0, 42.0, 43.0, 0.0 },
> + {11.0, 21.0, 31.0, 0.0 },
> + {12.0, 22.0, 32.0, 0.0 },
> + {13.0, 23.0, 33.0, 0.0 },
> + {14.0, 24.0, 34.0, 0.0 },
> + {11.0, 12.0, 13.0, 14.0},
> + {21.0, 22.0, 23.0, 24.0},
> + {31.0, 32.0, 33.0, 34.0},
> + {11.0, 21.0, 31.0, 41.0},
> + {12.0, 22.0, 32.0, 42.0},
> + {13.0, 23.0, 33.0, 43.0}
> +};
> +
> +static float test_effect_preshader_fconstsp[][4] =
> +{
> + {11.0, 21.0, 0.0 , 0.0 },
> + {12.0, 22.0, 0.0 , 0.0 },
> + {13.0, 23.0, 0.0 , 0.0 },
> + {11.0, 12.0, 0.0 , 0.0 },
> + {21.0, 22.0, 0.0 , 0.0 },
> + {31.0, 32.0, 0.0 , 0.0 },
> + {11.0, 12.0, 0.0 , 0.0 },
> + {21.0, 22.0, 0.0 , 0.0 },
> + {11.0, 21.0, 0.0 , 0.0 },
> + {12.0, 22.0, 0.0 , 0.0 },
> + {11.0, 12.0, 13.0, 0.0 },
> + {21.0, 22.0, 23.0, 0.0 },
> + {11.0, 21.0, 31.0, 0.0 },
> + {12.0, 22.0, 32.0, 0.0 }
> +};
> +
> +static BOOL test_effect_preshader_bconsts[] =
> +{
> + 1, 0, 1, 0, 1, 0
> +};
> +
> +static struct
> +{
> + const char *comment;
> + BOOL todo[4];
> + DWORD result[4];
> +}
> +test_effect_preshader_op_results[] =
> +{
> + {"1 / op", {1, 1, 1, 1}, {0x7f800000, 0xff800000, 0xbee8ba2e, 0x00200000}},
> + {"rsq", {1, 1, 3, 3}, {0x7f800000, 0x7f800000, 0x3f2c985d, 0x1f800000}},
> + {"mul", {1, 1, 1, 1}, {0x00000000, 0x80000000, 0x40d33334, 0x7f800000}},
> + {"add", {0, 1, 1, 1}, {0x3f800000, 0x40000000, 0xc0a66666, 0x7f7fffff}},
> + {"lt", {0, 0, 1, 0}, {0x3f800000, 0x3f800000, 0x00000000, 0x00000000}},
> + {"ge", {1, 1, 0, 1}, {0x00000000, 0x00000000, 0x3f800000, 0x3f800000}},
> + {"neg", {1, 1, 1, 1}, {0x80000000, 0x00000000, 0x400ccccd, 0xff7fffff}},
> + {"rcp", {1, 1, 1, 1}, {0x7f800000, 0xff800000, 0xbee8ba2e, 0x00200000}},
> + {"frac", {0, 0, 1, 0}, {0x00000000, 0x00000000, 0x3f4ccccc, 0x00000000}},
> + {"min", {0, 1, 1, 1}, {0x00000000, 0x80000000, 0xc0400000, 0x40800000}},
> + {"max", {1, 1, 1, 1}, {0x3f800000, 0x40000000, 0xc00ccccd, 0x7f7fffff}},
> + {"sin", {0, 1, 1, 3}, {0x00000000, 0x80000000, 0xbf4ef99e, 0xbf0599b3}},
> + {"cos", {1, 1, 1, 3}, {0x3f800000, 0x3f800000, 0xbf16a803, 0x3f5a5f96}},
> + {"den mul",{1, 1, 1, 1}, {0x7f800000, 0xff800000, 0xbb94f209, 0x000051ec}},
> + {"dot", {0, 1, 1, 0}, {0x00000000, 0x7f800000, 0x41f00000, 0x00000000}}
> +};
These should all be const. I'd probably use D3DXVECTOR4 for the float
constant arrays.
> +#define TEST_EFFECT_PRES_NFLOATV (sizeof(test_effect_preshader_fconstsv) / sizeof(*test_effect_preshader_fconstsv))
> +#define TEST_EFFECT_PRES_NFLOATP (sizeof(test_effect_preshader_fconstsp) / sizeof(*test_effect_preshader_fconstsp))
> +#define TEST_EFFECT_PRES_NFLOATMAX (TEST_EFFECT_PRES_NFLOATV > TEST_EFFECT_PRES_NFLOATP ? \
> + TEST_EFFECT_PRES_NFLOATV : TEST_EFFECT_PRES_NFLOATP)
> +#define TEST_EFFECT_PRES_NBOOL (sizeof(test_effect_preshader_bconsts) / sizeof(*test_effect_preshader_bconsts))
> +#define TEST_EFFECT_PRES_NOPTESTS (sizeof(test_effect_preshader_op_results) / \
> + sizeof(*test_effect_preshader_op_results))
I think you should either just write these out, or introduce an
ARRAY_SIZE macro.
> + const static D3DXVECTOR4 fvect1 = {28.0f, 29.0f, 30.0f, 31.0f};
> + const static D3DXVECTOR4 fvect2 = {0.0f, 0.0f, 1.0f, 0.0f};
> + const static float fvect_empty[] = {-9999.0f, -9999.0f, -9999.0f, -9999.0f};
This is not wrong, but the usual order is "static const".
> + todo_wine_if(!!bdata[i] != !!test_effect_preshader_bconsts[i])
You can write that as "!bdata[i] != !test_effect_preshader_bconsts[i]"
without changing the meaning.
> + todo_wine ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
%#x to make it clear it's a hexadecimal value. You don't need to print
the expected value if it's a constant.
> + hr = IDirect3DDevice9_GetVertexShader(device, &vshader);
> + ok(hr == D3D_OK, "Got result %x, expected 0 (D3D_OK).\n", hr);
> + ok(vshader != NULL, "Got NULL vshader.\n");
> + if (vshader)
> + {
That kind of thing is pointless, if "vshader" was NULL, the test would
have failed.
> + ok(vshader == NULL, "Incorrect shader selected.\n");
I would prefer those as "ok(!vshader, ...);", but it's just style.