[3/3] d3dx9: Accept texture coordinate registers in dcl instruction.
Matteo Bruni
matteo.mystral at gmail.com
Wed Jun 9 08:59:03 CDT 2010
-------------- next part --------------
From ad3ed7eddf75c2e451af27b7ae6515cabde0fa53 Mon Sep 17 00:00:00 2001
From: Matteo Bruni <matteo.mystral at gmail.com>
Date: Tue, 8 Jun 2010 00:53:23 +0200
Subject: d3dx9: Accept texture coordinate registers in dcl instruction.
---
dlls/d3dx9_36/asmshader.y | 36 +++++++++++++++++++++++-------------
dlls/d3dx9_36/tests/asm.c | 11 +++++++++++
2 files changed, 34 insertions(+), 13 deletions(-)
diff --git a/dlls/d3dx9_36/asmshader.y b/dlls/d3dx9_36/asmshader.y
index fa6d00c..0c335b4 100644
--- a/dlls/d3dx9_36/asmshader.y
+++ b/dlls/d3dx9_36/asmshader.y
@@ -255,6 +255,7 @@ void set_rel_reg(struct shader_reg *reg, struct rel_reg *rel) {
%type <modshift> omodifier
%type <comptype> comp
%type <declaration> dclusage
+%type <reg> dcl_inputreg
%type <samplertype> sampdcl
%type <rel_reg> rel_reg
%type <reg> predicate
@@ -539,7 +540,7 @@ instruction: INSTR_ADD omods dreg ',' sregs
reg.writemask = $4;
asm_ctx.funcs->dcl_output(&asm_ctx, $2.dclusage, $2.regnum, ®);
}
- | INSTR_DCL dclusage omods REG_INPUT
+ | INSTR_DCL dclusage omods dcl_inputreg
{
struct shader_reg reg;
TRACE("Input reg declaration\n");
@@ -549,14 +550,14 @@ instruction: INSTR_ADD omods dreg ',' sregs
set_parse_status(&asm_ctx, PARSE_ERR);
}
ZeroMemory(®, sizeof(reg));
- reg.type = BWRITERSPR_INPUT;
- reg.regnum = $4;
+ reg.type = $4.type;
+ reg.regnum = $4.regnum;
reg.rel_reg = NULL;
reg.srcmod = 0;
reg.writemask = BWRITERSP_WRITEMASK_ALL;
asm_ctx.funcs->dcl_input(&asm_ctx, $2.dclusage, $2.regnum, $3.mod, ®);
}
- | INSTR_DCL dclusage omods REG_INPUT writemask
+ | INSTR_DCL dclusage omods dcl_inputreg writemask
{
struct shader_reg reg;
TRACE("Input reg declaration\n");
@@ -566,14 +567,14 @@ instruction: INSTR_ADD omods dreg ',' sregs
set_parse_status(&asm_ctx, PARSE_ERR);
}
ZeroMemory(®, sizeof(reg));
- reg.type = BWRITERSPR_INPUT;
- reg.regnum = $4;
+ reg.type = $4.type;
+ reg.regnum = $4.regnum;
reg.rel_reg = NULL;
reg.srcmod = 0;
reg.writemask = $5;
asm_ctx.funcs->dcl_input(&asm_ctx, $2.dclusage, $2.regnum, $3.mod, ®);
}
- | INSTR_DCL omods REG_INPUT
+ | INSTR_DCL omods dcl_inputreg
{
struct shader_reg reg;
TRACE("Input reg declaration\n");
@@ -583,14 +584,14 @@ instruction: INSTR_ADD omods dreg ',' sregs
set_parse_status(&asm_ctx, PARSE_ERR);
}
ZeroMemory(®, sizeof(reg));
- reg.type = BWRITERSPR_INPUT;
- reg.regnum = $3;
+ reg.type = $3.type;
+ reg.regnum = $3.regnum;
reg.rel_reg = NULL;
reg.srcmod = 0;
reg.writemask = BWRITERSP_WRITEMASK_ALL;
asm_ctx.funcs->dcl_input(&asm_ctx, 0, 0, $2.mod, ®);
}
- | INSTR_DCL omods REG_INPUT writemask
+ | INSTR_DCL omods dcl_inputreg writemask
{
struct shader_reg reg;
TRACE("Input reg declaration\n");
@@ -600,8 +601,8 @@ instruction: INSTR_ADD omods dreg ',' sregs
set_parse_status(&asm_ctx, PARSE_ERR);
}
ZeroMemory(®, sizeof(reg));
- reg.type = BWRITERSPR_INPUT;
- reg.regnum = $3;
+ reg.type = $3.type;
+ reg.regnum = $3.regnum;
reg.rel_reg = NULL;
reg.srcmod = 0;
reg.writemask = $4;
@@ -617,7 +618,7 @@ instruction: INSTR_ADD omods dreg ',' sregs
}
asm_ctx.funcs->dcl_sampler(&asm_ctx, $2, $3.mod, $4, asm_ctx.line_no);
}
- | INSTR_DCL sampdcl omods REG_INPUT
+ | INSTR_DCL sampdcl omods dcl_inputreg
{
TRACE("Error rule: sampler decl of input reg\n");
asmparser_message(&asm_ctx, "Line %u: Sampler declarations of input regs is not valid\n",
@@ -1342,6 +1343,15 @@ dclusage: USAGE_POSITION
$$.dclusage = BWRITERDECLUSAGE_SAMPLE;
}
+dcl_inputreg: REG_INPUT
+ {
+ $$.regnum = $1; $$.type = BWRITERSPR_INPUT;
+ }
+ | REG_TEXTURE
+ {
+ $$.regnum = $1; $$.type = BWRITERSPR_TEXTURE;
+ }
+
sampdcl: SAMPTYPE_1D
{
$$ = BWRITERSTT_1D;
diff --git a/dlls/d3dx9_36/tests/asm.c b/dlls/d3dx9_36/tests/asm.c
index 5ed286e..dda0e2b 100644
--- a/dlls/d3dx9_36/tests/asm.c
+++ b/dlls/d3dx9_36/tests/asm.c
@@ -891,6 +891,17 @@ static void ps_2_0_test(void) {
"dcl v0\n",
{0xffff0200, 0x0200001f, 0x80000000, 0x900f0000, 0x0000ffff}
},
+ { /* shader 12 */
+ "ps_2_0\n"
+ "dcl t0.xyz\n"
+ "dcl t1\n",
+ {0xffff0200, 0x0200001f, 0x80000000, 0xb0070000, 0x0200001f, 0x80000000, 0xb00f0001, 0x0000ffff}
+ },
+ { /* shader 13 */
+ "ps_2_0\n"
+ "dcl_pp t0\n",
+ {0xffff0200, 0x0200001f, 0x80000000, 0xb02f0000, 0x0000ffff}
+ },
};
exec_tests("ps_2_0", tests, sizeof(tests) / sizeof(tests[0]));
--
1.6.4.4
More information about the wine-patches
mailing list