WineD3D: Handle WINED3DSPSM_DZ and WINED3DSPSM_DW in texcrd in arb
shaders
Stefan Dösinger
stefan at codeweavers.com
Sat Mar 24 06:55:29 CDT 2007
-------------- next part --------------
From b1df18be85d1ca6a9904be05420f975f6933b030 Mon Sep 17 00:00:00 2001
From: Stefan Doesinger <stefan at codeweavers.com>
Date: Fri, 23 Mar 2007 19:03:58 +0100
Subject: [PATCH] WineD3D: Handle WINED3DSPSM_DZ and WINED3DSPSM_DW in texcrd in arb shaders
---
dlls/wined3d/arb_program_shader.c | 9 ++++++++-
1 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c
index 2185455..1e7f826 100644
--- a/dlls/wined3d/arb_program_shader.c
+++ b/dlls/wined3d/arb_program_shader.c
@@ -675,7 +675,14 @@ void pshader_hw_texcoord(SHADER_OPCODE_ARG* arg) {
} else {
DWORD reg1 = dst & WINED3DSP_REGNUM_MASK;
DWORD reg2 = src[0] & WINED3DSP_REGNUM_MASK;
- shader_addline(buffer, "MOV R%u%s, fragment.texcoord[%u];\n", reg1, tmp, reg2);
+ DWORD src_mod = arg->src[0] & WINED3DSP_SRCMOD_MASK;
+
+ if (src_mod == WINED3DSPSM_DZ || src_mod == WINED3DSPSM_DW) {
+ shader_addline(buffer, "RCP TMP, fragment.texcoord[%u].%s;\n", reg2, src_mod == WINED3DSPSM_DZ ? "z" : "w");
+ shader_addline(buffer, "MUL R%u%s, fragment.texcoord[%u], TMP;\n", reg1, tmp, reg2);
+ } else {
+ shader_addline(buffer, "MOV R%u%s, fragment.texcoord[%u];\n", reg1, tmp, reg2);
+ }
}
}
--
1.4.4.3
More information about the wine-patches
mailing list