Stefan Dösinger : wined3d: Don' t use TMP_COLOR unless srgb is enabled.

Alexandre Julliard julliard at winehq.org
Fri May 15 07:47:04 CDT 2009


Module: wine
Branch: master
Commit: 6fe1a5daa5879a516a2fd3e7e6f647c4f45d054f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6fe1a5daa5879a516a2fd3e7e6f647c4f45d054f

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Thu May  7 18:54:20 2009 +0200

wined3d: Don't use TMP_COLOR unless srgb is enabled.

This was needed unconditionally in the past to apply fog, but since we're
using the ARBfp fog defines it is only needed if an sRGB correction is done
at the end of the shader.

---

 dlls/wined3d/arb_program_shader.c |   21 +++++++++++++++++----
 1 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c
index 2814e1b..c9e1ed8 100644
--- a/dlls/wined3d/arb_program_shader.c
+++ b/dlls/wined3d/arb_program_shader.c
@@ -543,7 +543,14 @@ static void shader_arb_get_register_name(IWineD3DBaseShader *iface,
         case WINED3DSPR_COLOROUT:
             if (reg->idx == 0)
             {
-                strcpy(register_name, "TMP_COLOR");
+                if(((IWineD3DPixelShaderImpl *)This)->cur_args->srgb_correction)
+                {
+                    strcpy(register_name, "TMP_COLOR");
+                }
+                else
+                {
+                    strcpy(register_name, "result.color");
+                }
             }
             else
             {
@@ -1930,8 +1937,12 @@ static GLuint shader_arb_generate_pshader(IWineD3DPixelShader *iface,
     {
         fragcolor = "R0";
     } else {
-        shader_addline(buffer, "TEMP TMP_COLOR;\n");
-        fragcolor = "TMP_COLOR";
+        if(args->srgb_correction) {
+            shader_addline(buffer, "TEMP TMP_COLOR;\n");
+            fragcolor = "TMP_COLOR";
+        } else {
+            fragcolor = "result.color";
+        }
     }
 
     /* Base Declarations */
@@ -1942,8 +1953,10 @@ static GLuint shader_arb_generate_pshader(IWineD3DPixelShader *iface,
 
     if(args->srgb_correction) {
         arbfp_add_sRGB_correction(buffer, fragcolor, "TMP", "TMP2", "TA", "TB");
+        shader_addline(buffer, "MOV result.color, %s;\n", fragcolor);
+    } else if(reg_maps->shader_version.major < 2) {
+        shader_addline(buffer, "MOV result.color, %s;\n", fragcolor);
     }
-    shader_addline(buffer, "MOV result.color, %s;\n", fragcolor);
     shader_addline(buffer, "END\n");
 
     /* TODO: change to resource.glObjectHandle or something like that */




More information about the wine-cvs mailing list