Commit 8d78cf77 by Alexis Hetu Committed by Alexis Hétu

Handling new opcodes in PixelProgram and VertexProgram

The new opcodes related to true int and uint support in glsl shader are now handled properly in PixelProgram and VertexProgram. Change-Id: I62565844f24708b4bd89dd99bbf971b55495c5da Reviewed-on: https://swiftshader-review.googlesource.com/3932Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent 79c7e273
......@@ -146,12 +146,26 @@ namespace sw
case Shader::OPCODE_DCL: break;
case Shader::OPCODE_NOP: break;
case Shader::OPCODE_MOV: mov(d, s0); break;
case Shader::OPCODE_NEG: neg(d, s0); break;
case Shader::OPCODE_INEG: ineg(d, s0); break;
case Shader::OPCODE_F2B: f2b(d, s0); break;
case Shader::OPCODE_B2F: b2f(d, s0); break;
case Shader::OPCODE_F2I: f2i(d, s0); break;
case Shader::OPCODE_I2F: i2f(d, s0); break;
case Shader::OPCODE_F2U: f2u(d, s0); break;
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;
case Shader::OPCODE_ISUB: isub(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_MAD: mad(d, s0, s1, s2); break;
case Shader::OPCODE_IMAD: imad(d, s0, s1, s2); break;
case Shader::OPCODE_DP1: dp1(d, s0, s1); break;
case Shader::OPCODE_DP2: dp2(d, s0, s1); break;
case Shader::OPCODE_DP2ADD: dp2add(d, s0, s1, s2); break;
......@@ -159,6 +173,7 @@ namespace sw
case Shader::OPCODE_DP4: dp4(d, s0, s1); break;
case Shader::OPCODE_CMP0: cmp0(d, s0, s1, s2); break;
case Shader::OPCODE_ICMP: icmp(d, s0, s1, control); break;
case Shader::OPCODE_UCMP: ucmp(d, s0, s1, control); break;
case Shader::OPCODE_SELECT: select(d, s0, s1, s2); break;
case Shader::OPCODE_EXTRACT: extract(d.x, s0, s1.x); break;
case Shader::OPCODE_INSERT: insert(d, s0, s1.x, s2.x); break;
......@@ -176,7 +191,14 @@ namespace sw
case Shader::OPCODE_LOG: log(d, s0, pp); break;
case Shader::OPCODE_RCPX: rcpx(d, s0, pp); break;
case Shader::OPCODE_DIV: div(d, s0, s1); break;
case Shader::OPCODE_IDIV: idiv(d, s0, s1); break;
case Shader::OPCODE_UDIV: udiv(d, s0, s1); break;
case Shader::OPCODE_MOD: mod(d, s0, s1); break;
case Shader::OPCODE_IMOD: imod(d, s0, s1); break;
case Shader::OPCODE_UMOD: umod(d, s0, s1); break;
case Shader::OPCODE_SHL: shl(d, s0, s1); break;
case Shader::OPCODE_ISHR: ishr(d, s0, s1); break;
case Shader::OPCODE_USHR: ushr(d, s0, s1); break;
case Shader::OPCODE_RSQX: rsqx(d, s0, pp); break;
case Shader::OPCODE_SQRT: sqrt(d, s0, pp); break;
case Shader::OPCODE_RSQ: rsq(d, s0, pp); break;
......@@ -188,10 +210,18 @@ namespace sw
case Shader::OPCODE_DIST3: dist3(d.x, s0, s1, pp); break;
case Shader::OPCODE_DIST4: dist4(d.x, s0, s1, pp); break;
case Shader::OPCODE_MIN: min(d, s0, s1); break;
case Shader::OPCODE_IMIN: imin(d, s0, s1); break;
case Shader::OPCODE_UMIN: umin(d, s0, s1); break;
case Shader::OPCODE_MAX: max(d, s0, s1); break;
case Shader::OPCODE_IMAX: imax(d, s0, s1); break;
case Shader::OPCODE_UMAX: umax(d, s0, s1); break;
case Shader::OPCODE_LRP: lrp(d, s0, s1, s2); break;
case Shader::OPCODE_STEP: step(d, s0, s1); break;
case Shader::OPCODE_SMOOTH: smooth(d, s0, s1, s2); break;
case Shader::OPCODE_FLOATBITSTOINT:
case Shader::OPCODE_FLOATBITSTOUINT:
case Shader::OPCODE_INTBITSTOFLOAT:
case Shader::OPCODE_UINTBITSTOFLOAT: d = s0; break;
case Shader::OPCODE_POWX: powx(d, s0, s1, pp); break;
case Shader::OPCODE_POW: pow(d, s0, s1, pp); break;
case Shader::OPCODE_SGN: sgn(d, s0); break;
......@@ -266,6 +296,8 @@ namespace sw
case Shader::OPCODE_OR: or(d, s0, s1); break;
case Shader::OPCODE_XOR: xor(d, s0, s1); break;
case Shader::OPCODE_AND: and(d, s0, s1); break;
case Shader::OPCODE_EQ: equal(d, s0, s1); break;
case Shader::OPCODE_NE: notEqual(d, s0, s1); break;
case Shader::OPCODE_END: break;
default:
ASSERT(false);
......
......@@ -739,6 +739,7 @@ namespace sw
case OPCODE_SUB: return "sub";
case OPCODE_ISUB: return "isub";
case OPCODE_MAD: return "mad";
case OPCODE_IMAD: return "imad";
case OPCODE_MUL: return "mul";
case OPCODE_IMUL: return "imul";
case OPCODE_RCPX: return "rcpx";
......@@ -913,6 +914,10 @@ namespace sw
case OPCODE_I2F: return "i2f";
case OPCODE_F2U: return "f2u";
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";
......@@ -923,6 +928,8 @@ namespace sw
case OPCODE_OR: return "or";
case OPCODE_XOR: return "xor";
case OPCODE_AND: return "and";
case OPCODE_EQ: return "eq";
case OPCODE_NE: return "neq";
case OPCODE_FORWARD1: return "forward1";
case OPCODE_FORWARD2: return "forward2";
case OPCODE_FORWARD3: return "forward3";
......
......@@ -184,6 +184,10 @@ namespace sw
OPCODE_I2F, // Int to float
OPCODE_F2U, // Float to uint
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_ALL,
OPCODE_ANY,
OPCODE_NEG,
......@@ -191,6 +195,8 @@ namespace sw
OPCODE_OR,
OPCODE_XOR,
OPCODE_AND,
OPCODE_EQ,
OPCODE_NE,
OPCODE_STEP,
OPCODE_SMOOTH,
OPCODE_ISNAN,
......@@ -234,6 +240,7 @@ namespace sw
OPCODE_ISUB,
OPCODE_IMUL,
OPCODE_IDIV,
OPCODE_IMAD,
OPCODE_IMOD,
OPCODE_SHL,
OPCODE_ISHR,
......
......@@ -133,6 +133,7 @@ namespace sw
case Shader::OPCODE_NOP: break;
case Shader::OPCODE_ABS: abs(d, s0); break;
case Shader::OPCODE_ADD: add(d, s0, s1); break;
case Shader::OPCODE_IADD: iadd(d, s0, s1); break;
case Shader::OPCODE_CRS: crs(d, s0, s1); break;
case Shader::OPCODE_FORWARD1: forward1(d, s0, s1, s2); break;
case Shader::OPCODE_FORWARD2: forward2(d, s0, s1, s2); break;
......@@ -169,19 +170,39 @@ namespace sw
case Shader::OPCODE_LRP: lrp(d, s0, s1, s2); break;
case Shader::OPCODE_STEP: step(d, s0, s1); break;
case Shader::OPCODE_SMOOTH: smooth(d, s0, s1, s2); break;
case Shader::OPCODE_FLOATBITSTOINT:
case Shader::OPCODE_FLOATBITSTOUINT:
case Shader::OPCODE_INTBITSTOFLOAT:
case Shader::OPCODE_UINTBITSTOFLOAT: d = s0; break;
case Shader::OPCODE_M3X2: M3X2(r, d, s0, src1); break;
case Shader::OPCODE_M3X3: M3X3(r, d, s0, src1); break;
case Shader::OPCODE_M3X4: M3X4(r, d, s0, src1); break;
case Shader::OPCODE_M4X3: M4X3(r, d, s0, src1); break;
case Shader::OPCODE_M4X4: M4X4(r, d, s0, src1); break;
case Shader::OPCODE_MAD: mad(d, s0, s1, s2); break;
case Shader::OPCODE_IMAD: imad(d, s0, s1, s2); break;
case Shader::OPCODE_MAX: max(d, s0, s1); break;
case Shader::OPCODE_IMAX: imax(d, s0, s1); break;
case Shader::OPCODE_UMAX: umax(d, s0, s1); break;
case Shader::OPCODE_MIN: min(d, s0, s1); break;
case Shader::OPCODE_IMIN: imin(d, s0, s1); break;
case Shader::OPCODE_UMIN: umin(d, s0, s1); break;
case Shader::OPCODE_MOV: mov(d, s0, integer); break;
case Shader::OPCODE_MOVA: mov(d, s0); break;
case Shader::OPCODE_NEG: neg(d, s0); break;
case Shader::OPCODE_INEG: ineg(d, s0); break;
case Shader::OPCODE_F2B: f2b(d, s0); break;
case Shader::OPCODE_B2F: b2f(d, s0); break;
case Shader::OPCODE_F2I: f2i(d, s0); break;
case Shader::OPCODE_I2F: i2f(d, s0); break;
case Shader::OPCODE_F2U: f2u(d, s0); break;
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;
case Shader::OPCODE_NRM3: nrm3(d, s0, pp); break;
case Shader::OPCODE_NRM4: nrm4(d, s0, pp); break;
......@@ -189,7 +210,14 @@ namespace sw
case Shader::OPCODE_POW: pow(d, s0, s1, pp); break;
case Shader::OPCODE_RCPX: rcpx(d, s0, pp); break;
case Shader::OPCODE_DIV: div(d, s0, s1); break;
case Shader::OPCODE_IDIV: idiv(d, s0, s1); break;
case Shader::OPCODE_UDIV: udiv(d, s0, s1); break;
case Shader::OPCODE_MOD: mod(d, s0, s1); break;
case Shader::OPCODE_IMOD: imod(d, s0, s1); break;
case Shader::OPCODE_UMOD: umod(d, s0, s1); break;
case Shader::OPCODE_SHL: shl(d, s0, s1); break;
case Shader::OPCODE_ISHR: ishr(d, s0, s1); break;
case Shader::OPCODE_USHR: ushr(d, s0, s1); break;
case Shader::OPCODE_RSQX: rsqx(d, s0, pp); break;
case Shader::OPCODE_SQRT: sqrt(d, s0, pp); break;
case Shader::OPCODE_RSQ: rsq(d, s0, pp); break;
......@@ -218,6 +246,7 @@ namespace sw
case Shader::OPCODE_ATANH: atanh(d, s0, pp); break;
case Shader::OPCODE_SLT: slt(d, s0, s1); break;
case Shader::OPCODE_SUB: sub(d, s0, s1); break;
case Shader::OPCODE_ISUB: isub(d, s0, s1); break;
case Shader::OPCODE_BREAK: BREAK(r); break;
case Shader::OPCODE_BREAKC: BREAKC(r, s0, s1, control); break;
case Shader::OPCODE_BREAKP: BREAKP(r, src0); break;
......@@ -240,15 +269,18 @@ namespace sw
case Shader::OPCODE_LEAVE: LEAVE(r); break;
case Shader::OPCODE_CMP: cmp(d, s0, s1, control); break;
case Shader::OPCODE_ICMP: icmp(d, s0, s1, control); break;
case Shader::OPCODE_UCMP: ucmp(d, s0, s1, control); break;
case Shader::OPCODE_SELECT: select(d, s0, s1, s2); break;
case Shader::OPCODE_EXTRACT: extract(d.x, s0, s1.x); break;
case Shader::OPCODE_INSERT: insert(d, s0, s1.x, s2.x); break;
case Shader::OPCODE_ALL: all(d.x, s0); break;
case Shader::OPCODE_ANY: any(d.x, s0); break;
case Shader::OPCODE_NOT: not(d, s0); break;
case Shader::OPCODE_OR: or(d, s0, s1); break;
case Shader::OPCODE_XOR: xor(d, s0, s1); break;
case Shader::OPCODE_AND: and(d, s0, s1); break;
case Shader::OPCODE_OR: or(d, s0, s1); break;
case Shader::OPCODE_XOR: xor(d, s0, s1); break;
case Shader::OPCODE_AND: and(d, s0, s1); break;
case Shader::OPCODE_EQ: equal(d, s0, s1); break;
case Shader::OPCODE_NE: notEqual(d, s0, s1); break;
case Shader::OPCODE_TEXLDL: TEXLDL(r, d, s0, src1); break;
case Shader::OPCODE_TEX: TEX(r, d, s0, src1); break;
case Shader::OPCODE_END: 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