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
switch(dst->getBasicType())
{
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);
default: break;
}
......@@ -1901,7 +1901,7 @@ namespace glsl
case EbtUInt:
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);
default: break;
}
......@@ -1919,6 +1919,8 @@ namespace glsl
break;
}
ASSERT(src->getBasicType() == dst->getBasicType());
return emit(sw::Shader::OPCODE_MOV, dst, src);
}
......
......@@ -161,8 +161,6 @@ namespace sw
case Shader::OPCODE_U2F: u2f(d, s0); break;
case Shader::OPCODE_I2B: i2b(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_IADD: iadd(d, s0, s1); break;
case Shader::OPCODE_SUB: sub(d, s0, s1); break;
......
......@@ -926,8 +926,6 @@ namespace sw
case OPCODE_U2F: return "u2f";
case OPCODE_B2I: return "b2i";
case OPCODE_I2B: return "i2b";
case OPCODE_B2U: return "b2u";
case OPCODE_U2B: return "u2b";
case OPCODE_ALL: return "all";
case OPCODE_ANY: return "any";
case OPCODE_NEG: return "neg";
......
......@@ -129,7 +129,7 @@ namespace sw
OPCODE_PS_2_0 = 0xFFFF0200,
OPCODE_PS_2_x = 0xFFFF0201,
OPCODE_PS_3_0 = 0xFFFF0300,
OPCODE_VS_1_0 = 0xFFFE0100,
OPCODE_VS_1_1 = 0xFFFE0101,
OPCODE_VS_2_0 = 0xFFFE0200,
......@@ -187,8 +187,6 @@ namespace sw
OPCODE_U2F, // Uint to float
OPCODE_I2B, // Int to bool
OPCODE_B2I, // Bool to int
OPCODE_U2B, // Uint to bool
OPCODE_B2U, // Bool to uint
OPCODE_DET2,
OPCODE_DET3,
OPCODE_DET4,
......@@ -495,11 +493,11 @@ namespace sw
bool isPredicated() const;
Opcode opcode;
union
{
Control control;
struct
{
unsigned char project : 1;
......
......@@ -678,22 +678,6 @@ namespace sw
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)
{
dst.x = src0.x + src1.x;
......
......@@ -259,8 +259,6 @@ namespace sw
void u2f(Vector4f &dst, const Vector4f &src);
void i2b(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 iadd(Vector4f &dst, const Vector4f &src0, const Vector4f &src1);
void sub(Vector4f &dst, const Vector4f &src0, const Vector4f &src1);
......
......@@ -208,8 +208,6 @@ namespace sw
case Shader::OPCODE_U2F: u2f(d, s0); break;
case Shader::OPCODE_I2B: i2b(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_IMUL: imul(d, s0, s1); 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