Skip to content

Commit

Permalink
Fixed printing of int/float bitcast operations.
Browse files Browse the repository at this point in the history
  • Loading branch information
aras-p committed Jan 23, 2015
1 parent bfcbb60 commit f4731b5
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 58 deletions.
1 change: 1 addition & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Fixes:
* Metal: Fixed some cases of reciprocal (1/x) printing missing half precision cast.
* GLES3: textureOffset with a mipmap bias is printed correctly now.
* Fixed a bug with loop inductor detection if the inductor was used before the loop for some things.
* Fixed printing of int/float bitcast operations.


2014 10
Expand Down
10 changes: 5 additions & 5 deletions src/glsl/ir_print_glsl_visitor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -529,10 +529,10 @@ static const char *const operator_glsl_strs[] = {
"float", // u2f
"int", // i2u
"int", // u2i
"float", // bit i2f
"int", // bit f2i
"float", // bit u2f
"int", // bit f2u
"intBitsToFloat", // bit i2f
"floatBitsToInt", // bit f2i
"uintBitsToFloat", // bit u2f
"floatBitsToUint", // bit f2u
"any",
"trunc",
"ceil",
Expand Down Expand Up @@ -644,7 +644,7 @@ void ir_print_glsl_visitor::visit(ir_expression *ir)
newline_indent();

if (ir->get_num_operands() == 1) {
if (ir->operation >= ir_unop_f2i && ir->operation < ir_unop_any) {
if (ir->operation >= ir_unop_f2i && ir->operation <= ir_unop_u2i) {
print_type(buffer, ir->type, true);
buffer.asprintf_append ("(");
} else if (ir->operation == ir_unop_rcp) {
Expand Down
14 changes: 9 additions & 5 deletions src/glsl/ir_print_metal_visitor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -801,10 +801,10 @@ static const char *const operator_glsl_strs[] = {
"float", // u2f
"int", // i2u
"int", // u2i
"float", // bit i2f
"int", // bit f2i
"float", // bit u2f
"int", // bit f2u
"as_type_", // bit i2f
"as_type_", // bit f2i
"as_type_", // bit u2f
"as_type_", // bit f2u
"any",
"trunc",
"ceil",
Expand Down Expand Up @@ -965,9 +965,13 @@ void ir_print_metal_visitor::visit(ir_expression *ir)
{
if (op0cast)
print_cast (buffer, arg_prec, ir->operands[0]);
if (ir->operation >= ir_unop_f2i && ir->operation < ir_unop_any) {
if (ir->operation >= ir_unop_f2i && ir->operation <= ir_unop_u2i) {
print_type(buffer, ir, ir->type, true);
buffer.asprintf_append ("(");
} else if (ir->operation >= ir_unop_bitcast_i2f && ir->operation <= ir_unop_bitcast_f2u) {
buffer.asprintf_append("as_type<");
print_type(buffer, ir, ir->type, true);
buffer.asprintf_append(">(");
} else if (ir->operation == ir_unop_rcp) {
const bool halfCast = (arg_prec == glsl_precision_medium || arg_prec == glsl_precision_low);
buffer.asprintf_append (halfCast ? "((half)1.0/(" : "(1.0/(");
Expand Down
48 changes: 24 additions & 24 deletions tests/vertex/loops-for-withvec4inductorW-outES3.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,44 +23,44 @@ ivec4 Temp_int_0;
ivec4 Temp_int_1;
void main ()
{
Temp_int_0 = ivec4((in_POSITION0.yyyy * glstate_matrix_mvp[1]));
Temp_int_0 = ivec4(((glstate_matrix_mvp[0] * in_POSITION0.xxxx) + vec4(Temp_int_0)));
Temp_int_0 = ivec4(((glstate_matrix_mvp[2] * in_POSITION0.zzzz) + vec4(Temp_int_0)));
phase0_Output2 = ((glstate_matrix_mvp[3] * in_POSITION0.wwww) + vec4(Temp_int_0));
Temp_int_0 = floatBitsToInt((in_POSITION0.yyyy * glstate_matrix_mvp[1]));
Temp_int_0 = floatBitsToInt(((glstate_matrix_mvp[0] * in_POSITION0.xxxx) + intBitsToFloat(Temp_int_0)));
Temp_int_0 = floatBitsToInt(((glstate_matrix_mvp[2] * in_POSITION0.zzzz) + intBitsToFloat(Temp_int_0)));
phase0_Output2 = ((glstate_matrix_mvp[3] * in_POSITION0.wwww) + intBitsToFloat(Temp_int_0));
TEXCOORD0.xy = ((in_TEXCOORD0.xy * _MainTex_ST.xy) + _MainTex_ST.zw);
Temp_int_0.xyz = ivec3((in_POSITION0.yyy * glstate_matrix_modelview0[1].xyz));
Temp_int_0.xyz = ivec3(((glstate_matrix_modelview0[0].xyz * in_POSITION0.xxx) + vec4(Temp_int_0).xyz));
Temp_int_0.xyz = ivec3(((glstate_matrix_modelview0[2].xyz * in_POSITION0.zzz) + vec4(Temp_int_0).xyz));
Temp_int_0.xyz = ivec3(((glstate_matrix_modelview0[3].xyz * in_POSITION0.www) + vec4(Temp_int_0).xyz));
Temp_int_1.xyz = ivec3((in_NORMAL0.yyy * glstate_matrix_invtrans_modelview0[1].xyz));
Temp_int_1.xyz = ivec3(((glstate_matrix_invtrans_modelview0[0].xyz * in_NORMAL0.xxx) + vec4(Temp_int_1).xyz));
Temp_int_1.xyz = ivec3(((glstate_matrix_invtrans_modelview0[2].xyz * in_NORMAL0.zzz) + vec4(Temp_int_1).xyz));
Temp_int_0.w = int(dot (vec4(Temp_int_1).xyz, vec4(Temp_int_1).xyz));
Temp_int_0.w = int(inversesqrt(vec4(Temp_int_0).w));
Temp_int_1.xyz = ivec3((vec4(Temp_int_0).www * vec4(Temp_int_1).xyz));
Temp_int_0.xyz = floatBitsToInt((in_POSITION0.yyy * glstate_matrix_modelview0[1].xyz));
Temp_int_0.xyz = floatBitsToInt(((glstate_matrix_modelview0[0].xyz * in_POSITION0.xxx) + intBitsToFloat(Temp_int_0).xyz));
Temp_int_0.xyz = floatBitsToInt(((glstate_matrix_modelview0[2].xyz * in_POSITION0.zzz) + intBitsToFloat(Temp_int_0).xyz));
Temp_int_0.xyz = floatBitsToInt(((glstate_matrix_modelview0[3].xyz * in_POSITION0.www) + intBitsToFloat(Temp_int_0).xyz));
Temp_int_1.xyz = floatBitsToInt((in_NORMAL0.yyy * glstate_matrix_invtrans_modelview0[1].xyz));
Temp_int_1.xyz = floatBitsToInt(((glstate_matrix_invtrans_modelview0[0].xyz * in_NORMAL0.xxx) + intBitsToFloat(Temp_int_1).xyz));
Temp_int_1.xyz = floatBitsToInt(((glstate_matrix_invtrans_modelview0[2].xyz * in_NORMAL0.zzz) + intBitsToFloat(Temp_int_1).xyz));
Temp_int_0.w = floatBitsToInt(dot (intBitsToFloat(Temp_int_1).xyz, intBitsToFloat(Temp_int_1).xyz));
Temp_int_0.w = floatBitsToInt(inversesqrt(intBitsToFloat(Temp_int_0).w));
Temp_int_1.xyz = floatBitsToInt((intBitsToFloat(Temp_int_0).www * intBitsToFloat(Temp_int_1).xyz));
Temp_2.xyz = glstate_lightmodel_ambient.xyz;
Temp_int_0.w = 0;
for (; Temp_int_0.w < 4; Temp_int_0.w = (Temp_int_0.w + 1)) {
Temp_3.xyz = ((-(
vec4(Temp_int_0)
intBitsToFloat(Temp_int_0)
.xyz) * unity_LightPosition[Temp_int_0.w].www) + unity_LightPosition[Temp_int_0.w].xyz);
Temp_int_1.w = int(dot (Temp_3.xyz, Temp_3.xyz));
Temp_2.w = inversesqrt(vec4(Temp_int_1).w);
Temp_int_1.w = floatBitsToInt(dot (Temp_3.xyz, Temp_3.xyz));
Temp_2.w = inversesqrt(intBitsToFloat(Temp_int_1).w);
Temp_3.xyz = (Temp_2.www * Temp_3.xyz);
Temp_int_1.w = int(((
vec4(Temp_int_1)
Temp_int_1.w = floatBitsToInt(((
intBitsToFloat(Temp_int_1)
.w * unity_LightAtten[Temp_int_0.w].z) + 1.0));
Temp_int_1.w = int((1.0/(vec4(Temp_int_1).w)));
Temp_int_1.w = floatBitsToInt((1.0/(intBitsToFloat(Temp_int_1).w)));
Temp_2.w = dot (Temp_3.xyz, unity_SpotDirection[Temp_int_0.w].xyz);
Temp_2.w = max (Temp_2.w, 0.0);
Temp_2.w = (Temp_2.w - unity_LightAtten[Temp_int_0.w].x);
Temp_2.w = (Temp_2.w * unity_LightAtten[Temp_int_0.w].y);
Temp_2.w = clamp (Temp_2.w, 0.0, 1.0);
Temp_int_1.w = int((vec4(Temp_int_1).w * Temp_2.w));
Temp_2.w = dot (vec4(Temp_int_1).xyz, Temp_3.xyz);
Temp_int_1.w = floatBitsToInt((intBitsToFloat(Temp_int_1).w * Temp_2.w));
Temp_2.w = dot (intBitsToFloat(Temp_int_1).xyz, Temp_3.xyz);
Temp_2.w = max (Temp_2.w, 0.0);
Temp_int_1.w = int((vec4(Temp_int_1).w * Temp_2.w));
Temp_2.xyz = ((unity_LightColor[Temp_int_0.w].xyz * vec4(Temp_int_1).www) + Temp_2.xyz);
Temp_int_1.w = floatBitsToInt((intBitsToFloat(Temp_int_1).w * Temp_2.w));
Temp_2.xyz = ((unity_LightColor[Temp_int_0.w].xyz * intBitsToFloat(Temp_int_1).www) + Temp_2.xyz);
};
COLOR0.xyz = (Temp_2.xyz * _Color.xyz);
COLOR0.w = (_Color.w * _ReflectColor.w);
Expand Down
48 changes: 24 additions & 24 deletions tests/vertex/loops-for-withvec4inductorW-outES3Metal.txt
Original file line number Diff line number Diff line change
Expand Up @@ -32,44 +32,44 @@ float4 Temp_2_2;
float4 Temp_3_3;
int4 Temp_int_0_4;
int4 Temp_int_1_5;
Temp_int_0_4 = int4((_mtl_i.in_POSITION0.yyyy * _mtl_u.glstate_matrix_mvp[1]));
Temp_int_0_4 = int4(((_mtl_u.glstate_matrix_mvp[0] * _mtl_i.in_POSITION0.xxxx) + float4(Temp_int_0_4)));
Temp_int_0_4 = int4(((_mtl_u.glstate_matrix_mvp[2] * _mtl_i.in_POSITION0.zzzz) + float4(Temp_int_0_4)));
phase0_Output2_1 = ((_mtl_u.glstate_matrix_mvp[3] * _mtl_i.in_POSITION0.wwww) + float4(Temp_int_0_4));
Temp_int_0_4 = as_type<int4>((_mtl_i.in_POSITION0.yyyy * _mtl_u.glstate_matrix_mvp[1]));
Temp_int_0_4 = as_type<int4>(((_mtl_u.glstate_matrix_mvp[0] * _mtl_i.in_POSITION0.xxxx) + as_type<float4>(Temp_int_0_4)));
Temp_int_0_4 = as_type<int4>(((_mtl_u.glstate_matrix_mvp[2] * _mtl_i.in_POSITION0.zzzz) + as_type<float4>(Temp_int_0_4)));
phase0_Output2_1 = ((_mtl_u.glstate_matrix_mvp[3] * _mtl_i.in_POSITION0.wwww) + as_type<float4>(Temp_int_0_4));
_mtl_o.TEXCOORD0.xy = ((_mtl_i.in_TEXCOORD0.xy * _mtl_u._MainTex_ST.xy) + _mtl_u._MainTex_ST.zw);
Temp_int_0_4.xyz = int3((_mtl_i.in_POSITION0.yyy * _mtl_u.glstate_matrix_modelview0[1].xyz));
Temp_int_0_4.xyz = int3(((_mtl_u.glstate_matrix_modelview0[0].xyz * _mtl_i.in_POSITION0.xxx) + float4(Temp_int_0_4).xyz));
Temp_int_0_4.xyz = int3(((_mtl_u.glstate_matrix_modelview0[2].xyz * _mtl_i.in_POSITION0.zzz) + float4(Temp_int_0_4).xyz));
Temp_int_0_4.xyz = int3(((_mtl_u.glstate_matrix_modelview0[3].xyz * _mtl_i.in_POSITION0.www) + float4(Temp_int_0_4).xyz));
Temp_int_1_5.xyz = int3((_mtl_i.in_NORMAL0.yyy * _mtl_u.glstate_matrix_invtrans_modelview0[1].xyz));
Temp_int_1_5.xyz = int3(((_mtl_u.glstate_matrix_invtrans_modelview0[0].xyz * _mtl_i.in_NORMAL0.xxx) + float4(Temp_int_1_5).xyz));
Temp_int_1_5.xyz = int3(((_mtl_u.glstate_matrix_invtrans_modelview0[2].xyz * _mtl_i.in_NORMAL0.zzz) + float4(Temp_int_1_5).xyz));
Temp_int_0_4.w = int(dot (float4(Temp_int_1_5).xyz, float4(Temp_int_1_5).xyz));
Temp_int_0_4.w = int(rsqrt(float4(Temp_int_0_4).w));
Temp_int_1_5.xyz = int3((float4(Temp_int_0_4).www * float4(Temp_int_1_5).xyz));
Temp_int_0_4.xyz = as_type<int3>((_mtl_i.in_POSITION0.yyy * _mtl_u.glstate_matrix_modelview0[1].xyz));
Temp_int_0_4.xyz = as_type<int3>(((_mtl_u.glstate_matrix_modelview0[0].xyz * _mtl_i.in_POSITION0.xxx) + as_type<float4>(Temp_int_0_4).xyz));
Temp_int_0_4.xyz = as_type<int3>(((_mtl_u.glstate_matrix_modelview0[2].xyz * _mtl_i.in_POSITION0.zzz) + as_type<float4>(Temp_int_0_4).xyz));
Temp_int_0_4.xyz = as_type<int3>(((_mtl_u.glstate_matrix_modelview0[3].xyz * _mtl_i.in_POSITION0.www) + as_type<float4>(Temp_int_0_4).xyz));
Temp_int_1_5.xyz = as_type<int3>((_mtl_i.in_NORMAL0.yyy * _mtl_u.glstate_matrix_invtrans_modelview0[1].xyz));
Temp_int_1_5.xyz = as_type<int3>(((_mtl_u.glstate_matrix_invtrans_modelview0[0].xyz * _mtl_i.in_NORMAL0.xxx) + as_type<float4>(Temp_int_1_5).xyz));
Temp_int_1_5.xyz = as_type<int3>(((_mtl_u.glstate_matrix_invtrans_modelview0[2].xyz * _mtl_i.in_NORMAL0.zzz) + as_type<float4>(Temp_int_1_5).xyz));
Temp_int_0_4.w = as_type<int>(dot (as_type<float4>(Temp_int_1_5).xyz, as_type<float4>(Temp_int_1_5).xyz));
Temp_int_0_4.w = as_type<int>(rsqrt(as_type<float4>(Temp_int_0_4).w));
Temp_int_1_5.xyz = as_type<int3>((as_type<float4>(Temp_int_0_4).www * as_type<float4>(Temp_int_1_5).xyz));
Temp_2_2.xyz = _mtl_u.glstate_lightmodel_ambient.xyz;
Temp_int_0_4.w = 0;
for (; Temp_int_0_4.w < 4; Temp_int_0_4.w = (Temp_int_0_4.w + 1)) {
Temp_3_3.xyz = ((-(
float4(Temp_int_0_4)
as_type<float4>(Temp_int_0_4)
.xyz) * _mtl_u.unity_LightPosition[Temp_int_0_4.w].www) + _mtl_u.unity_LightPosition[Temp_int_0_4.w].xyz);
Temp_int_1_5.w = int(dot (Temp_3_3.xyz, Temp_3_3.xyz));
Temp_2_2.w = rsqrt(float4(Temp_int_1_5).w);
Temp_int_1_5.w = as_type<int>(dot (Temp_3_3.xyz, Temp_3_3.xyz));
Temp_2_2.w = rsqrt(as_type<float4>(Temp_int_1_5).w);
Temp_3_3.xyz = (Temp_2_2.www * Temp_3_3.xyz);
Temp_int_1_5.w = int(((
float4(Temp_int_1_5)
Temp_int_1_5.w = as_type<int>(((
as_type<float4>(Temp_int_1_5)
.w * _mtl_u.unity_LightAtten[Temp_int_0_4.w].z) + 1.0));
Temp_int_1_5.w = int((1.0/(float4(Temp_int_1_5).w)));
Temp_int_1_5.w = as_type<int>((1.0/(as_type<float4>(Temp_int_1_5).w)));
Temp_2_2.w = dot (Temp_3_3.xyz, _mtl_u.unity_SpotDirection[Temp_int_0_4.w].xyz);
Temp_2_2.w = max (Temp_2_2.w, 0.0);
Temp_2_2.w = (Temp_2_2.w - _mtl_u.unity_LightAtten[Temp_int_0_4.w].x);
Temp_2_2.w = (Temp_2_2.w * _mtl_u.unity_LightAtten[Temp_int_0_4.w].y);
Temp_2_2.w = clamp (Temp_2_2.w, 0.0, 1.0);
Temp_int_1_5.w = int((float4(Temp_int_1_5).w * Temp_2_2.w));
Temp_2_2.w = dot (float4(Temp_int_1_5).xyz, Temp_3_3.xyz);
Temp_int_1_5.w = as_type<int>((as_type<float4>(Temp_int_1_5).w * Temp_2_2.w));
Temp_2_2.w = dot (as_type<float4>(Temp_int_1_5).xyz, Temp_3_3.xyz);
Temp_2_2.w = max (Temp_2_2.w, 0.0);
Temp_int_1_5.w = int((float4(Temp_int_1_5).w * Temp_2_2.w));
Temp_2_2.xyz = ((_mtl_u.unity_LightColor[Temp_int_0_4.w].xyz * float4(Temp_int_1_5).www) + Temp_2_2.xyz);
Temp_int_1_5.w = as_type<int>((as_type<float4>(Temp_int_1_5).w * Temp_2_2.w));
Temp_2_2.xyz = ((_mtl_u.unity_LightColor[Temp_int_0_4.w].xyz * as_type<float4>(Temp_int_1_5).www) + Temp_2_2.xyz);
};
_mtl_o.COLOR0.xyz = (Temp_2_2.xyz * _mtl_u._Color.xyz);
_mtl_o.COLOR0.w = (_mtl_u._Color.w * _mtl_u._ReflectColor.w);
Expand Down

0 comments on commit f4731b5

Please sign in to comment.