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.
		
			
				
	
	
		
			22 lines
		
	
	
		
			273 B
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			22 lines
		
	
	
		
			273 B
		
	
	
	
		
			GLSL
		
	
	
	
	
	
struct PS_OUTPUT
 | 
						|
{
 | 
						|
    float4 Color : SV_Target0;
 | 
						|
};
 | 
						|
 | 
						|
uniform int    ival;
 | 
						|
uniform int4   ival4;
 | 
						|
uniform float  fval;
 | 
						|
uniform float4 fval4;
 | 
						|
 | 
						|
PS_OUTPUT main()
 | 
						|
{
 | 
						|
    if (ival && fval);
 | 
						|
    if (ival || fval);
 | 
						|
 | 
						|
    PS_OUTPUT psout;
 | 
						|
    psout.Color = 1.0;
 | 
						|
    return psout;
 | 
						|
}
 | 
						|
 | 
						|
 |