glsl: add support for CMP instruction
authorBrian Paul <brianp@vmware.com>
Wed, 30 Sep 2009 00:51:49 +0000 (18:51 -0600)
committerBrian Paul <brianp@vmware.com>
Wed, 30 Sep 2009 00:51:49 +0000 (18:51 -0600)
src/mesa/shader/slang/slang_codegen.c
src/mesa/shader/slang/slang_emit.c
src/mesa/shader/slang/slang_ir.c
src/mesa/shader/slang/slang_ir.h

index 703af9f874067a730222e7435992b1cfd7a7ddb2..344dfdc6804d70a79a038a31bbf0e015f0c22719 100644 (file)
@@ -422,6 +422,7 @@ static slang_asm_info AsmInfo[] = {
    { "vec4_lrp", IR_LRP, 1, 3 },
    { "vec4_min", IR_MIN, 1, 2 },
    { "vec4_max", IR_MAX, 1, 2 },
+   { "vec4_cmp", IR_CMP, 1, 3 },
    { "vec4_clamp", IR_CLAMP, 1, 3 },
    { "vec4_seq", IR_SEQUAL, 1, 2 },
    { "vec4_sne", IR_SNEQUAL, 1, 2 },
index 3f455e0640b6f377d8c26a0db5e593177304c9fe..3af301eacdf1e448aa8e3eb78d78de0c941b1161 100644 (file)
@@ -2287,6 +2287,7 @@ emit(slang_emit_info *emitInfo, slang_ir_node *n)
    case IR_POW:
    /* trinary operators */
    case IR_LRP:
+   case IR_CMP:
       return emit_arith(emitInfo, n);
 
    case IR_EQUAL:
index 1c7f7474e715cf7d773371e3776021f0d5e80b77..62603503dd9ad32d4a278dc4d3d83210e970d7ed 100644 (file)
@@ -80,6 +80,7 @@ static const slang_ir_info IrInfo[] = {
    { IR_NOISE4, "IR_NOISE4", OPCODE_NOISE4, 1, 1 },
 
    /* other */
+   { IR_CMP, "IR_CMP", OPCODE_CMP, 4, 3 },  /* compare/select */
    { IR_SEQ, "IR_SEQ", OPCODE_NOP, 0, 0 },
    { IR_SCOPE, "IR_SCOPE", OPCODE_NOP, 0, 0 },
    { IR_LABEL, "IR_LABEL", OPCODE_NOP, 0, 0 },
index e796693ed58a67fcd2769c3b3b1c49a466cb24db..166b4e804364240e46e87e32a91289dbcc4b5fd2 100644 (file)
@@ -91,6 +91,7 @@ typedef enum
    IR_CLAMP,
    IR_MIN,
    IR_MAX,
+   IR_CMP,     /* = (op0 < 0) ? op1 : op2 */
    IR_SEQUAL,  /* Set if args are equal (vector) */
    IR_SNEQUAL, /* Set if args are not equal (vector) */
    IR_SGE,     /* Set if greater or equal (vector) */