Module: wine Branch: master Commit: a9118ba1715c3a4833d3e45f19a69d418e8417bb URL: http://source.winehq.org/git/wine.git/?a=commit;h=a9118ba1715c3a4833d3e45f19...
Author: Matteo Bruni matteo.mystral@gmail.com Date: Fri May 21 14:56:43 2010 +0200
d3dx9: Use separate opcodes for TEXLDP and TEXLDB.
There is no reason we have to strictly follow D3D bytecode format in our intermediate representation.
---
dlls/d3dx9_36/asmshader.y | 4 ++-- dlls/d3dx9_36/asmutils.c | 8 ++++---- dlls/d3dx9_36/bytecodewriter.c | 4 ++-- dlls/d3dx9_36/d3dx9_36_private.h | 5 ++--- 4 files changed, 10 insertions(+), 11 deletions(-)
diff --git a/dlls/d3dx9_36/asmshader.y b/dlls/d3dx9_36/asmshader.y index 0949ee3..8be8328 100644 --- a/dlls/d3dx9_36/asmshader.y +++ b/dlls/d3dx9_36/asmshader.y @@ -724,12 +724,12 @@ instruction: INSTR_ADD omods dreg ',' sregs | INSTR_TEXLDP omods dreg ',' sregs { TRACE("TEXLDP\n"); - asm_ctx.funcs->instr(&asm_ctx, BWRITERSIO_TEX | ( BWRITERSI_TEXLD_PROJECT << BWRITER_OPCODESPECIFICCONTROL_SHIFT ), $2.mod, $2.shift, 0, &$3, &$5, 2); + asm_ctx.funcs->instr(&asm_ctx, BWRITERSIO_TEXLDP, $2.mod, $2.shift, 0, &$3, &$5, 2); } | INSTR_TEXLDB omods dreg ',' sregs { TRACE("TEXLDB\n"); - asm_ctx.funcs->instr(&asm_ctx, BWRITERSIO_TEX | ( BWRITERSI_TEXLD_BIAS << BWRITER_OPCODESPECIFICCONTROL_SHIFT ), $2.mod, $2.shift, 0, &$3, &$5, 2); + asm_ctx.funcs->instr(&asm_ctx, BWRITERSIO_TEXLDB, $2.mod, $2.shift, 0, &$3, &$5, 2); } | INSTR_DSX omods dreg ',' sregs { diff --git a/dlls/d3dx9_36/asmutils.c b/dlls/d3dx9_36/asmutils.c index e000a5f..bd6bcea 100644 --- a/dlls/d3dx9_36/asmutils.c +++ b/dlls/d3dx9_36/asmutils.c @@ -209,8 +209,8 @@ DWORD d3d9_opcode(DWORD bwriter_opcode) { case BWRITERSIO_COMMENT: return D3DSIO_COMMENT; case BWRITERSIO_END: return D3DSIO_END;
- case BWRITERSIO_TEX | ( BWRITERSI_TEXLD_PROJECT << BWRITER_OPCODESPECIFICCONTROL_SHIFT ): return D3DSIO_TEX | D3DSI_TEXLD_PROJECT; - case BWRITERSIO_TEX | ( BWRITERSI_TEXLD_BIAS << BWRITER_OPCODESPECIFICCONTROL_SHIFT ): return D3DSIO_TEX | D3DSI_TEXLD_BIAS; + case BWRITERSIO_TEXLDP: return D3DSIO_TEX | D3DSI_TEXLD_PROJECT; + case BWRITERSIO_TEXLDB: return D3DSIO_TEX | D3DSI_TEXLD_BIAS;
default: FIXME("Unhandled BWRITERSIO token %u\n", bwriter_opcode); @@ -484,8 +484,8 @@ const char *debug_print_opcode(DWORD opcode) { case BWRITERSIO_TEXLDL: return "texldl"; case BWRITERSIO_BREAKP: return "breakp";
- case BWRITERSIO_TEX | ( BWRITERSI_TEXLD_PROJECT << BWRITER_OPCODESPECIFICCONTROL_SHIFT ): return "texldp"; - case BWRITERSIO_TEX | ( BWRITERSI_TEXLD_BIAS << BWRITER_OPCODESPECIFICCONTROL_SHIFT ): return "texldb"; + case BWRITERSIO_TEXLDP: return "texldp"; + case BWRITERSIO_TEXLDB: return "texldb";
default: return "unknown"; } diff --git a/dlls/d3dx9_36/bytecodewriter.c b/dlls/d3dx9_36/bytecodewriter.c index 464ec52..a579ae8 100644 --- a/dlls/d3dx9_36/bytecodewriter.c +++ b/dlls/d3dx9_36/bytecodewriter.c @@ -693,8 +693,8 @@ static const struct instr_handler_table ps_3_handlers[] = { {BWRITERSIO_TEXLDL, instr_handler},
{BWRITERSIO_TEX, instr_handler}, - {BWRITERSIO_TEX | ( BWRITERSI_TEXLD_PROJECT << BWRITER_OPCODESPECIFICCONTROL_SHIFT ), instr_handler}, - {BWRITERSIO_TEX | ( BWRITERSI_TEXLD_BIAS << BWRITER_OPCODESPECIFICCONTROL_SHIFT ), instr_handler}, + {BWRITERSIO_TEXLDP, instr_handler}, + {BWRITERSIO_TEXLDB, instr_handler}, {BWRITERSIO_TEXKILL, instr_handler}, {BWRITERSIO_DSX, instr_handler}, {BWRITERSIO_DSY, instr_handler}, diff --git a/dlls/d3dx9_36/d3dx9_36_private.h b/dlls/d3dx9_36/d3dx9_36_private.h index 923a0df..248503d 100644 --- a/dlls/d3dx9_36/d3dx9_36_private.h +++ b/dlls/d3dx9_36/d3dx9_36_private.h @@ -462,6 +462,8 @@ typedef enum _BWRITERSHADER_INSTRUCTION_OPCODE_TYPE { BWRITERSIO_SETP, BWRITERSIO_TEXLDL, BWRITERSIO_BREAKP, + BWRITERSIO_TEXLDP, + BWRITERSIO_TEXLDB,
BWRITERSIO_COMMENT, BWRITERSIO_END, @@ -589,9 +591,6 @@ typedef enum _BWRITERDECLUSAGE { BWRITERDECLUSAGE_SAMPLE } BWRITERDECLUSAGE;
-#define BWRITER_OPCODESPECIFICCONTROL_SHIFT 16 -#define BWRITER_OPCODESPECIFICCONTROL_MASK (0xff << BWRITER_OPCODESPECIFICCONTROL_SHIFT) - struct bwriter_shader *SlAssembleShader(const char *text, char **messages); DWORD SlWriteBytecode(const struct bwriter_shader *shader, int dxversion, DWORD **result); void SlDeleteShader(struct bwriter_shader *shader);