Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
bcecdbda
Commit
bcecdbda
authored
Sep 03, 2013
by
Matteo Bruni
Committed by
Alexandre Julliard
Sep 03, 2013
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
d3d8/tests: Add cnd instruction test.
parent
4af4df5a
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
526 additions
and
0 deletions
+526
-0
visual.c
dlls/d3d8/tests/visual.c
+526
-0
No files found.
dlls/d3d8/tests/visual.c
View file @
bcecdbda
...
...
@@ -937,6 +937,528 @@ static void fog_with_shader_test(IDirect3DDevice8 *device)
IDirect3DDevice8_DeleteVertexShader
(
device
,
pixel_shader
[
1
]);
}
static
void
cnd_test
(
IDirect3DDevice8
*
device
)
{
DWORD
shader_11
,
shader_12
,
shader_13
,
shader_14
;
DWORD
shader_11_coissue
,
shader_12_coissue
,
shader_13_coissue
,
shader_14_coissue
;
DWORD
shader_11_coissue_2
,
shader_12_coissue_2
,
shader_13_coissue_2
,
shader_14_coissue_2
;
HRESULT
hr
;
DWORD
color
;
/* ps 1.x shaders are rather picky with writemasks and source swizzles.
* The dp3 is used to copy r0.r to all components of r1, then copy r1.a to
* r0.a. Essentially it does a mov r0.a, r0.r, which isn't allowed as-is
* in 1.x pixel shaders. */
static
const
DWORD
shader_code_11
[]
=
{
0xffff0101
,
/* ps_1_1 */
0x00000051
,
0xa00f0000
,
0x3f800000
,
0x00000000
,
0x00000000
,
0x00000000
,
/* def c0, 1, 0, 0, 0 */
0x00000040
,
0xb00f0000
,
/* texcoord t0 */
0x00000001
,
0x800f0000
,
0xb0e40000
,
/* mov r0, t0 */
0x00000008
,
0x800f0001
,
0x80e40000
,
0xa0e40000
,
/* dp3 r1, r0, c0 */
0x00000001
,
0x80080000
,
0x80ff0001
,
/* mov r0.a, r1.a */
0x00000050
,
0x800f0000
,
0x80ff0000
,
0xa0e40001
,
0xa0e40002
,
/* cnd r0, r0.a, c1, c2 */
0x0000ffff
/* end */
};
static
const
DWORD
shader_code_12
[]
=
{
0xffff0102
,
/* ps_1_2 */
0x00000051
,
0xa00f0000
,
0x3f800000
,
0x00000000
,
0x00000000
,
0x00000000
,
/* def c0, 1, 0, 0, 0 */
0x00000040
,
0xb00f0000
,
/* texcoord t0 */
0x00000001
,
0x800f0000
,
0xb0e40000
,
/* mov r0, t0 */
0x00000008
,
0x800f0001
,
0x80e40000
,
0xa0e40000
,
/* dp3 r1, r0, c0 */
0x00000001
,
0x80080000
,
0x80ff0001
,
/* mov r0.a, r1.a */
0x00000050
,
0x800f0000
,
0x80ff0000
,
0xa0e40001
,
0xa0e40002
,
/* cnd r0, r0.a, c1, c2 */
0x0000ffff
/* end */
};
static
const
DWORD
shader_code_13
[]
=
{
0xffff0103
,
/* ps_1_3 */
0x00000051
,
0xa00f0000
,
0x3f800000
,
0x00000000
,
0x00000000
,
0x00000000
,
/* def c0, 1, 0, 0, 0 */
0x00000040
,
0xb00f0000
,
/* texcoord t0 */
0x00000001
,
0x800f0000
,
0xb0e40000
,
/* mov r0, t0 */
0x00000008
,
0x800f0001
,
0x80e40000
,
0xa0e40000
,
/* dp3, r1, r0, c0 */
0x00000001
,
0x80080000
,
0x80ff0001
,
/* mov r0.a, r1.a */
0x00000050
,
0x800f0000
,
0x80ff0000
,
0xa0e40001
,
0xa0e40002
,
/* cnd r0, r0.a, c1, c2 */
0x0000ffff
/* end */
};
static
const
DWORD
shader_code_14
[]
=
{
0xffff0104
,
/* ps_1_3 */
0x00000051
,
0xa00f0000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x3f800000
,
/* def c0, 0, 0, 0, 1 */
0x00000040
,
0x80070000
,
0xb0e40000
,
/* texcrd r0, t0 */
0x00000001
,
0x80080000
,
0xa0ff0000
,
/* mov r0.a, c0.a */
0x00000050
,
0x800f0000
,
0x80e40000
,
0xa0e40001
,
0xa0e40002
,
/* cnd r0, r0, c1, c2 */
0x0000ffff
/* end */
};
/* Special fun: The coissue flag on cnd: Apparently cnd always selects the 2nd source,
* as if the src0 comparison against 0.5 always evaluates to true. The coissue flag isn't
* set by the compiler, it was added manually after compilation. Note that the COISSUE
* flag on a color(.xyz) operation is only allowed after an alpha operation. DirectX doesn't
* have proper docs, but GL_ATI_fragment_shader explains the pairing of color and alpha ops
* well enough.
*
* The shader attempts to test the range [-1;1] against coissued cnd, which is a bit tricky.
* The input from t0 is [0;1]. 0.5 is subtracted, then we have to multiply with 2. Since
* constants are clamped to [-1;1], a 2.0 is constructed by adding c0.r(=1.0) to c0.r into r1.r,
* then r1(2.0, 0.0, 0.0, 0.0) is passed to dp3(explained above).
*/
static
const
DWORD
shader_code_11_coissue
[]
=
{
0xffff0101
,
/* ps_1_1 */
0x00000051
,
0xa00f0000
,
0x3f800000
,
0x00000000
,
0x00000000
,
0x00000000
,
/* def c0, 1, 0, 0, 0 */
0x00000051
,
0xa00f0003
,
0x3f000000
,
0x3f000000
,
0x3f000000
,
0x00000000
,
/* def c3, 0.5, 0.5, 0.5, 0 */
0x00000040
,
0xb00f0000
,
/* texcoord t0 */
0x00000001
,
0x800f0000
,
0xb0e40000
,
/* mov r0, t0 */
0x00000003
,
0x800f0000
,
0x80e40000
,
0xa0e40003
,
/* sub r0, r0, c3 */
0x00000002
,
0x800f0001
,
0xa0e40000
,
0xa0e40000
,
/* add r1, c0, c0 */
0x00000008
,
0x800f0001
,
0x80e40000
,
0x80e40001
,
/* dp3 r1, r0, r1 */
0x00000001
,
0x80080000
,
0x80ff0001
,
/* mov r0.a, r1.a */
0x40000050
,
0x80070000
,
0x80ff0000
,
0xa0e40001
,
0xa0e40002
,
/* +cnd r0.xyz, r0.a, c1, c2*/
0x0000ffff
/* end */
};
static
const
DWORD
shader_code_11_coissue_2
[]
=
{
0xffff0101
,
/* ps_1_1 */
0x00000051
,
0xa00f0000
,
0x3f800000
,
0x00000000
,
0x00000000
,
0x00000000
,
/* def c0, 1, 0, 0, 0 */
0x00000051
,
0xa00f0003
,
0x3f000000
,
0x3f000000
,
0x3f000000
,
0x00000000
,
/* def c3, 0.5, 0.5, 0.5, 0 */
0x00000040
,
0xb00f0000
,
/* texcoord t0 */
0x00000001
,
0x800f0000
,
0xb0e40000
,
/* mov r0, t0 */
0x00000003
,
0x800f0000
,
0x80e40000
,
0xa0e40003
,
/* sub r0, r0, c3 */
0x00000002
,
0x800f0001
,
0xa0e40000
,
0xa0e40000
,
/* add r1, c0, c0 */
0x00000008
,
0x800f0001
,
0x80e40000
,
0x80e40001
,
/* dp3 r1, r0, r1 */
0x00000001
,
0x800f0000
,
0x80e40001
,
/* mov r0, r1 */
0x00000001
,
0x80070000
,
0x80ff0001
,
/* mov r0.xyz, r1.a */
0x40000050
,
0x80080000
,
0x80ff0000
,
0xa0e40001
,
0xa0e40002
,
/* +cnd r0.a, r0.a, c1, c2 */
0x00000001
,
0x80070000
,
0x80ff0000
,
/* mov r0.xyz, r0.a */
0x0000ffff
/* end */
};
static
const
DWORD
shader_code_12_coissue
[]
=
{
0xffff0102
,
/* ps_1_2 */
0x00000051
,
0xa00f0000
,
0x3f800000
,
0x00000000
,
0x00000000
,
0x00000000
,
/* def c0, 1, 0, 0, 0 */
0x00000051
,
0xa00f0003
,
0x3f000000
,
0x3f000000
,
0x3f000000
,
0x00000000
,
/* def c3, 0.5, 0.5, 0.5, 0 */
0x00000040
,
0xb00f0000
,
/* texcoord t0 */
0x00000001
,
0x800f0000
,
0xb0e40000
,
/* mov r0, t0 */
0x00000003
,
0x800f0000
,
0x80e40000
,
0xa0e40003
,
/* sub r0, r0, c3 */
0x00000002
,
0x800f0001
,
0xa0e40000
,
0xa0e40000
,
/* add r1, c0, c0 */
0x00000008
,
0x800f0001
,
0x80e40000
,
0x80e40001
,
/* dp3 r1, r0, r1 */
0x00000001
,
0x80080000
,
0x80ff0001
,
/* mov r0.a, r1.a */
0x40000050
,
0x80070000
,
0x80ff0000
,
0xa0e40001
,
0xa0e40002
,
/* +cnd r0.xyz, r0.a, c1, c2*/
0x0000ffff
/* end */
};
static
const
DWORD
shader_code_12_coissue_2
[]
=
{
0xffff0102
,
/* ps_1_2 */
0x00000051
,
0xa00f0000
,
0x3f800000
,
0x00000000
,
0x00000000
,
0x00000000
,
/* def c0, 1, 0, 0, 0 */
0x00000051
,
0xa00f0003
,
0x3f000000
,
0x3f000000
,
0x3f000000
,
0x00000000
,
/* def c3, 0.5, 0.5, 0.5, 0 */
0x00000040
,
0xb00f0000
,
/* texcoord t0 */
0x00000001
,
0x800f0000
,
0xb0e40000
,
/* mov r0, t0 */
0x00000003
,
0x800f0000
,
0x80e40000
,
0xa0e40003
,
/* sub r0, r0, c3 */
0x00000002
,
0x800f0001
,
0xa0e40000
,
0xa0e40000
,
/* add r1, c0, c0 */
0x00000008
,
0x800f0001
,
0x80e40000
,
0x80e40001
,
/* dp3 r1, r0, r1 */
0x00000001
,
0x800f0000
,
0x80e40001
,
/* mov r0, r1 */
0x00000001
,
0x80070000
,
0x80ff0001
,
/* mov r0.xyz, r1.a */
0x40000050
,
0x80080000
,
0x80ff0000
,
0xa0e40001
,
0xa0e40002
,
/* +cnd r0.a, r0.a, c1, c2 */
0x00000001
,
0x80070000
,
0x80ff0000
,
/* mov r0.xyz, r0.a */
0x0000ffff
/* end */
};
static
const
DWORD
shader_code_13_coissue
[]
=
{
0xffff0103
,
/* ps_1_3 */
0x00000051
,
0xa00f0000
,
0x3f800000
,
0x00000000
,
0x00000000
,
0x00000000
,
/* def c0, 1, 0, 0, 0 */
0x00000051
,
0xa00f0003
,
0x3f000000
,
0x3f000000
,
0x3f000000
,
0x00000000
,
/* def c3, 0.5, 0.5, 0.5, 0 */
0x00000040
,
0xb00f0000
,
/* texcoord t0 */
0x00000001
,
0x800f0000
,
0xb0e40000
,
/* mov r0, t0 */
0x00000003
,
0x800f0000
,
0x80e40000
,
0xa0e40003
,
/* sub r0, r0, c3 */
0x00000002
,
0x800f0001
,
0xa0e40000
,
0xa0e40000
,
/* add r1, c0, c0 */
0x00000008
,
0x800f0001
,
0x80e40000
,
0x80e40001
,
/* dp3 r1, r0, r1 */
0x00000001
,
0x80080000
,
0x80ff0001
,
/* mov r0.a, r1.a */
0x40000050
,
0x80070000
,
0x80ff0000
,
0xa0e40001
,
0xa0e40002
,
/* +cnd r0.xyz, r0.a, c1, c2*/
0x0000ffff
/* end */
};
static
const
DWORD
shader_code_13_coissue_2
[]
=
{
0xffff0103
,
/* ps_1_3 */
0x00000051
,
0xa00f0000
,
0x3f800000
,
0x00000000
,
0x00000000
,
0x00000000
,
/* def c0, 1, 0, 0, 0 */
0x00000051
,
0xa00f0003
,
0x3f000000
,
0x3f000000
,
0x3f000000
,
0x00000000
,
/* def c3, 0.5, 0.5, 0.5, 0 */
0x00000040
,
0xb00f0000
,
/* texcoord t0 */
0x00000001
,
0x800f0000
,
0xb0e40000
,
/* mov r0, t0 */
0x00000003
,
0x800f0000
,
0x80e40000
,
0xa0e40003
,
/* sub r0, r0, c3 */
0x00000002
,
0x800f0001
,
0xa0e40000
,
0xa0e40000
,
/* add r1, c0, c0 */
0x00000008
,
0x800f0001
,
0x80e40000
,
0x80e40001
,
/* dp3 r1, r0, r1 */
0x00000001
,
0x800f0000
,
0x80e40001
,
/* mov r0, r1 */
0x00000001
,
0x80070000
,
0x80ff0001
,
/* mov r0.xyz, r1.a */
0x40000050
,
0x80080000
,
0x80ff0000
,
0xa0e40001
,
0xa0e40002
,
/* +cnd r0.a, r0.a, c1, c2 */
0x00000001
,
0x80070000
,
0x80ff0000
,
/* mov r0.xyz, r0.a */
0x0000ffff
/* end */
};
/* ps_1_4 does not have a different cnd behavior, just pass the [0;1]
* texcrd result to cnd, it will compare against 0.5. */
static
const
DWORD
shader_code_14_coissue
[]
=
{
0xffff0104
,
/* ps_1_4 */
0x00000051
,
0xa00f0000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x3f800000
,
/* def c0, 0, 0, 0, 1 */
0x00000040
,
0x80070000
,
0xb0e40000
,
/* texcrd r0.xyz, t0 */
0x00000001
,
0x80080000
,
0xa0ff0000
,
/* mov r0.a, c0.a */
0x40000050
,
0x80070000
,
0x80e40000
,
0xa0e40001
,
0xa0e40002
,
/* +cnd r0.xyz, r0, c1, c2 */
0x0000ffff
/* end */
};
static
const
DWORD
shader_code_14_coissue_2
[]
=
{
0xffff0104
,
/* ps_1_4 */
0x00000051
,
0xa00f0000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x3f800000
,
/* def c0, 0, 0, 0, 1 */
0x00000040
,
0x80070000
,
0xb0e40000
,
/* texcrd r0.xyz, t0 */
0x00000001
,
0x80080000
,
0x80000000
,
/* mov r0.a, r0.x */
0x00000001
,
0x80070001
,
0xa0ff0000
,
/* mov r1.xyz, c0.a */
0x40000050
,
0x80080001
,
0x80ff0000
,
0xa0e40001
,
0xa0e40002
,
/* +cnd r1.a, r0.a, c1, c2 */
0x00000001
,
0x80070000
,
0x80ff0001
,
/* mov r0.xyz, r1.a */
0x00000001
,
0x80080000
,
0xa0ff0000
,
/* mov r0.a, c0.a */
0x0000ffff
/* end */
};
static
const
float
quad1
[]
=
{
-
1
.
0
f
,
-
1
.
0
f
,
0
.
1
f
,
0
.
0
f
,
0
.
0
f
,
1
.
0
f
,
0
.
0
f
,
-
1
.
0
f
,
0
.
1
f
,
1
.
0
f
,
0
.
0
f
,
1
.
0
f
,
-
1
.
0
f
,
0
.
0
f
,
0
.
1
f
,
0
.
0
f
,
1
.
0
f
,
0
.
0
f
,
0
.
0
f
,
0
.
0
f
,
0
.
1
f
,
1
.
0
f
,
1
.
0
f
,
0
.
0
f
};
static
const
float
quad2
[]
=
{
0
.
0
f
,
-
1
.
0
f
,
0
.
1
f
,
0
.
0
f
,
0
.
0
f
,
1
.
0
f
,
1
.
0
f
,
-
1
.
0
f
,
0
.
1
f
,
1
.
0
f
,
0
.
0
f
,
1
.
0
f
,
0
.
0
f
,
0
.
0
f
,
0
.
1
f
,
0
.
0
f
,
1
.
0
f
,
0
.
0
f
,
1
.
0
f
,
0
.
0
f
,
0
.
1
f
,
1
.
0
f
,
1
.
0
f
,
0
.
0
f
};
static
const
float
quad3
[]
=
{
0
.
0
f
,
0
.
0
f
,
0
.
1
f
,
0
.
0
f
,
0
.
0
f
,
1
.
0
f
,
1
.
0
f
,
0
.
0
f
,
0
.
1
f
,
1
.
0
f
,
0
.
0
f
,
1
.
0
f
,
0
.
0
f
,
1
.
0
f
,
0
.
1
f
,
0
.
0
f
,
1
.
0
f
,
0
.
0
f
,
1
.
0
f
,
1
.
0
f
,
0
.
1
f
,
1
.
0
f
,
1
.
0
f
,
0
.
0
f
};
static
const
float
quad4
[]
=
{
-
1
.
0
f
,
0
.
0
f
,
0
.
1
f
,
0
.
0
f
,
0
.
0
f
,
1
.
0
f
,
0
.
0
f
,
0
.
0
f
,
0
.
1
f
,
1
.
0
f
,
0
.
0
f
,
1
.
0
f
,
-
1
.
0
f
,
1
.
0
f
,
0
.
1
f
,
0
.
0
f
,
1
.
0
f
,
0
.
0
f
,
0
.
0
f
,
1
.
0
f
,
0
.
1
f
,
1
.
0
f
,
1
.
0
f
,
0
.
0
f
};
static
const
float
test_data_c1
[
4
]
=
{
0
.
0
f
,
0
.
0
f
,
0
.
0
f
,
0
.
0
f
};
static
const
float
test_data_c2
[
4
]
=
{
1
.
0
f
,
1
.
0
f
,
1
.
0
f
,
1
.
0
f
};
static
const
float
test_data_c1_coi
[
4
]
=
{
0
.
0
f
,
1
.
0
f
,
0
.
0
f
,
0
.
0
f
};
static
const
float
test_data_c2_coi
[
4
]
=
{
1
.
0
f
,
0
.
0
f
,
1
.
0
f
,
1
.
0
f
};
hr
=
IDirect3DDevice8_Clear
(
device
,
0
,
NULL
,
D3DCLEAR_TARGET
,
0xff00ffff
,
0
.
0
f
,
0
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_Clear returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_CreatePixelShader
(
device
,
shader_code_11
,
&
shader_11
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_CreatePixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_CreatePixelShader
(
device
,
shader_code_12
,
&
shader_12
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_CreatePixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_CreatePixelShader
(
device
,
shader_code_13
,
&
shader_13
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_CreatePixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_CreatePixelShader
(
device
,
shader_code_14
,
&
shader_14
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_CreatePixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_CreatePixelShader
(
device
,
shader_code_11_coissue
,
&
shader_11_coissue
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_CreatePixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_CreatePixelShader
(
device
,
shader_code_12_coissue
,
&
shader_12_coissue
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_CreatePixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_CreatePixelShader
(
device
,
shader_code_13_coissue
,
&
shader_13_coissue
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_CreatePixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_CreatePixelShader
(
device
,
shader_code_14_coissue
,
&
shader_14_coissue
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_CreatePixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_CreatePixelShader
(
device
,
shader_code_11_coissue_2
,
&
shader_11_coissue_2
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_CreatePixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_CreatePixelShader
(
device
,
shader_code_12_coissue_2
,
&
shader_12_coissue_2
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_CreatePixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_CreatePixelShader
(
device
,
shader_code_13_coissue_2
,
&
shader_13_coissue_2
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_CreatePixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_CreatePixelShader
(
device
,
shader_code_14_coissue_2
,
&
shader_14_coissue_2
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_CreatePixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_SetPixelShaderConstant
(
device
,
1
,
test_data_c1
,
1
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_SetPixelShaderConstant returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_SetPixelShaderConstant
(
device
,
2
,
test_data_c2
,
1
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_SetPixelShaderConstant returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_SetVertexShader
(
device
,
D3DFVF_XYZ
|
D3DFVF_TEX1
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_SetVertexShader returned %#08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_BeginScene
(
device
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_BeginScene returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_SetPixelShader
(
device
,
shader_11
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_SetPixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_DrawPrimitiveUP
(
device
,
D3DPT_TRIANGLESTRIP
,
2
,
quad1
,
6
*
sizeof
(
float
));
ok
(
hr
==
D3D_OK
,
"DrawPrimitiveUP failed (%08x)
\n
"
,
hr
);
hr
=
IDirect3DDevice8_SetPixelShader
(
device
,
shader_12
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_SetPixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_DrawPrimitiveUP
(
device
,
D3DPT_TRIANGLESTRIP
,
2
,
quad2
,
6
*
sizeof
(
float
));
ok
(
hr
==
D3D_OK
,
"DrawPrimitiveUP failed (%08x)
\n
"
,
hr
);
hr
=
IDirect3DDevice8_SetPixelShader
(
device
,
shader_13
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_SetPixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_DrawPrimitiveUP
(
device
,
D3DPT_TRIANGLESTRIP
,
2
,
quad3
,
6
*
sizeof
(
float
));
ok
(
hr
==
D3D_OK
,
"DrawPrimitiveUP failed (%08x)
\n
"
,
hr
);
hr
=
IDirect3DDevice8_SetPixelShader
(
device
,
shader_14
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_SetPixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_DrawPrimitiveUP
(
device
,
D3DPT_TRIANGLESTRIP
,
2
,
quad4
,
6
*
sizeof
(
float
));
ok
(
hr
==
D3D_OK
,
"DrawPrimitiveUP failed (%08x)
\n
"
,
hr
);
hr
=
IDirect3DDevice8_EndScene
(
device
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_EndScene returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_SetPixelShader
(
device
,
0
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_SetPixelShader returned %08x
\n
"
,
hr
);
/* This is the 1.4 test. Each component(r, g, b) is tested separately against 0.5 */
color
=
getPixelColor
(
device
,
158
,
118
);
ok
(
color
==
0x00ff00ff
,
"pixel 158, 118 has color %08x, expected 0x00ff00ff
\n
"
,
color
);
color
=
getPixelColor
(
device
,
162
,
118
);
ok
(
color
==
0x000000ff
,
"pixel 162, 118 has color %08x, expected 0x000000ff
\n
"
,
color
);
color
=
getPixelColor
(
device
,
158
,
122
);
ok
(
color
==
0x00ffffff
,
"pixel 162, 122 has color %08x, expected 0x00ffffff
\n
"
,
color
);
color
=
getPixelColor
(
device
,
162
,
122
);
ok
(
color
==
0x0000ffff
,
"pixel 162, 122 has color %08x, expected 0x0000ffff
\n
"
,
color
);
/* 1.1 shader. All 3 components get set, based on the .w comparison */
color
=
getPixelColor
(
device
,
158
,
358
);
ok
(
color
==
0x00ffffff
,
"pixel 158, 358 has color %08x, expected 0x00ffffff
\n
"
,
color
);
color
=
getPixelColor
(
device
,
162
,
358
);
ok
(
color_match
(
color
,
0x00000000
,
1
),
"pixel 162, 358 has color %08x, expected 0x00000000
\n
"
,
color
);
color
=
getPixelColor
(
device
,
158
,
362
);
ok
(
color
==
0x00ffffff
,
"pixel 158, 362 has color %08x, expected 0x00ffffff
\n
"
,
color
);
color
=
getPixelColor
(
device
,
162
,
362
);
ok
(
color_match
(
color
,
0x00000000
,
1
),
"pixel 162, 362 has color %08x, expected 0x00000000
\n
"
,
color
);
/* 1.2 shader */
color
=
getPixelColor
(
device
,
478
,
358
);
ok
(
color
==
0x00ffffff
,
"pixel 478, 358 has color %08x, expected 0x00ffffff
\n
"
,
color
);
color
=
getPixelColor
(
device
,
482
,
358
);
ok
(
color_match
(
color
,
0x00000000
,
1
),
"pixel 482, 358 has color %08x, expected 0x00000000
\n
"
,
color
);
color
=
getPixelColor
(
device
,
478
,
362
);
ok
(
color
==
0x00ffffff
,
"pixel 478, 362 has color %08x, expected 0x00ffffff
\n
"
,
color
);
color
=
getPixelColor
(
device
,
482
,
362
);
ok
(
color_match
(
color
,
0x00000000
,
1
),
"pixel 482, 362 has color %08x, expected 0x00000000
\n
"
,
color
);
/* 1.3 shader */
color
=
getPixelColor
(
device
,
478
,
118
);
ok
(
color
==
0x00ffffff
,
"pixel 478, 118 has color %08x, expected 0x00ffffff
\n
"
,
color
);
color
=
getPixelColor
(
device
,
482
,
118
);
ok
(
color_match
(
color
,
0x00000000
,
1
),
"pixel 482, 118 has color %08x, expected 0x00000000
\n
"
,
color
);
color
=
getPixelColor
(
device
,
478
,
122
);
ok
(
color
==
0x00ffffff
,
"pixel 478, 122 has color %08x, expected 0x00ffffff
\n
"
,
color
);
color
=
getPixelColor
(
device
,
482
,
122
);
ok
(
color_match
(
color
,
0x00000000
,
1
),
"pixel 482, 122 has color %08x, expected 0x00000000
\n
"
,
color
);
hr
=
IDirect3DDevice8_Present
(
device
,
NULL
,
NULL
,
NULL
,
NULL
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_Present failed with %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_Clear
(
device
,
0
,
NULL
,
D3DCLEAR_TARGET
,
0xff00ffff
,
0
.
0
f
,
0
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_Clear returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_SetPixelShaderConstant
(
device
,
1
,
test_data_c1_coi
,
1
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_SetPixelShaderConstant returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_SetPixelShaderConstant
(
device
,
2
,
test_data_c2_coi
,
1
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_SetPixelShaderConstant returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_BeginScene
(
device
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_BeginScene returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_SetPixelShader
(
device
,
shader_11_coissue
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_SetPixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_DrawPrimitiveUP
(
device
,
D3DPT_TRIANGLESTRIP
,
2
,
quad1
,
6
*
sizeof
(
float
));
ok
(
hr
==
D3D_OK
,
"DrawPrimitiveUP failed (%08x)
\n
"
,
hr
);
hr
=
IDirect3DDevice8_SetPixelShader
(
device
,
shader_12_coissue
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_SetPixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_DrawPrimitiveUP
(
device
,
D3DPT_TRIANGLESTRIP
,
2
,
quad2
,
6
*
sizeof
(
float
));
ok
(
hr
==
D3D_OK
,
"DrawPrimitiveUP failed (%08x)
\n
"
,
hr
);
hr
=
IDirect3DDevice8_SetPixelShader
(
device
,
shader_13_coissue
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_SetPixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_DrawPrimitiveUP
(
device
,
D3DPT_TRIANGLESTRIP
,
2
,
quad3
,
6
*
sizeof
(
float
));
ok
(
hr
==
D3D_OK
,
"DrawPrimitiveUP failed (%08x)
\n
"
,
hr
);
hr
=
IDirect3DDevice8_SetPixelShader
(
device
,
shader_14_coissue
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_SetPixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_DrawPrimitiveUP
(
device
,
D3DPT_TRIANGLESTRIP
,
2
,
quad4
,
6
*
sizeof
(
float
));
ok
(
hr
==
D3D_OK
,
"DrawPrimitiveUP failed (%08x)
\n
"
,
hr
);
hr
=
IDirect3DDevice8_EndScene
(
device
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_EndScene returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_SetPixelShader
(
device
,
0
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_SetPixelShader returned %08x
\n
"
,
hr
);
/* This is the 1.4 test. The coissue doesn't change the behavior here, but keep in mind
* that we swapped the values in c1 and c2 to make the other tests return some color
*/
color
=
getPixelColor
(
device
,
158
,
118
);
ok
(
color
==
0x00ffffff
,
"pixel 158, 118 has color %08x, expected 0x00ffffff
\n
"
,
color
);
color
=
getPixelColor
(
device
,
162
,
118
);
ok
(
color
==
0x0000ffff
,
"pixel 162, 118 has color %08x, expected 0x0000ffff
\n
"
,
color
);
color
=
getPixelColor
(
device
,
158
,
122
);
ok
(
color
==
0x00ff00ff
,
"pixel 162, 122 has color %08x, expected 0x00ff00ff
\n
"
,
color
);
color
=
getPixelColor
(
device
,
162
,
122
);
ok
(
color
==
0x000000ff
,
"pixel 162, 122 has color %08x, expected 0x000000ff
\n
"
,
color
);
/* 1.1 shader. coissue flag changed the semantic of cnd, c1 is always selected
* (The Win7 nvidia driver always selects c2)
*/
color
=
getPixelColor
(
device
,
158
,
358
);
ok
(
color_match
(
color
,
0x0000ff00
,
1
)
||
broken
(
color_match
(
color
,
0x00ff00ff
,
1
)),
"pixel 158, 358 has color %08x, expected 0x0000ff00
\n
"
,
color
);
color
=
getPixelColor
(
device
,
162
,
358
);
ok
(
color_match
(
color
,
0x0000ff00
,
1
)
||
broken
(
color_match
(
color
,
0x00ff00ff
,
1
)),
"pixel 162, 358 has color %08x, expected 0x0000ff00
\n
"
,
color
);
color
=
getPixelColor
(
device
,
158
,
362
);
ok
(
color_match
(
color
,
0x0000ff00
,
1
)
||
broken
(
color_match
(
color
,
0x00ff00ff
,
1
)),
"pixel 158, 362 has color %08x, expected 0x0000ff00
\n
"
,
color
);
color
=
getPixelColor
(
device
,
162
,
362
);
ok
(
color_match
(
color
,
0x0000ff00
,
1
)
||
broken
(
color_match
(
color
,
0x00ff00ff
,
1
)),
"pixel 162, 362 has color %08x, expected 0x0000ff00
\n
"
,
color
);
/* 1.2 shader */
color
=
getPixelColor
(
device
,
478
,
358
);
ok
(
color_match
(
color
,
0x0000ff00
,
1
)
||
broken
(
color_match
(
color
,
0x00ff00ff
,
1
)),
"pixel 478, 358 has color %08x, expected 0x0000ff00
\n
"
,
color
);
color
=
getPixelColor
(
device
,
482
,
358
);
ok
(
color_match
(
color
,
0x0000ff00
,
1
)
||
broken
(
color_match
(
color
,
0x00ff00ff
,
1
)),
"pixel 482, 358 has color %08x, expected 0x0000ff00
\n
"
,
color
);
color
=
getPixelColor
(
device
,
478
,
362
);
ok
(
color_match
(
color
,
0x0000ff00
,
1
)
||
broken
(
color_match
(
color
,
0x00ff00ff
,
1
)),
"pixel 478, 362 has color %08x, expected 0x0000ff00
\n
"
,
color
);
color
=
getPixelColor
(
device
,
482
,
362
);
ok
(
color_match
(
color
,
0x0000ff00
,
1
)
||
broken
(
color_match
(
color
,
0x00ff00ff
,
1
)),
"pixel 482, 362 has color %08x, expected 0x0000ff00
\n
"
,
color
);
/* 1.3 shader */
color
=
getPixelColor
(
device
,
478
,
118
);
ok
(
color_match
(
color
,
0x0000ff00
,
1
)
||
broken
(
color_match
(
color
,
0x00ff00ff
,
1
)),
"pixel 478, 118 has color %08x, expected 0x0000ff00
\n
"
,
color
);
color
=
getPixelColor
(
device
,
482
,
118
);
ok
(
color_match
(
color
,
0x0000ff00
,
1
)
||
broken
(
color_match
(
color
,
0x00ff00ff
,
1
)),
"pixel 482, 118 has color %08x, expected 0x0000ff00
\n
"
,
color
);
color
=
getPixelColor
(
device
,
478
,
122
);
ok
(
color_match
(
color
,
0x0000ff00
,
1
)
||
broken
(
color_match
(
color
,
0x00ff00ff
,
1
)),
"pixel 478, 122 has color %08x, expected 0x0000ff00
\n
"
,
color
);
color
=
getPixelColor
(
device
,
482
,
122
);
ok
(
color_match
(
color
,
0x0000ff00
,
1
)
||
broken
(
color_match
(
color
,
0x00ff00ff
,
1
)),
"pixel 482, 122 has color %08x, expected 0x0000ff00
\n
"
,
color
);
hr
=
IDirect3DDevice8_Present
(
device
,
NULL
,
NULL
,
NULL
,
NULL
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_Present failed with %08x
\n
"
,
hr
);
/* Retest with the coissue flag on the alpha instruction instead. This works "as expected". */
hr
=
IDirect3DDevice8_Clear
(
device
,
0
,
NULL
,
D3DCLEAR_TARGET
,
0xff00ffff
,
0
.
0
f
,
0
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_Clear returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_BeginScene
(
device
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_BeginScene returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_SetPixelShader
(
device
,
shader_11_coissue_2
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_SetPixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_DrawPrimitiveUP
(
device
,
D3DPT_TRIANGLESTRIP
,
2
,
quad1
,
6
*
sizeof
(
float
));
ok
(
hr
==
D3D_OK
,
"DrawPrimitiveUP failed (%08x)
\n
"
,
hr
);
hr
=
IDirect3DDevice8_SetPixelShader
(
device
,
shader_12_coissue_2
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_SetPixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_DrawPrimitiveUP
(
device
,
D3DPT_TRIANGLESTRIP
,
2
,
quad2
,
6
*
sizeof
(
float
));
ok
(
hr
==
D3D_OK
,
"DrawPrimitiveUP failed (%08x)
\n
"
,
hr
);
hr
=
IDirect3DDevice8_SetPixelShader
(
device
,
shader_13_coissue_2
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_SetPixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_DrawPrimitiveUP
(
device
,
D3DPT_TRIANGLESTRIP
,
2
,
quad3
,
6
*
sizeof
(
float
));
ok
(
hr
==
D3D_OK
,
"DrawPrimitiveUP failed (%08x)
\n
"
,
hr
);
hr
=
IDirect3DDevice8_SetPixelShader
(
device
,
shader_14_coissue_2
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_SetPixelShader returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_DrawPrimitiveUP
(
device
,
D3DPT_TRIANGLESTRIP
,
2
,
quad4
,
6
*
sizeof
(
float
));
ok
(
hr
==
D3D_OK
,
"DrawPrimitiveUP failed (%08x)
\n
"
,
hr
);
hr
=
IDirect3DDevice8_EndScene
(
device
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_EndScene returned %08x
\n
"
,
hr
);
hr
=
IDirect3DDevice8_SetPixelShader
(
device
,
0
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_SetPixelShader returned %08x
\n
"
,
hr
);
/* 1.4 shader */
color
=
getPixelColor
(
device
,
158
,
118
);
ok
(
color
==
0x00ffffff
,
"pixel 158, 118 has color %08x, expected 0x00ffffff
\n
"
,
color
);
color
=
getPixelColor
(
device
,
162
,
118
);
ok
(
color
==
0x00000000
,
"pixel 162, 118 has color %08x, expected 0x00000000
\n
"
,
color
);
color
=
getPixelColor
(
device
,
158
,
122
);
ok
(
color
==
0x00ffffff
,
"pixel 162, 122 has color %08x, expected 0x00ffffff
\n
"
,
color
);
color
=
getPixelColor
(
device
,
162
,
122
);
ok
(
color
==
0x00000000
,
"pixel 162, 122 has color %08x, expected 0x00000000
\n
"
,
color
);
/* 1.1 shader */
color
=
getPixelColor
(
device
,
238
,
358
);
ok
(
color_match
(
color
,
0x00ffffff
,
1
),
"pixel 238, 358 has color %08x, expected 0x00ffffff
\n
"
,
color
);
color
=
getPixelColor
(
device
,
242
,
358
);
ok
(
color_match
(
color
,
0x00000000
,
1
),
"pixel 242, 358 has color %08x, expected 0x00000000
\n
"
,
color
);
color
=
getPixelColor
(
device
,
238
,
362
);
ok
(
color_match
(
color
,
0x00ffffff
,
1
),
"pixel 238, 362 has color %08x, expected 0x00ffffff
\n
"
,
color
);
color
=
getPixelColor
(
device
,
242
,
362
);
ok
(
color_match
(
color
,
0x00000000
,
1
),
"pixel 242, 362 has color %08x, expected 0x00000000
\n
"
,
color
);
/* 1.2 shader */
color
=
getPixelColor
(
device
,
558
,
358
);
ok
(
color_match
(
color
,
0x00ffffff
,
1
),
"pixel 558, 358 has color %08x, expected 0x00ffffff
\n
"
,
color
);
color
=
getPixelColor
(
device
,
562
,
358
);
ok
(
color_match
(
color
,
0x00000000
,
1
),
"pixel 562, 358 has color %08x, expected 0x00000000
\n
"
,
color
);
color
=
getPixelColor
(
device
,
558
,
362
);
ok
(
color_match
(
color
,
0x00ffffff
,
1
),
"pixel 558, 362 has color %08x, expected 0x00ffffff
\n
"
,
color
);
color
=
getPixelColor
(
device
,
562
,
362
);
ok
(
color_match
(
color
,
0x00000000
,
1
),
"pixel 562, 362 has color %08x, expected 0x00000000
\n
"
,
color
);
/* 1.3 shader */
color
=
getPixelColor
(
device
,
558
,
118
);
ok
(
color_match
(
color
,
0x00ffffff
,
1
),
"pixel 558, 118 has color %08x, expected 0x00ffffff
\n
"
,
color
);
color
=
getPixelColor
(
device
,
562
,
118
);
ok
(
color_match
(
color
,
0x00000000
,
1
),
"pixel 562, 118 has color %08x, expected 0x00000000
\n
"
,
color
);
color
=
getPixelColor
(
device
,
558
,
122
);
ok
(
color_match
(
color
,
0x00ffffff
,
1
),
"pixel 558, 122 has color %08x, expected 0x00ffffff
\n
"
,
color
);
color
=
getPixelColor
(
device
,
562
,
122
);
ok
(
color_match
(
color
,
0x00000000
,
1
),
"pixel 562, 122 has color %08x, expected 0x00000000
\n
"
,
color
);
hr
=
IDirect3DDevice8_Present
(
device
,
NULL
,
NULL
,
NULL
,
NULL
);
ok
(
hr
==
D3D_OK
,
"IDirect3DDevice8_Present failed with %08x
\n
"
,
hr
);
IDirect3DDevice8_DeletePixelShader
(
device
,
shader_14_coissue_2
);
IDirect3DDevice8_DeletePixelShader
(
device
,
shader_13_coissue_2
);
IDirect3DDevice8_DeletePixelShader
(
device
,
shader_12_coissue_2
);
IDirect3DDevice8_DeletePixelShader
(
device
,
shader_11_coissue_2
);
IDirect3DDevice8_DeletePixelShader
(
device
,
shader_14_coissue
);
IDirect3DDevice8_DeletePixelShader
(
device
,
shader_13_coissue
);
IDirect3DDevice8_DeletePixelShader
(
device
,
shader_12_coissue
);
IDirect3DDevice8_DeletePixelShader
(
device
,
shader_11_coissue
);
IDirect3DDevice8_DeletePixelShader
(
device
,
shader_14
);
IDirect3DDevice8_DeletePixelShader
(
device
,
shader_13
);
IDirect3DDevice8_DeletePixelShader
(
device
,
shader_12
);
IDirect3DDevice8_DeletePixelShader
(
device
,
shader_11
);
}
static
void
present_test
(
IDirect3DDevice8
*
device
)
{
struct
vertex
quad
[]
=
...
...
@@ -3552,7 +4074,11 @@ START_TEST(visual)
{
test_rcp_rsq
(
device_ptr
);
if
(
caps
.
PixelShaderVersion
>=
D3DPS_VERSION
(
1
,
1
))
{
fog_with_shader_test
(
device_ptr
);
if
(
caps
.
PixelShaderVersion
>=
D3DPS_VERSION
(
1
,
4
))
cnd_test
(
device_ptr
);
}
}
else
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment