d3d9/tests: Test special fp values in local constants.

The HLSL compiler refuses to use NaN and +/-Inf values in pre-SM4
shaders, claiming that those are unsupported in this shader model.
However, vsa.exe happilly generates them, the required strings in the
shader code are 1.#QNAN and 1.#INF. Native d3d9 happily loads such a
shader.
This commit is contained in:
Stefan Dösinger 2013-04-02 14:54:03 +02:00 committed by Alexandre Julliard
parent 8c2874ee99
commit 6d06b7f5b8
1 changed files with 9 additions and 1 deletions

View File

@ -1,6 +1,6 @@
/* /*
* Copyright 2005, 2007-2008 Henri Verbeet * Copyright 2005, 2007-2008 Henri Verbeet
* Copyright (C) 2007-2008 Stefan Dösinger(for CodeWeavers) * Copyright (C) 2007-2013 Stefan Dösinger(for CodeWeavers)
* Copyright (C) 2008 Jason Green(for TransGaming) * Copyright (C) 2008 Jason Green(for TransGaming)
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
@ -12336,10 +12336,12 @@ static void clip_planes_test(IDirect3DDevice9 *device)
static void fp_special_test(IDirect3DDevice9 *device) static void fp_special_test(IDirect3DDevice9 *device)
{ {
/* Microsoft's assembler generates nan and inf with "1.#QNAN" and "1.#INF." respectively */
static const DWORD vs_header[] = static const DWORD vs_header[] =
{ {
0xfffe0200, /* vs_2_0 */ 0xfffe0200, /* vs_2_0 */
0x05000051, 0xa00f0000, 0x00000000, 0x3f000000, 0x3f800000, 0x40000000, /* def c0, 0.0, 0.5, 1.0, 2.0 */ 0x05000051, 0xa00f0000, 0x00000000, 0x3f000000, 0x3f800000, 0x40000000, /* def c0, 0.0, 0.5, 1.0, 2.0 */
0x05000051, 0xa00f0001, 0x7fc00000, 0xff800000, 0x7f800000, 0x00000000, /* def c1, nan, -inf, inf, 0 */
0x0200001f, 0x80000000, 0x900f0000, /* dcl_position v0 */ 0x0200001f, 0x80000000, 0x900f0000, /* dcl_position v0 */
0x0200001f, 0x80000005, 0x900f0001, /* dcl_texcoord0 v1 */ 0x0200001f, 0x80000005, 0x900f0001, /* dcl_texcoord0 v1 */
}; };
@ -12354,6 +12356,9 @@ static void fp_special_test(IDirect3DDevice9 *device)
static const DWORD vs_rsq2[] = {0x02000007, 0x80010000, 0x91000001}; /* rsq r0.x, -v1.x */ static const DWORD vs_rsq2[] = {0x02000007, 0x80010000, 0x91000001}; /* rsq r0.x, -v1.x */
static const DWORD vs_lit[] = {0x02000010, 0x800f0000, 0x90000001, /* lit r0, v1.xxxx */ static const DWORD vs_lit[] = {0x02000010, 0x800f0000, 0x90000001, /* lit r0, v1.xxxx */
0x02000001, 0x80010000, 0x80aa0000}; /* mov r0.x, v0.z */ 0x02000001, 0x80010000, 0x80aa0000}; /* mov r0.x, v0.z */
static const DWORD vs_def1[] = {0x02000001, 0x80010000, 0xa0000001}; /* mov r0.x, c1.x */
static const DWORD vs_def2[] = {0x02000001, 0x80010000, 0xa0550001}; /* mov r0.x, c1.y */
static const DWORD vs_def3[] = {0x02000001, 0x80010000, 0xa0aa0001}; /* mov r0.x, c1.z */
static const DWORD vs_footer[] = static const DWORD vs_footer[] =
{ {
@ -12406,6 +12411,9 @@ static void fp_special_test(IDirect3DDevice9 *device)
{"rsq1", vs_rsq1, sizeof(vs_rsq1), 0x000000ff, 0x00ff00ff, 0x00ff7f00}, {"rsq1", vs_rsq1, sizeof(vs_rsq1), 0x000000ff, 0x00ff00ff, 0x00ff7f00},
{"rsq2", vs_rsq2, sizeof(vs_rsq2), 0x000000ff, 0x00ff00ff, 0x00ff7f00}, {"rsq2", vs_rsq2, sizeof(vs_rsq2), 0x000000ff, 0x00ff00ff, 0x00ff7f00},
{"lit", vs_lit, sizeof(vs_lit), 0x00ff0000, 0x00ff0000, 0x00ff0000}, {"lit", vs_lit, sizeof(vs_lit), 0x00ff0000, 0x00ff0000, 0x00ff0000},
{"def1", vs_def1, sizeof(vs_def1), 0x00007f00, 0x00007f00, 0x00007f00},
{"def2", vs_def2, sizeof(vs_def2), 0x00ff7f00, 0x00ff7f00, 0x00ff7f00},
{"def3", vs_def3, sizeof(vs_def3), 0x00ff7f00, 0x00ff7f00, 0x00ff7f00},
}; };
static const DWORD ps_code[] = static const DWORD ps_code[] =