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