[PATCH v3 6/6] d3d9/tests: Add Fetch4 tests
Henri Verbeet
hverbeet at gmail.com
Tue Nov 27 13:32:02 CST 2018
On Sat, 24 Nov 2018 at 23:51, Daniel Ansorregui <mailszeros at gmail.com> wrote:
> - Implemented for texld/texldp/texldd/texldb/texldl
> - In all cases tested on Windows10 + Intel
> Fetch4 enabled always produced same result (like texld)
>
> Signed-off-by: Daniel Ansorregui <mailszeros at gmail.com>
> ---
> dlls/d3d9/tests/visual.c | 313 +++++++++++++++++++++++++++++++++++++++
> 1 file changed, 313 insertions(+)
>
Since the CheckDeviceFormat() check will prevent this from doing
anything on implementations that don't support DF24, you may as well
send this test as the first patch in the series.
> + struct
> + {
> + float x, y, z;
> + float tu, tv;
> + }
Not a big deal, but we tend to do these as "struct vec3 position" and
"struct vec2 texcoord".
> + struct struct_expected_color
> + {
> + UINT x, y;
> + D3DCOLOR color;
> + };
Why the "struct_" prefix on the structure name? In fact, you don't
really need a structure name at all.
> + static const DWORD texture_data[4] = {0x10111213,
Again minor, but no need for the "4".
> + IDirect3DTexture9 *texture_L8, *texture_A8, *texture_A8R8G8B8;
You'll probably want an array of texture formats you want to test, and
loop over it.
> + /* Create our texture for FETCH4 */
> + hr = IDirect3DDevice9_CreateTexture(device, 4, 4, 1, 0, D3DFMT_L8, D3DPOOL_MANAGED, &texture_L8, NULL);
> + ok(hr == D3D_OK, "Failed to create texture, hr %#x.\n", hr);
> + memset(&lr, 0, sizeof(lr));
The memset() is redundant.
> + hr = IDirect3DTexture9_LockRect(texture_L8, 0, &lr, NULL, 0);
> + ok(hr == D3D_OK, "Failed to lock texture, hr %#x.\n", hr);
> + memcpy(lr.pBits, texture_data, sizeof(texture_data));
> + hr = IDirect3DTexture9_UnlockRect(texture_L8, 0);
> + ok(hr == D3D_OK, "Failed to unlock texture, hr %#x.\n", hr);
This probably works in practice, but you should be using the pitch.
> + /* Render with fetch4 and test if we obtain proper results */
> + for (i=0; i<5; i++)
Formatting.
> + {
> + if (i==0)
> + hr = IDirect3DDevice9_SetPixelShader(device, ps_texld);
> + else if(i==1)
> + hr = IDirect3DDevice9_SetPixelShader(device, ps_texldp);
> + else if(i==2)
> + hr = IDirect3DDevice9_SetPixelShader(device, ps_texldd);
> + else if(i==3)
> + hr = IDirect3DDevice9_SetPixelShader(device, ps_texldb);
> + else
> + hr = IDirect3DDevice9_SetPixelShader(device, ps_texldl);
> + ok(SUCCEEDED(hr), "SetPixelShader failed, hr %#x.\n", hr);
If you create an array like this:
static const DWORD *ps_code[] =
{
ps_code_texld,
ps_code_texldp,
...
};
You can loop over it, and avoid the fairly awkward construction above.
More information about the wine-devel
mailing list