[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wine-devel
Subject:    Re: [4/8] wined3d: Fix the texm3x3tex instruction to sample properly
From:       Mirek <thunder.m () czela ! net>
Date:       2006-11-27 21:24:31
Message-ID: 456B578F.9030505 () czela ! net
[Download RAW message or body]

Wow, I am impressed those patches fixed almost all tests in 3DMark 2003, 
test4 (mother nature), vertex shader and Ragtroll without any regression 
in other apps. Perfect work!

Mirek

H. Verbeet napsal(a):
> The current code for texm3x3tex doesn't handle projected textures, and
> actually uses the wrong argument to determine the sampler type. This
> patch fixes the turtle in the 4th game test in 3DMark03.
> 
> Changelog:
> - Fix the texm3x3tex instruction to sample properly
> 
> 
> ------------------------------------------------------------------------
> 
> ---
> 
> dlls/wined3d/arb_program_shader.c |    6 ++++--
> dlls/wined3d/glsl_shader.c        |   23 ++++++-----------------
> 2 files changed, 10 insertions(+), 19 deletions(-)
> 
> diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c
> index 9f2be9b..7c73fd4 100644
> --- a/dlls/wined3d/arb_program_shader.c
> +++ b/dlls/wined3d/arb_program_shader.c
> @@ -781,13 +781,15 @@ void pshader_hw_texm3x3tex(SHADER_OPCODE
> DWORD reg = arg->dst & WINED3DSP_REGNUM_MASK;
> SHADER_BUFFER* buffer = arg->buffer;
> SHADER_PARSE_STATE* current_state = &This->baseShader.parse_state;
> +    char dst_str[8];
> char src0_name[50];
> 
> pshader_gen_input_modifier_line(buffer, arg->src[0], 0, src0_name);
> shader_addline(buffer, "DP3 TMP.z, T%u, %s;\n", reg, src0_name);
> 
> -    /* Cubemap textures will be more used than 3D ones. */
> -    shader_addline(buffer, "TEX T%u, TMP, texture[%u], CUBE;\n", reg, reg);
> +    /* Sample the texture using the calculated coordinates */
> +    sprintf(dst_str, "T%u", reg);
> +    shader_hw_sample(arg, reg, dst_str, "TMP");
> current_state->current_row = 0;
> }
> 
> diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
> index 6be71bb..39ad693 100644
> --- a/dlls/wined3d/glsl_shader.c
> +++ b/dlls/wined3d/glsl_shader.c
> @@ -1560,33 +1560,22 @@ void pshader_glsl_texm3x2tex(SHADER_OPCO
> }
> 
> /** Process the WINED3DSIO_TEXM3X3TEX instruction in GLSL
> - * Perform the 3rd row of a 3x3 matrix multiply, then sample the texture using the \
> calculate coordinates */ + * Perform the 3rd row of a 3x3 matrix multiply, then \
> sample the texture using the calculated coordinates */ void \
>                 pshader_glsl_texm3x3tex(SHADER_OPCODE_ARG* arg) {
> -
> +    char dst_str[8];
> char src0_str[100];
> char src0_name[50];
> char src0_mask[6];
> -    char dimensions[5];
> DWORD reg = arg->dst & WINED3DSP_REGNUM_MASK;
> -    DWORD src0_regnum = arg->src[0] & WINED3DSP_REGNUM_MASK;
> -    DWORD stype = arg->reg_maps->samplers[src0_regnum] & \
> WINED3DSP_TEXTURETYPE_MASK; IWineD3DPixelShaderImpl* This = \
> (IWineD3DPixelShaderImpl*) arg->shader; SHADER_PARSE_STATE* current_state = \
>                 &This->baseShader.parse_state;
> -    
> -    switch (stype) {
> -        case WINED3DSTT_2D:     strcpy(dimensions, "2D");   break;
> -        case WINED3DSTT_CUBE:   strcpy(dimensions, "Cube"); break;
> -        case WINED3DSTT_VOLUME: strcpy(dimensions, "3D");   break;
> -        default:
> -            strcpy(dimensions, "");
> -            FIXME("Unrecognized sampler type: %#x\n", stype);
> -            break;
> -    }
> 
> shader_glsl_add_param(arg, arg->src[0], arg->src_addr[0], TRUE, src0_name, \
> src0_mask, src0_str); shader_addline(arg->buffer, "tmp0.z = dot(vec3(T%u), \
>                 vec3(%s));\n", reg, src0_str);
> -    shader_addline(arg->buffer, "T%u = texture%s(Psampler%u, tmp0.%s);\n", 
> -            reg, dimensions, reg, (stype == WINED3DSTT_2D) ? "xy" : "xyz");
> +
> +    /* Sample the texture using the calculated coordinates */
> +    sprintf(dst_str, "T%u", reg);
> +    shader_glsl_sample(arg, reg, dst_str, "tmp0");
> current_state->current_row = 0;
> }
> 
> 
> 
> ------------------------------------------------------------------------
> 
> 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic