From fa99a490b15140af09bc66034377a9ed55073193 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Mon, 30 May 2011 23:39:12 -0400 Subject: [PATCH] Added DIV preshader opcode. After poking around with a hex editor and fxc.exe /dumpbin, I _think_ this is everything from the 0x1000, 0x2000, and 0xA000 blocks. There might be some 0x3000 or 0x5000 opcodes out there still. --- mojoshader.c | 2 ++ mojoshader.h | 2 ++ utils/testparse.c | 4 ++-- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/mojoshader.c b/mojoshader.c index bab919eb..39a3bab2 100644 --- a/mojoshader.c +++ b/mojoshader.c @@ -7279,6 +7279,7 @@ static void parse_preshader(Context *ctx, uint32 tokcount) case 0x2040: opcode = MOJOSHADER_PRESHADEROP_ADD; break; case 0x2050: opcode = MOJOSHADER_PRESHADEROP_MUL; break; case 0x2060: opcode = MOJOSHADER_PRESHADEROP_ATAN2; break; + case 0x2080: opcode = MOJOSHADER_PRESHADEROP_DIV; break; case 0x3000: opcode = MOJOSHADER_PRESHADEROP_CMP; break; case 0x5000: opcode = MOJOSHADER_PRESHADEROP_DOT; break; case 0xA000: opcode = MOJOSHADER_PRESHADEROP_MIN_SCALAR; break; @@ -7288,6 +7289,7 @@ static void parse_preshader(Context *ctx, uint32 tokcount) case 0xA040: opcode = MOJOSHADER_PRESHADEROP_ADD_SCALAR; break; case 0xA050: opcode = MOJOSHADER_PRESHADEROP_MUL_SCALAR; break; case 0xA060: opcode = MOJOSHADER_PRESHADEROP_ATAN2_SCALAR; break; + case 0xA080: opcode = MOJOSHADER_PRESHADEROP_DIV_SCALAR; break; case 0xD000: opcode = MOJOSHADER_PRESHADEROP_DOT_SCALAR; break; default: fail(ctx, "Unknown preshader opcode."); break; } // switch diff --git a/mojoshader.h b/mojoshader.h index 72ac4151..7a56ddc3 100644 --- a/mojoshader.h +++ b/mojoshader.h @@ -377,6 +377,7 @@ typedef enum MOJOSHADER_preshaderOpcode MOJOSHADER_PRESHADEROP_ADD, MOJOSHADER_PRESHADEROP_MUL, MOJOSHADER_PRESHADEROP_ATAN2, + MOJOSHADER_PRESHADEROP_DIV, MOJOSHADER_PRESHADEROP_CMP, MOJOSHADER_PRESHADEROP_DOT, MOJOSHADER_PRESHADEROP_SCALAR_OPS, @@ -387,6 +388,7 @@ typedef enum MOJOSHADER_preshaderOpcode MOJOSHADER_PRESHADEROP_ADD_SCALAR, MOJOSHADER_PRESHADEROP_MUL_SCALAR, MOJOSHADER_PRESHADEROP_ATAN2_SCALAR, + MOJOSHADER_PRESHADEROP_DIV_SCALAR, MOJOSHADER_PRESHADEROP_DOT_SCALAR, } MOJOSHADER_preshaderOpcode; diff --git a/utils/testparse.c b/utils/testparse.c index 5bff3afc..527d1449 100644 --- a/utils/testparse.c +++ b/utils/testparse.c @@ -116,8 +116,8 @@ static void print_preshader(const MOJOSHADER_preshader *preshader, static const char *opcodestr[] = { "nop", "mov", "neg", "rcp", "frc", "exp", "log", "rsq", "sin", "cos", "asin", "acos", "atan", "min", "max", "cmplt", "cmpge", "add", "mul", - "atan2", "cmp", "dot", "min", "max", "cmplt", "cmpge", "add", "mul", - "atan2", "dot" + "atan2", "div", "cmp", "dot", "min", "max", "cmplt", "cmpge", "add", + "mul", "atan2", "div", "dot" }; static char mask[] = { 'x', 'y', 'z', 'w' };