HLSL: Fix unary and binary operator type conversion issues
This fixes defects as follows: 1. handleLvalue could be called on a non-L-value, and it shouldn't be. 2. HLSL allows unary negation on non-bool values. TUnaryOperator::promote can now promote other types (e.g, int, float) to bool for this op. 3. HLSL allows binary logical operations (&&, ||) on arbitrary types, similar (2). 4. HLSL allows mod operation on arbitrary types, which will be promoted. E.g, int % float -> float % float.
This commit is contained in:
parent
5d45eadedc
commit
e5921f1309
12 changed files with 946 additions and 16 deletions
28
Test/hlsl.promote.binary.frag
Normal file
28
Test/hlsl.promote.binary.frag
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
struct PS_OUTPUT
|
||||
{
|
||||
float4 Color : SV_Target0;
|
||||
};
|
||||
|
||||
uniform bool bval;
|
||||
uniform bool4 bval4;
|
||||
uniform int ival;
|
||||
uniform int4 ival4;
|
||||
uniform float fval;
|
||||
uniform float4 fval4;
|
||||
|
||||
PS_OUTPUT main()
|
||||
{
|
||||
ival % fval;
|
||||
ival4 % fval4;
|
||||
|
||||
bval % fval;
|
||||
bval4 % fval4;
|
||||
|
||||
int l_int = 1;
|
||||
l_int %= fval;
|
||||
|
||||
PS_OUTPUT psout;
|
||||
psout.Color = 0;
|
||||
return psout;
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue