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
6ce99d16
Commit
6ce99d16
authored
Sep 17, 2023
by
Nikolay Sivov
Committed by
Alexandre Julliard
Sep 22, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
d3d10/effect: Add signed integer compare instructions for expressions.
Signed-off-by:
Nikolay Sivov
<
nsivov@codeweavers.com
>
parent
d49a6ab0
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
136 additions
and
5 deletions
+136
-5
effect.c
dlls/d3d10/effect.c
+60
-0
effect.c
dlls/d3d10/tests/effect.c
+76
-5
No files found.
dlls/d3d10/effect.c
View file @
6ce99d16
...
...
@@ -411,6 +411,62 @@ static void pres_iadd(float **args, unsigned int n, const struct preshader_instr
}
}
static
void
pres_bilt
(
float
**
args
,
unsigned
int
n
,
const
struct
preshader_instr
*
instr
)
{
int
*
arg1
=
(
int
*
)
args
[
0
];
int
*
arg2
=
(
int
*
)
args
[
1
];
float
*
retval
=
args
[
2
];
unsigned
int
i
;
for
(
i
=
0
;
i
<
instr
->
comp_count
;
++
i
)
{
unsigned
int
v
=
arg1
[
instr
->
scalar
?
0
:
i
]
<
arg2
[
i
]
?
~
0u
:
0
;
retval
[
i
]
=
*
(
float
*
)
&
v
;
}
}
static
void
pres_bige
(
float
**
args
,
unsigned
int
n
,
const
struct
preshader_instr
*
instr
)
{
int
*
arg1
=
(
int
*
)
args
[
0
];
int
*
arg2
=
(
int
*
)
args
[
1
];
float
*
retval
=
args
[
2
];
unsigned
int
i
;
for
(
i
=
0
;
i
<
instr
->
comp_count
;
++
i
)
{
unsigned
int
v
=
arg1
[
instr
->
scalar
?
0
:
i
]
>=
arg2
[
i
]
?
~
0u
:
0
;
retval
[
i
]
=
*
(
float
*
)
&
v
;
}
}
static
void
pres_bieq
(
float
**
args
,
unsigned
int
n
,
const
struct
preshader_instr
*
instr
)
{
int
*
arg1
=
(
int
*
)
args
[
0
];
int
*
arg2
=
(
int
*
)
args
[
1
];
float
*
retval
=
args
[
2
];
unsigned
int
i
;
for
(
i
=
0
;
i
<
instr
->
comp_count
;
++
i
)
{
unsigned
int
v
=
arg1
[
instr
->
scalar
?
0
:
i
]
==
arg2
[
i
]
?
~
0u
:
0
;
retval
[
i
]
=
*
(
float
*
)
&
v
;
}
}
static
void
pres_bine
(
float
**
args
,
unsigned
int
n
,
const
struct
preshader_instr
*
instr
)
{
int
*
arg1
=
(
int
*
)
args
[
0
];
int
*
arg2
=
(
int
*
)
args
[
1
];
float
*
retval
=
args
[
2
];
unsigned
int
i
;
for
(
i
=
0
;
i
<
instr
->
comp_count
;
++
i
)
{
unsigned
int
v
=
arg1
[
instr
->
scalar
?
0
:
i
]
!=
arg2
[
i
]
?
~
0u
:
0
;
retval
[
i
]
=
*
(
float
*
)
&
v
;
}
}
static
void
pres_udiv
(
float
**
args
,
unsigned
int
n
,
const
struct
preshader_instr
*
instr
)
{
unsigned
int
*
arg1
=
(
unsigned
int
*
)
args
[
0
];
...
...
@@ -544,6 +600,10 @@ static const struct preshader_op_info preshader_ops[] =
{
0x205
,
"mul"
,
pres_mul
},
{
0x206
,
"atan2"
,
pres_atan2
},
{
0x208
,
"div"
,
pres_div
},
{
0x210
,
"bilt"
,
pres_bilt
},
{
0x211
,
"bige"
,
pres_bige
},
{
0x212
,
"bieq"
,
pres_bieq
},
{
0x213
,
"bine"
,
pres_bine
},
{
0x216
,
"iadd"
,
pres_iadd
},
{
0x21a
,
"udiv"
,
pres_udiv
},
{
0x21d
,
"imin"
,
pres_imin
},
...
...
dlls/d3d10/tests/effect.c
View file @
6ce99d16
...
...
@@ -8267,13 +8267,18 @@ technique10 tech
{
SetBlendState( NULL, g_var3.x / g_var3.y, 0 );
}
pass p20
{
SetBlendState( NULL, g_var3.x < g_var3.y ? (g_var3.x >= g_var3.z ? 0 : 1 ) :
(g_var3.x != g_var3.z ? g_var3.z == g_var3.w : 2), 0 );
}
}
#endif
static
DWORD
fx_test_value_expression
[]
=
{
0x43425844
,
0x
2f343430
,
0x7bdca8e3
,
0x8bdb9976
,
0xddfe53fd
,
0x00000001
,
0x00002898
,
0x00000001
,
0x00000024
,
0x30315846
,
0x00002
86c
,
0xfeff1001
,
0x00000001
,
0x00000004
,
0x00000001
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000001
,
0x00002
2
b4
,
0x00000000
,
0x00000000
,
0x00000001
,
0x00000000
,
0x43425844
,
0x
0665faf3
,
0x70ffa2d0
,
0x6f046007
,
0x12b30760
,
0x00000001
,
0x00002bd4
,
0x00000001
,
0x00000024
,
0x30315846
,
0x00002
ba8
,
0xfeff1001
,
0x00000001
,
0x00000004
,
0x00000001
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000001
,
0x00002
5
b4
,
0x00000000
,
0x00000000
,
0x00000001
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x6f6c4724
,
0x736c6162
,
0x6f6c6600
,
0x00347461
,
0x0000000d
,
0x00000001
,
0x00000000
,
0x00000010
,
0x00000010
,
0x00000010
,
0x0000210a
,
0x61765f67
,
0x5f670072
,
0x32726176
,
0x746e6900
,
0x003d0034
,
0x00010000
,
...
...
@@ -8552,13 +8557,37 @@ static DWORD fx_test_value_expression[] =
0x00000004
,
0x00000001
,
0x13000001
,
0x00000001
,
0x00000000
,
0x00000007
,
0x00000008
,
0x00000000
,
0x00000004
,
0x00000002
,
0x13000001
,
0x00000001
,
0x00000000
,
0x00000007
,
0x00000008
,
0x00000000
,
0x00000004
,
0x00000003
,
0xf0f0f0f0
,
0x0f0f0f0f
,
0x0000ffff
,
0x00000001
,
0x00000002
,
0x00000000
,
0x00000001
,
0x00000002
,
0x00000000
,
0x00303270
,
0x000002e0
,
0x43425844
,
0x561ee53c
,
0x9807d928
,
0x8a3e8c4e
,
0x78f7bcb7
,
0x00000001
,
0x000002e0
,
0x00000003
,
0x0000002c
,
0x000000a8
,
0x000000c4
,
0x42415443
,
0x00000074
,
0x0000001c
,
0x0000004b
,
0x46580400
,
0x00000001
,
0x0000001c
,
0x00000100
,
0x00000048
,
0x00000030
,
0x00000002
,
0x00000001
,
0x00000038
,
0x00000000
,
0x61765f67
,
0xab003372
,
0x00020001
,
0x00040001
,
0x00000001
,
0x00000000
,
0x4d007874
,
0x6f726369
,
0x74666f73
,
0x29522820
,
0x534c4820
,
0x6853204c
,
0x72656461
,
0x6d6f4320
,
0x656c6970
,
0x30312072
,
0xab00312e
,
0x34494c43
,
0x00000014
,
0x00000004
,
0x00000000
,
0x00000001
,
0x00000002
,
0x00000000
,
0x434c5846
,
0x00000214
,
0x0000000c
,
0x21200001
,
0x00000002
,
0x00000000
,
0x00000002
,
0x00000003
,
0x00000000
,
0x00000002
,
0x00000002
,
0x00000000
,
0x00000007
,
0x00000000
,
0x23000001
,
0x00000002
,
0x00000000
,
0x00000007
,
0x00000000
,
0x00000000
,
0x00000001
,
0x00000001
,
0x00000000
,
0x00000007
,
0x00000004
,
0x21300001
,
0x00000002
,
0x00000000
,
0x00000002
,
0x00000002
,
0x00000000
,
0x00000002
,
0x00000000
,
0x00000000
,
0x00000007
,
0x00000000
,
0x30100001
,
0x00000003
,
0x00000000
,
0x00000007
,
0x00000000
,
0x00000000
,
0x00000007
,
0x00000004
,
0x00000000
,
0x00000001
,
0x00000002
,
0x00000000
,
0x00000007
,
0x00000008
,
0x21100001
,
0x00000002
,
0x00000000
,
0x00000002
,
0x00000000
,
0x00000000
,
0x00000002
,
0x00000002
,
0x00000000
,
0x00000007
,
0x00000000
,
0x30100001
,
0x00000003
,
0x00000000
,
0x00000007
,
0x00000000
,
0x00000000
,
0x00000001
,
0x00000000
,
0x00000000
,
0x00000001
,
0x00000001
,
0x00000000
,
0x00000007
,
0x00000004
,
0x21000001
,
0x00000002
,
0x00000000
,
0x00000002
,
0x00000000
,
0x00000000
,
0x00000002
,
0x00000001
,
0x00000000
,
0x00000007
,
0x00000000
,
0x30100001
,
0x00000003
,
0x00000000
,
0x00000007
,
0x00000000
,
0x00000000
,
0x00000007
,
0x00000004
,
0x00000000
,
0x00000007
,
0x00000008
,
0x00000000
,
0x00000007
,
0x0000000c
,
0x13000001
,
0x00000001
,
0x00000000
,
0x00000007
,
0x0000000c
,
0x00000000
,
0x00000004
,
0x00000000
,
0x13000001
,
0x00000001
,
0x00000000
,
0x00000007
,
0x0000000c
,
0x00000000
,
0x00000004
,
0x00000001
,
0x13000001
,
0x00000001
,
0x00000000
,
0x00000007
,
0x0000000c
,
0x00000000
,
0x00000004
,
0x00000002
,
0x13000001
,
0x00000001
,
0x00000000
,
0x00000007
,
0x0000000c
,
0x00000000
,
0x00000004
,
0x00000003
,
0xf0f0f0f0
,
0x0f0f0f0f
,
0x0000ffff
,
0x00000001
,
0x00000002
,
0x00000000
,
0x00000001
,
0x00000002
,
0x00000000
,
0x00000004
,
0x00000040
,
0x00000000
,
0x00000004
,
0xffffffff
,
0x00000000
,
0x00000030
,
0x00000014
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000036
,
0x00000014
,
0x00000000
,
0x00000010
,
0x00000000
,
0x00000000
,
0x00000000
,
0x0000005e
,
0x00000042
,
0x00000000
,
0x00000020
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000087
,
0x0000006b
,
0x00000000
,
0x00000030
,
0x00000000
,
0x00000000
,
0x00000000
,
0x000000bc
,
0x000000a0
,
0x00000000
,
0xffffffff
,
0x00000001
,
0x00000019
,
0x00000000
,
0x00000006
,
0x000000c5
,
0x00000000
,
0x000001b5
,
0x0000001
4
,
0x00000000
,
0x000001ba
,
0x00000003
,
0x00000000
,
0x0000000a
,
0x00000000
,
0x00000006
,
0x0000001
5
,
0x00000000
,
0x000001ba
,
0x00000003
,
0x00000000
,
0x0000000a
,
0x00000000
,
0x00000006
,
0x000001bd
,
0x0000000b
,
0x00000000
,
0x00000001
,
0x00000405
,
0x00000002
,
0x00000000
,
0x00000001
,
0x00000411
,
0x0000041d
,
0x00000003
,
0x00000000
,
0x0000000a
,
0x00000000
,
0x00000006
,
0x00000420
,
0x0000000b
,
0x00000000
,
0x00000001
,
0x00000574
,
0x00000002
,
0x00000000
,
0x00000001
,
0x00000580
,
...
...
@@ -8595,7 +8624,9 @@ static DWORD fx_test_value_expression[] =
0x00001e28
,
0x00000003
,
0x00000000
,
0x0000000a
,
0x00000000
,
0x00000006
,
0x00001e2c
,
0x0000000b
,
0x00000000
,
0x00000001
,
0x00001fac
,
0x00000002
,
0x00000000
,
0x00000001
,
0x00001fb8
,
0x00001fc4
,
0x00000003
,
0x00000000
,
0x0000000a
,
0x00000000
,
0x00000006
,
0x00001fc8
,
0x0000000b
,
0x00000000
,
0x00000001
,
0x0000229c
,
0x00000002
,
0x00000000
,
0x00000001
,
0x000022a8
,
0x00000001
,
0x0000229c
,
0x00000002
,
0x00000000
,
0x00000001
,
0x000022a8
,
0x000022b4
,
0x00000003
,
0x00000000
,
0x0000000a
,
0x00000000
,
0x00000006
,
0x000022b8
,
0x0000000b
,
0x00000000
,
0x00000001
,
0x0000259c
,
0x00000002
,
0x00000000
,
0x00000001
,
0x000025a8
,
};
static
float
get_frc
(
float
v
)
...
...
@@ -9017,6 +9048,46 @@ static void test_effect_value_expression(void)
ok
(
blend_factor
[
3
]
==
2
.
0
f
,
"Got unexpected blend_factor[3] %.8e.
\n
"
,
blend_factor
[
3
]);
ok
(
!
sample_mask
,
"Got unexpected sample_mask %#x.
\n
"
,
sample_mask
);
/* Integer comparison */
pass
=
t
->
lpVtbl
->
GetPassByName
(
t
,
"p20"
);
ok
(
pass
->
lpVtbl
->
IsValid
(
pass
),
"Expected valid pass.
\n
"
);
i
[
0
]
=
1
;
i
[
1
]
=
5
;
i
[
2
]
=
6
;
i
[
3
]
=
5
;
hr
=
g_var3
->
lpVtbl
->
SetIntVector
(
g_var3
,
i
);
ok
(
hr
==
S_OK
,
"Unexpected hr %#lx.
\n
"
,
hr
);
hr
=
pass
->
lpVtbl
->
Apply
(
pass
,
0
);
ok
(
hr
==
S_OK
,
"Got unexpected hr %#lx.
\n
"
,
hr
);
ID3D10Device_OMGetBlendState
(
device
,
&
blend_state
,
blend_factor
,
&
sample_mask
);
ok
(
!
blend_state
,
"Unexpected blend state %p.
\n
"
,
blend_state
);
ok
(
blend_factor
[
0
]
==
1
.
0
f
,
"Got unexpected blend_factor[0] %.8e.
\n
"
,
blend_factor
[
0
]);
ok
(
blend_factor
[
1
]
==
1
.
0
f
,
"Got unexpected blend_factor[1] %.8e.
\n
"
,
blend_factor
[
1
]);
ok
(
blend_factor
[
2
]
==
1
.
0
f
,
"Got unexpected blend_factor[2] %.8e.
\n
"
,
blend_factor
[
2
]);
ok
(
blend_factor
[
3
]
==
1
.
0
f
,
"Got unexpected blend_factor[3] %.8e.
\n
"
,
blend_factor
[
3
]);
ok
(
!
sample_mask
,
"Got unexpected sample_mask %#x.
\n
"
,
sample_mask
);
i
[
0
]
=
2
;
i
[
1
]
=
1
;
i
[
2
]
=
2
;
i
[
3
]
=
5
;
hr
=
g_var3
->
lpVtbl
->
SetIntVector
(
g_var3
,
i
);
ok
(
hr
==
S_OK
,
"Unexpected hr %#lx.
\n
"
,
hr
);
hr
=
pass
->
lpVtbl
->
Apply
(
pass
,
0
);
ok
(
hr
==
S_OK
,
"Got unexpected hr %#lx.
\n
"
,
hr
);
ID3D10Device_OMGetBlendState
(
device
,
&
blend_state
,
blend_factor
,
&
sample_mask
);
ok
(
!
blend_state
,
"Unexpected blend state %p.
\n
"
,
blend_state
);
ok
(
blend_factor
[
0
]
==
2
.
0
f
,
"Got unexpected blend_factor[0] %.8e.
\n
"
,
blend_factor
[
0
]);
ok
(
blend_factor
[
1
]
==
2
.
0
f
,
"Got unexpected blend_factor[1] %.8e.
\n
"
,
blend_factor
[
1
]);
ok
(
blend_factor
[
2
]
==
2
.
0
f
,
"Got unexpected blend_factor[2] %.8e.
\n
"
,
blend_factor
[
2
]);
ok
(
blend_factor
[
3
]
==
2
.
0
f
,
"Got unexpected blend_factor[3] %.8e.
\n
"
,
blend_factor
[
3
]);
ok
(
!
sample_mask
,
"Got unexpected sample_mask %#x.
\n
"
,
sample_mask
);
effect
->
lpVtbl
->
Release
(
effect
);
refcount
=
ID3D10Device_Release
(
device
);
...
...
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