Commit 70589080 by Nicolas Capens

Remove redundant shader instructions.

Bool to int and int to bool also work for unsigned int. Change-Id: I31669d8754a718096381609d13c2e9668599efe5 Reviewed-on: https://swiftshader-review.googlesource.com/4070Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com> Tested-by: 's avatarNicolas Capens <capn@google.com>
parent 69c5c387
...@@ -1885,7 +1885,7 @@ namespace glsl ...@@ -1885,7 +1885,7 @@ namespace glsl
switch(dst->getBasicType()) switch(dst->getBasicType())
{ {
case EbtInt: return emit(sw::Shader::OPCODE_B2I, dst, src); case EbtInt: return emit(sw::Shader::OPCODE_B2I, dst, src);
case EbtUInt: return emit(sw::Shader::OPCODE_B2U, dst, src); case EbtUInt: return emit(sw::Shader::OPCODE_B2I, dst, src);
case EbtFloat: return emit(sw::Shader::OPCODE_B2F, dst, src); case EbtFloat: return emit(sw::Shader::OPCODE_B2F, dst, src);
default: break; default: break;
} }
...@@ -1901,7 +1901,7 @@ namespace glsl ...@@ -1901,7 +1901,7 @@ namespace glsl
case EbtUInt: case EbtUInt:
switch(dst->getBasicType()) switch(dst->getBasicType())
{ {
case EbtBool: return emit(sw::Shader::OPCODE_U2B, dst, src); case EbtBool: return emit(sw::Shader::OPCODE_I2B, dst, src);
case EbtFloat: return emit(sw::Shader::OPCODE_U2F, dst, src); case EbtFloat: return emit(sw::Shader::OPCODE_U2F, dst, src);
default: break; default: break;
} }
...@@ -1919,6 +1919,8 @@ namespace glsl ...@@ -1919,6 +1919,8 @@ namespace glsl
break; break;
} }
ASSERT(src->getBasicType() == dst->getBasicType());
return emit(sw::Shader::OPCODE_MOV, dst, src); return emit(sw::Shader::OPCODE_MOV, dst, src);
} }
......
...@@ -161,8 +161,6 @@ namespace sw ...@@ -161,8 +161,6 @@ namespace sw
case Shader::OPCODE_U2F: u2f(d, s0); break; case Shader::OPCODE_U2F: u2f(d, s0); break;
case Shader::OPCODE_I2B: i2b(d, s0); break; case Shader::OPCODE_I2B: i2b(d, s0); break;
case Shader::OPCODE_B2I: b2i(d, s0); break; case Shader::OPCODE_B2I: b2i(d, s0); break;
case Shader::OPCODE_U2B: u2b(d, s0); break;
case Shader::OPCODE_B2U: b2u(d, s0); break;
case Shader::OPCODE_ADD: add(d, s0, s1); break; case Shader::OPCODE_ADD: add(d, s0, s1); break;
case Shader::OPCODE_IADD: iadd(d, s0, s1); break; case Shader::OPCODE_IADD: iadd(d, s0, s1); break;
case Shader::OPCODE_SUB: sub(d, s0, s1); break; case Shader::OPCODE_SUB: sub(d, s0, s1); break;
......
...@@ -926,8 +926,6 @@ namespace sw ...@@ -926,8 +926,6 @@ namespace sw
case OPCODE_U2F: return "u2f"; case OPCODE_U2F: return "u2f";
case OPCODE_B2I: return "b2i"; case OPCODE_B2I: return "b2i";
case OPCODE_I2B: return "i2b"; case OPCODE_I2B: return "i2b";
case OPCODE_B2U: return "b2u";
case OPCODE_U2B: return "u2b";
case OPCODE_ALL: return "all"; case OPCODE_ALL: return "all";
case OPCODE_ANY: return "any"; case OPCODE_ANY: return "any";
case OPCODE_NEG: return "neg"; case OPCODE_NEG: return "neg";
......
...@@ -187,8 +187,6 @@ namespace sw ...@@ -187,8 +187,6 @@ namespace sw
OPCODE_U2F, // Uint to float OPCODE_U2F, // Uint to float
OPCODE_I2B, // Int to bool OPCODE_I2B, // Int to bool
OPCODE_B2I, // Bool to int OPCODE_B2I, // Bool to int
OPCODE_U2B, // Uint to bool
OPCODE_B2U, // Bool to uint
OPCODE_DET2, OPCODE_DET2,
OPCODE_DET3, OPCODE_DET3,
OPCODE_DET4, OPCODE_DET4,
......
...@@ -678,22 +678,6 @@ namespace sw ...@@ -678,22 +678,6 @@ namespace sw
dst.w = As<Float4>(As<Int4>(src.w) & Int4(1)); dst.w = As<Float4>(As<Int4>(src.w) & Int4(1));
} }
void ShaderCore::u2b(Vector4f &dst, const Vector4f &src)
{
dst.x = As<Float4>(CmpNEQ(As<UInt4>(src.x), UInt4(0)));
dst.y = As<Float4>(CmpNEQ(As<UInt4>(src.y), UInt4(0)));
dst.z = As<Float4>(CmpNEQ(As<UInt4>(src.z), UInt4(0)));
dst.w = As<Float4>(CmpNEQ(As<UInt4>(src.w), UInt4(0)));
}
void ShaderCore::b2u(Vector4f &dst, const Vector4f &src)
{
dst.x = As<Float4>(As<UInt4>(src.x) & UInt4(1));
dst.y = As<Float4>(As<UInt4>(src.y) & UInt4(1));
dst.z = As<Float4>(As<UInt4>(src.z) & UInt4(1));
dst.w = As<Float4>(As<UInt4>(src.w) & UInt4(1));
}
void ShaderCore::add(Vector4f &dst, const Vector4f &src0, const Vector4f &src1) void ShaderCore::add(Vector4f &dst, const Vector4f &src0, const Vector4f &src1)
{ {
dst.x = src0.x + src1.x; dst.x = src0.x + src1.x;
......
...@@ -259,8 +259,6 @@ namespace sw ...@@ -259,8 +259,6 @@ namespace sw
void u2f(Vector4f &dst, const Vector4f &src); void u2f(Vector4f &dst, const Vector4f &src);
void i2b(Vector4f &dst, const Vector4f &src); void i2b(Vector4f &dst, const Vector4f &src);
void b2i(Vector4f &dst, const Vector4f &src); void b2i(Vector4f &dst, const Vector4f &src);
void u2b(Vector4f &dst, const Vector4f &src);
void b2u(Vector4f &dst, const Vector4f &src);
void add(Vector4f &dst, const Vector4f &src0, const Vector4f &src1); void add(Vector4f &dst, const Vector4f &src0, const Vector4f &src1);
void iadd(Vector4f &dst, const Vector4f &src0, const Vector4f &src1); void iadd(Vector4f &dst, const Vector4f &src0, const Vector4f &src1);
void sub(Vector4f &dst, const Vector4f &src0, const Vector4f &src1); void sub(Vector4f &dst, const Vector4f &src0, const Vector4f &src1);
......
...@@ -208,8 +208,6 @@ namespace sw ...@@ -208,8 +208,6 @@ namespace sw
case Shader::OPCODE_U2F: u2f(d, s0); break; case Shader::OPCODE_U2F: u2f(d, s0); break;
case Shader::OPCODE_I2B: i2b(d, s0); break; case Shader::OPCODE_I2B: i2b(d, s0); break;
case Shader::OPCODE_B2I: b2i(d, s0); break; case Shader::OPCODE_B2I: b2i(d, s0); break;
case Shader::OPCODE_U2B: u2b(d, s0); break;
case Shader::OPCODE_B2U: b2u(d, s0); break;
case Shader::OPCODE_MUL: mul(d, s0, s1); break; case Shader::OPCODE_MUL: mul(d, s0, s1); break;
case Shader::OPCODE_IMUL: imul(d, s0, s1); break; case Shader::OPCODE_IMUL: imul(d, s0, s1); break;
case Shader::OPCODE_NRM2: nrm2(d, s0, pp); break; case Shader::OPCODE_NRM2: nrm2(d, s0, pp); break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment