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