Patching Help for Wine 1.7.37 source

Open forum for end-user questions about Wine. Before asking questions, check out the Wiki as a first step.
Forum Rules
Locked
danko_b
Newbie
Newbie
Posts: 3
Joined: Mon Mar 02, 2015 10:14 pm

Patching Help for Wine 1.7.37 source

Post by danko_b »

I'm wondering if I might be able to get some advice and perhaps learn a bit about augmenting older patches for the newer versions of Wine. Most specifically in this case I'm referring to the older ATI Speedhack patch that proved very beneficial for AMD GPUs. I've tested games with patched 1.5.xx compared to vanilla Wine 1.7.37 and there are noticeable differences.

If anyone on here knows what changes would need to be made to update this patch to the latest Wine build, I'd like to ask for your advice to get an updated ATI Speedhacked Wine. I think it should be relatively easy seeing as how 60% of patch works...could anyone help me out? A couple months ago I found myself a great deal on a mbp i7 with a Radeon 6750. I'd like to take full advantage of the newest Wine seeing as how it's come leaps and bounds since Wine 1.5.xx

Here's a lot of information explaining all the parts that need augmenting

Code: Select all

Last login: Tue Mar  3 21:48:49 on ttys000
Matts-MacBook-Pro:~ DankHD$ cd desktop
Matts-MacBook-Pro:desktop DankHD$ patch -p1 </Users/DankHD/Desktop/ATiShaderPatch.diff
can't find file to patch at input line 5
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
|index 48a6ef4..05c68e1 100644
|--- a/dlls/wined3d/directx.c
|+++ b/dlls/wined3d/directx.c
--------------------------
File to patch: wine/dlls/wined3d/directx.c
patching file wine/dlls/wined3d/directx.c
Hunk #1 succeeded at 1013 with fuzz 1 (offset 245 lines).
Hunk #2 succeeded at 2799 (offset 418 lines).
Hunk #3 succeeded at 2827 (offset 418 lines).
Hunk #4 succeeded at 2854 (offset 418 lines).
Hunk #5 FAILED at 2897.
1 out of 5 hunks FAILED -- saving rejects to file wine/dlls/wined3d/directx.c.rej
can't find file to patch at input line 194
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff --git a/dlls/wined3d/wined3d_main.c b/dlls/wined3d/wined3d_main.c
|index 2247e9c..9435ee4 100644
|--- a/dlls/wined3d/wined3d_main.c
|+++ b/dlls/wined3d/wined3d_main.c
--------------------------
File to patch: wine/dlls/wined3d/wined3d_main.c
patching file wine/dlls/wined3d/wined3d_main.c
Hunk #1 FAILED at 84.
Hunk #2 succeeded at 221 with fuzz 2 (offset -104 lines).
1 out of 2 hunks FAILED -- saving rejects to file wine/dlls/wined3d/wined3d_main.c.rej
can't find file to patch at input line 229
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
|index b5fd4f0..72a549c 100644
|--- a/dlls/wined3d/wined3d_private.h
|+++ b/dlls/wined3d/wined3d_private.h
--------------------------
File to patch: wine/dlls/wined3d/wined3d_private.c
wine/dlls/wined3d/wined3d_private.c: No such file or directory
Skip this patch? [y] n
File to patch: wine/dlls/wined3d/wined3d_private.h
patching file wine/dlls/wined3d/wined3d_private.h
Hunk #1 FAILED at 281.
1 out of 1 hunk FAILED -- saving rejects to file wine/dlls/wined3d/wined3d_private.h.rej
Matts-MacBook-Pro:desktop DankHD$

Here are the rejected sections

wined3d/directx.c

Code: Select all

***************
*** 2880,2955 ****
          {
              gl_info->limits.combined_samplers = gl_info->limits.fragment_samplers;
          }
-         TRACE("Max vertex samplers: %u.\n", gl_info->limits.vertex_samplers);
-         TRACE("Max combined samplers: %u.\n", gl_info->limits.combined_samplers);
      }
      if (gl_info->supported[ARB_VERTEX_BLEND])
      {
          gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_VERTEX_UNITS_ARB, &gl_max);
          gl_info->limits.blends = gl_max;
-         TRACE("Max blends: %u.\n", gl_info->limits.blends);
      }
      if (gl_info->supported[EXT_TEXTURE3D])
      {
          gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE_EXT, &gl_max);
          gl_info->limits.texture3d_size = gl_max;
-         TRACE("Max texture3D size: %d.\n", gl_info->limits.texture3d_size);
      }
      if (gl_info->supported[EXT_TEXTURE_FILTER_ANISOTROPIC])
      {
          gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &gl_max);
          gl_info->limits.anisotropy = gl_max;
-         TRACE("Max anisotropy: %d.\n", gl_info->limits.anisotropy);
      }
      if (gl_info->supported[ARB_FRAGMENT_PROGRAM])
      {
          GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &gl_max));
          gl_info->limits.arb_ps_float_constants = gl_max;
-         TRACE("Max ARB_FRAGMENT_PROGRAM float constants: %d.\n", gl_info->limits.arb_ps_float_constants);
          GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB, &gl_max));
          gl_info->limits.arb_ps_native_constants = gl_max;
-         TRACE("Max ARB_FRAGMENT_PROGRAM native float constants: %d.\n",
                  gl_info->limits.arb_ps_native_constants);
          GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB, &gl_max));
          gl_info->limits.arb_ps_temps = gl_max;
-         TRACE("Max ARB_FRAGMENT_PROGRAM native temporaries: %d.\n", gl_info->limits.arb_ps_temps);
          GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, &gl_max));
          gl_info->limits.arb_ps_instructions = gl_max;
-         TRACE("Max ARB_FRAGMENT_PROGRAM native instructions: %d.\n", gl_info->limits.arb_ps_instructions);
          GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB, &gl_max));
          gl_info->limits.arb_ps_local_constants = gl_max;
-         TRACE("Max ARB_FRAGMENT_PROGRAM local parameters: %d.\n", gl_info->limits.arb_ps_instructions);
      }
      if (gl_info->supported[ARB_VERTEX_PROGRAM])
      {
          GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &gl_max));
          gl_info->limits.arb_vs_float_constants = gl_max;
-         TRACE("Max ARB_VERTEX_PROGRAM float constants: %d.\n", gl_info->limits.arb_vs_float_constants);
          GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB, &gl_max));
          gl_info->limits.arb_vs_native_constants = gl_max;
-         TRACE("Max ARB_VERTEX_PROGRAM native float constants: %d.\n",
                  gl_info->limits.arb_vs_native_constants);
          GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB, &gl_max));
          gl_info->limits.arb_vs_temps = gl_max;
-         TRACE("Max ARB_VERTEX_PROGRAM native temporaries: %d.\n", gl_info->limits.arb_vs_temps);
          GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, &gl_max));
          gl_info->limits.arb_vs_instructions = gl_max;
-         TRACE("Max ARB_VERTEX_PROGRAM native instructions: %d.\n", gl_info->limits.arb_vs_instructions);
      }
      if (gl_info->supported[ARB_VERTEX_SHADER])
      {
          gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB, &gl_max);
          gl_info->limits.glsl_vs_float_constants = gl_max / 4;
-         TRACE("Max ARB_VERTEX_SHADER float constants: %u.\n", gl_info->limits.glsl_vs_float_constants);
      }
      if (gl_info->supported[ARB_FRAGMENT_SHADER])
      {
          gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB, &gl_max);
          gl_info->limits.glsl_ps_float_constants = gl_max / 4;
-         TRACE("Max ARB_FRAGMENT_SHADER float constants: %u.\n", gl_info->limits.glsl_ps_float_constants);
          gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_VARYING_FLOATS_ARB, &gl_max);
          gl_info->limits.glsl_varyings = gl_max;
-         TRACE("Max GLSL varyings: %u (%u 4 component varyings).\n", gl_max, gl_max / 4);
      }
 
      if (gl_info->supported[NV_LIGHT_MAX_EXPONENT])
--- 2897,2972 ----
          {
              gl_info->limits.combined_samplers = gl_info->limits.fragment_samplers;
          }
+         FIXME("Max vertex samplers: %u.\n", gl_info->limits.vertex_samplers);
+         FIXME("Max combined samplers: %u.\n", gl_info->limits.combined_samplers);
      }
      if (gl_info->supported[ARB_VERTEX_BLEND])
      {
          gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_VERTEX_UNITS_ARB, &gl_max);
          gl_info->limits.blends = gl_max;
+         FIXME("Max blends: %u.\n", gl_info->limits.blends);
      }
      if (gl_info->supported[EXT_TEXTURE3D])
      {
          gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE_EXT, &gl_max);
          gl_info->limits.texture3d_size = gl_max;
+         FIXME("Max texture3D size: %d.\n", gl_info->limits.texture3d_size);
      }
      if (gl_info->supported[EXT_TEXTURE_FILTER_ANISOTROPIC])
      {
          gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &gl_max);
          gl_info->limits.anisotropy = gl_max;
+         FIXME("Max anisotropy: %d.\n", gl_info->limits.anisotropy);
      }
      if (gl_info->supported[ARB_FRAGMENT_PROGRAM])
      {
          GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &gl_max));
          gl_info->limits.arb_ps_float_constants = gl_max;
+         FIXME("Max ARB_FRAGMENT_PROGRAM float constants: %d.\n", gl_info->limits.arb_ps_float_constants);
          GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB, &gl_max));
          gl_info->limits.arb_ps_native_constants = gl_max;
+         FIXME("Max ARB_FRAGMENT_PROGRAM native float constants: %d.\n",
                  gl_info->limits.arb_ps_native_constants);
          GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB, &gl_max));
          gl_info->limits.arb_ps_temps = gl_max;
+         FIXME("Max ARB_FRAGMENT_PROGRAM native temporaries: %d.\n", gl_info->limits.arb_ps_temps);
          GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, &gl_max));
          gl_info->limits.arb_ps_instructions = gl_max;
+         FIXME("Max ARB_FRAGMENT_PROGRAM native instructions: %d.\n", gl_info->limits.arb_ps_instructions);
          GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB, &gl_max));
          gl_info->limits.arb_ps_local_constants = gl_max;
+         FIXME("Max ARB_FRAGMENT_PROGRAM local parameters: %d.\n", gl_info->limits.arb_ps_instructions);
      }
      if (gl_info->supported[ARB_VERTEX_PROGRAM])
      {
          GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &gl_max));
          gl_info->limits.arb_vs_float_constants = gl_max;
+         FIXME("Max ARB_VERTEX_PROGRAM float constants: %d.\n", gl_info->limits.arb_vs_float_constants);
          GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB, &gl_max));
          gl_info->limits.arb_vs_native_constants = gl_max;
+         FIXME("Max ARB_VERTEX_PROGRAM native float constants: %d.\n",
                  gl_info->limits.arb_vs_native_constants);
          GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB, &gl_max));
          gl_info->limits.arb_vs_temps = gl_max;
+         FIXME("Max ARB_VERTEX_PROGRAM native temporaries: %d.\n", gl_info->limits.arb_vs_temps);
          GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, &gl_max));
          gl_info->limits.arb_vs_instructions = gl_max;
+         FIXME("Max ARB_VERTEX_PROGRAM native instructions: %d.\n", gl_info->limits.arb_vs_instructions);
      }
      if (gl_info->supported[ARB_VERTEX_SHADER])
      {
          gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB, &gl_max);
          gl_info->limits.glsl_vs_float_constants = gl_max / 4;
+         FIXME("Max ARB_VERTEX_SHADER float constants: %u.\n", gl_info->limits.glsl_vs_float_constants);
      }
      if (gl_info->supported[ARB_FRAGMENT_SHADER])
      {
          gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB, &gl_max);
          gl_info->limits.glsl_ps_float_constants = gl_max / 4;
+         FIXME("Max ARB_FRAGMENT_SHADER float constants: %u.\n", gl_info->limits.glsl_ps_float_constants);
          gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_VARYING_FLOATS_ARB, &gl_max);
          gl_info->limits.glsl_varyings = gl_max;
+         FIXME("Max GLSL varyings: %u (%u 4 component varyings).\n", gl_max, gl_max / 4);
      }
 
      if (gl_info->supported[NV_LIGHT_MAX_EXPONENT])

This is the corresponding part of the source file that fails

Code: Select all

}
        else
        {
            gl_info->limits.combined_samplers = gl_info->limits.fragment_samplers;
        }
        TRACE("Max vertex samplers: %u.\n", gl_info->limits.vertex_samplers);
        TRACE("Max combined samplers: %u.\n", gl_info->limits.combined_samplers);
    }
    if (gl_info->supported[ARB_VERTEX_BLEND])
    {
        gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_VERTEX_UNITS_ARB, &gl_max);
        gl_info->limits.blends = gl_max;
        TRACE("Max blends: %u.\n", gl_info->limits.blends);
    }
    if (gl_info->supported[EXT_TEXTURE3D])
    {
        gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE_EXT, &gl_max);
        gl_info->limits.texture3d_size = gl_max;
        TRACE("Max texture3D size: %d.\n", gl_info->limits.texture3d_size);
    }
    if (gl_info->supported[EXT_TEXTURE_FILTER_ANISOTROPIC])
    {
        gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &gl_max);
        gl_info->limits.anisotropy = gl_max;
        TRACE("Max anisotropy: %d.\n", gl_info->limits.anisotropy);
    }
    if (gl_info->supported[ARB_FRAGMENT_PROGRAM])
    {
        GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &gl_max));
        gl_info->limits.arb_ps_float_constants = gl_max;
        TRACE("Max ARB_FRAGMENT_PROGRAM float constants: %d.\n", gl_info->limits.arb_ps_float_constants);
        GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB, &gl_max));
        gl_info->limits.arb_ps_native_constants = gl_max;
        TRACE("Max ARB_FRAGMENT_PROGRAM native float constants: %d.\n",
                gl_info->limits.arb_ps_native_constants);
        GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB, &gl_max));
        gl_info->limits.arb_ps_temps = gl_max;
        TRACE("Max ARB_FRAGMENT_PROGRAM native temporaries: %d.\n", gl_info->limits.arb_ps_temps);
        GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, &gl_max));
        gl_info->limits.arb_ps_instructions = gl_max;
        TRACE("Max ARB_FRAGMENT_PROGRAM native instructions: %d.\n", gl_info->limits.arb_ps_instructions);
        GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB, &gl_max));
        gl_info->limits.arb_ps_local_constants = gl_max;
        TRACE("Max ARB_FRAGMENT_PROGRAM local parameters: %d.\n", gl_info->limits.arb_ps_instructions);
    }
    if (gl_info->supported[ARB_VERTEX_PROGRAM])
    {
        GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &gl_max));
        gl_info->limits.arb_vs_float_constants = gl_max;
        TRACE("Max ARB_VERTEX_PROGRAM float constants: %d.\n", gl_info->limits.arb_vs_float_constants);
        GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB, &gl_max));
        gl_info->limits.arb_vs_native_constants = gl_max;
        TRACE("Max ARB_VERTEX_PROGRAM native float constants: %d.\n",
                gl_info->limits.arb_vs_native_constants);
        GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB, &gl_max));
        gl_info->limits.arb_vs_temps = gl_max;
        TRACE("Max ARB_VERTEX_PROGRAM native temporaries: %d.\n", gl_info->limits.arb_vs_temps);
        GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, &gl_max));
        gl_info->limits.arb_vs_instructions = gl_max;
        TRACE("Max ARB_VERTEX_PROGRAM native instructions: %d.\n", gl_info->limits.arb_vs_instructions);
    }
    if (gl_info->supported[ARB_VERTEX_SHADER])
    {
        gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB, &gl_max);
        gl_info->limits.glsl_vs_float_constants = gl_max / 4;
        TRACE("Max ARB_VERTEX_SHADER float constants: %u.\n", gl_info->limits.glsl_vs_float_constants);
 
        if (gl_info->supported[ARB_UNIFORM_BUFFER_OBJECT])
        {
            gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_VERTEX_UNIFORM_BLOCKS, &gl_max);
            gl_info->limits.vertex_uniform_blocks = min(gl_max, WINED3D_MAX_CBS);
            TRACE("Max vertex uniform blocks: %u (%d).\n", gl_info->limits.vertex_uniform_blocks, gl_max);
        }
    }
    if (gl_info->supported[ARB_GEOMETRY_SHADER4] && gl_info->supported[ARB_UNIFORM_BUFFER_OBJECT])
    {
        gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_GEOMETRY_UNIFORM_BLOCKS, &gl_max);
        gl_info->limits.geometry_uniform_blocks = min(gl_max, WINED3D_MAX_CBS);
        TRACE("Max geometry uniform blocks: %u (%d).\n", gl_info->limits.geometry_uniform_blocks, gl_max);
    }
    if (gl_info->supported[ARB_FRAGMENT_SHADER])
    {
        gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB, &gl_max);
        gl_info->limits.glsl_ps_float_constants = gl_max / 4;
        TRACE("Max ARB_FRAGMENT_SHADER float constants: %u.\n", gl_info->limits.glsl_ps_float_constants);
        gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_VARYING_FLOATS_ARB, &gl_max);
        gl_info->limits.glsl_varyings = gl_max;
        TRACE("Max GLSL varyings: %u (%u 4 component varyings).\n", gl_max, gl_max / 4);
 
        if (gl_info->supported[ARB_UNIFORM_BUFFER_OBJECT])
        {
            gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_FRAGMENT_UNIFORM_BLOCKS, &gl_max);
            gl_info->limits.fragment_uniform_blocks = min(gl_max, WINED3D_MAX_CBS);
            TRACE("Max fragment uniform blocks: %u (%d).\n", gl_info->limits.fragment_uniform_blocks, gl_max);
        }
    }
    if (gl_info->supported[ARB_UNIFORM_BUFFER_OBJECT])
    {
        gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_COMBINED_UNIFORM_BLOCKS, &gl_max);
        TRACE("Max combined uniform blocks: %d.\n", gl_max);
        gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_UNIFORM_BUFFER_BINDINGS, &gl_max);
        TRACE("Max uniform buffer bindings: %d.\n", gl_max);
    }
 
    if (gl_info->supported[NV_LIGHT_MAX_EXPONENT])

wined3d/wined3d_main.c

Code: Select all

***************
*** 84,89 ****
      TRUE,           /* Multisampling enabled by default. */
      FALSE,          /* No strict draw ordering. */
      TRUE,           /* Don't try to render onscreen by default. */
  };
 
  /* Do not call while under the GL lock. */
--- 84,91 ----
      TRUE,           /* Multisampling enabled by default. */
      FALSE,          /* No strict draw ordering. */
      TRUE,           /* Don't try to render onscreen by default. */
+     FALSE,          /* Override vertex constants? */
+     1024,           /* Number of vertex shaders to use */
  };
 
  /* Do not call while under the GL lock. */

This is the corresponding section of the source file that's failing

Code: Select all

TRUE,           /* Multisampling enabled by default. */
    FALSE,          /* No strict draw ordering. */
    TRUE,           /* Don't try to render onscreen by default. */
    ~0U,            /* No VS shader model limit by default. */
    ~0U,            /* No GS shader model limit by default. */
    ~0U,            /* No PS shader model limit by default. */
    FALSE,          /* 3D support enabled by default. */
    TRUE,           /* No multithreaded CS by default. */
};

wined3d/wined3d_private.h

Code: Select all

***************
*** 281,286 ****
      int allow_multisampling;
      BOOL strict_draw_ordering;
      BOOL always_offscreen;
  };
 
  extern struct wined3d_settings wined3d_settings DECLSPEC_HIDDEN;
--- 281,288 ----
      int allow_multisampling;
      BOOL strict_draw_ordering;
      BOOL always_offscreen;
+     BOOL override_vertex_constants;
+     int vertex_constants_number;
  };
 
  extern struct wined3d_settings wined3d_settings DECLSPEC_HIDDEN;

This is the corresponding section of the source file that fails

Code: Select all

int allow_multisampling;
    BOOL strict_draw_ordering;
    BOOL always_offscreen;
    unsigned int max_sm_vs;
    unsigned int max_sm_gs;
    unsigned int max_sm_ps;
    BOOL no_3d;
    BOOL cs_multithreaded;
};
 
extern struct wined3d_settings wined3d_settings DECLSPEC_HIDDEN;

Here is the original patch

Code: Select all

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 48a6ef4..05c68e1 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -768,8 +768,25 @@ static BOOL match_fglrx(const struct wined3d_gl_info *gl_info, const char *gl_re
     return gl_vendor == GL_VENDOR_FGLRX;
}
 
+static void quirk_arb_constants(struct wined3d_gl_info *gl_info)
+{
+    /* MacOS always reports 4096 MAX_VERTEX_UNIFORM_COMPONENTS, which means
+     * 1024 VS_FLOAT_CONSTANTS. This is fine with nVidia, but the ATi drivers
+     * in OS X use some vertex shaders for internal calculations.
+     * This number is never subtracted from the available ones, and OS X always
+     * advertises 1024, so when an application tries to access these constants
+     * they have incorrect values. This hack lets the user report a fixed number
+     */
+    if (wined3d_settings.override_vertex_constants) {
+        FIXME("Using Constants Override\n");
+        gl_info->limits.glsl_vs_float_constants = wined3d_settings.vertex_constants_number;
+        FIXME("Constants Number is now set at %i\n", wined3d_settings.vertex_constants_number);
+    }
+}
+
static void quirk_apple_glsl_constants(struct wined3d_gl_info *gl_info)
{
+    quirk_arb_constants(gl_info);
     /* MacOS needs uniforms for relative addressing offsets. This can accumulate to quite a few uniforms.
      * Beyond that the general uniform isn't optimal, so reserve a number of uniforms. 12 vec4's should
      * allow 48 different offsets or other helper immediate values. */
@@ -2364,25 +2381,25 @@ static void wined3d_adapter_init_limits(struct wined3d_gl_info *gl_info)
 
     gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_CLIP_PLANES, &gl_max);
     gl_info->limits.clipplanes = min(WINED3DMAXUSERCLIPPLANES, gl_max);
-    TRACE("Clip plane support - max planes %d.\n", gl_max);
+    FIXME("Clip plane support - max planes %d.\n", gl_max);
 
     gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_LIGHTS, &gl_max);
     gl_info->limits.lights = gl_max;
-    TRACE("Light support - max lights %d.\n", gl_max);
+    FIXME("Light support - max lights %d.\n", gl_max);
 
     gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_TEXTURE_SIZE, &gl_max);
     gl_info->limits.texture_size = gl_max;
-    TRACE("Maximum texture size support - max texture size %d.\n", gl_max);
+    FIXME("Maximum texture size support - max texture size %d.\n", gl_max);
 
     gl_info->gl_ops.gl.p_glGetFloatv(GL_ALIASED_POINT_SIZE_RANGE, gl_floatv);
     gl_info->limits.pointsize_min = gl_floatv[0];
     gl_info->limits.pointsize_max = gl_floatv[1];
-    TRACE("Maximum point size support - max point size %f.\n", gl_floatv[1]);
+    FIXME("Maximum point size support - max point size %f.\n", gl_floatv[1]);
 
     if (gl_info->supported[ARB_MAP_BUFFER_ALIGNMENT])
     {
         gl_info->gl_ops.gl.p_glGetIntegerv(GL_MIN_MAP_BUFFER_ALIGNMENT, &gl_max);
-        TRACE("Minimum buffer map alignment: %d.\n", gl_max);
+        FIXME("Minimum buffer map alignment: %d.\n", gl_max);
     }
     else
     {
@@ -2392,19 +2409,19 @@ static void wined3d_adapter_init_limits(struct wined3d_gl_info *gl_info)
     {
         gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_GENERAL_COMBINERS_NV, &gl_max);
         gl_info->limits.general_combiners = gl_max;
-        TRACE("Max general combiners: %d.\n", gl_max);
+        FIXME("Max general combiners: %d.\n", gl_max);
     }
     if (gl_info->supported[ARB_DRAW_BUFFERS] && wined3d_settings.offscreen_rendering_mode == ORM_FBO)
     {
         gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_DRAW_BUFFERS_ARB, &gl_max);
         gl_info->limits.buffers = gl_max;
-        TRACE("Max draw buffers: %u.\n", gl_max);
+        FIXME("Max draw buffers: %u.\n", gl_max);
     }
     if (gl_info->supported[ARB_MULTITEXTURE])
     {
         gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &gl_max);
         gl_info->limits.textures = min(MAX_TEXTURES, gl_max);
-        TRACE("Max textures: %d.\n", gl_info->limits.textures);
+        FIXME("Max textures: %d.\n", gl_info->limits.textures);
 
         if (gl_info->supported[ARB_FRAGMENT_PROGRAM])
         {
@@ -2419,8 +2436,8 @@ static void wined3d_adapter_init_limits(struct wined3d_gl_info *gl_info)
             gl_info->limits.texture_coords = max(gl_info->limits.texture_coords, gl_max);
             gl_info->limits.fragment_samplers = max(gl_info->limits.fragment_samplers, gl_max);
         }
-        TRACE("Max texture coords: %d.\n", gl_info->limits.texture_coords);
-        TRACE("Max fragment samplers: %d.\n", gl_info->limits.fragment_samplers);
+        FIXME("Max texture coords: %d.\n", gl_info->limits.texture_coords);
+        FIXME("Max fragment samplers: %d.\n", gl_info->limits.fragment_samplers);
 
         if (gl_info->supported[ARB_VERTEX_SHADER])
         {
@@ -2462,76 +2479,76 @@ static void wined3d_adapter_init_limits(struct wined3d_gl_info *gl_info)
         {
             gl_info->limits.combined_samplers = gl_info->limits.fragment_samplers;
         }
-        TRACE("Max vertex samplers: %u.\n", gl_info->limits.vertex_samplers);
-        TRACE("Max combined samplers: %u.\n", gl_info->limits.combined_samplers);
+        FIXME("Max vertex samplers: %u.\n", gl_info->limits.vertex_samplers);
+        FIXME("Max combined samplers: %u.\n", gl_info->limits.combined_samplers);
     }
     if (gl_info->supported[ARB_VERTEX_BLEND])
     {
         gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_VERTEX_UNITS_ARB, &gl_max);
         gl_info->limits.blends = gl_max;
-        TRACE("Max blends: %u.\n", gl_info->limits.blends);
+        FIXME("Max blends: %u.\n", gl_info->limits.blends);
     }
     if (gl_info->supported[EXT_TEXTURE3D])
     {
         gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE_EXT, &gl_max);
         gl_info->limits.texture3d_size = gl_max;
-        TRACE("Max texture3D size: %d.\n", gl_info->limits.texture3d_size);
+        FIXME("Max texture3D size: %d.\n", gl_info->limits.texture3d_size);
     }
     if (gl_info->supported[EXT_TEXTURE_FILTER_ANISOTROPIC])
     {
         gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &gl_max);
         gl_info->limits.anisotropy = gl_max;
-        TRACE("Max anisotropy: %d.\n", gl_info->limits.anisotropy);
+        FIXME("Max anisotropy: %d.\n", gl_info->limits.anisotropy);
     }
     if (gl_info->supported[ARB_FRAGMENT_PROGRAM])
     {
         GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &gl_max));
         gl_info->limits.arb_ps_float_constants = gl_max;
-        TRACE("Max ARB_FRAGMENT_PROGRAM float constants: %d.\n", gl_info->limits.arb_ps_float_constants);
+        FIXME("Max ARB_FRAGMENT_PROGRAM float constants: %d.\n", gl_info->limits.arb_ps_float_constants);
         GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB, &gl_max));
         gl_info->limits.arb_ps_native_constants = gl_max;
-        TRACE("Max ARB_FRAGMENT_PROGRAM native float constants: %d.\n",
+        FIXME("Max ARB_FRAGMENT_PROGRAM native float constants: %d.\n",
                 gl_info->limits.arb_ps_native_constants);
         GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB, &gl_max));
         gl_info->limits.arb_ps_temps = gl_max;
-        TRACE("Max ARB_FRAGMENT_PROGRAM native temporaries: %d.\n", gl_info->limits.arb_ps_temps);
+        FIXME("Max ARB_FRAGMENT_PROGRAM native temporaries: %d.\n", gl_info->limits.arb_ps_temps);
         GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, &gl_max));
         gl_info->limits.arb_ps_instructions = gl_max;
-        TRACE("Max ARB_FRAGMENT_PROGRAM native instructions: %d.\n", gl_info->limits.arb_ps_instructions);
+        FIXME("Max ARB_FRAGMENT_PROGRAM native instructions: %d.\n", gl_info->limits.arb_ps_instructions);
         GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB, &gl_max));
         gl_info->limits.arb_ps_local_constants = gl_max;
-        TRACE("Max ARB_FRAGMENT_PROGRAM local parameters: %d.\n", gl_info->limits.arb_ps_instructions);
+        FIXME("Max ARB_FRAGMENT_PROGRAM local parameters: %d.\n", gl_info->limits.arb_ps_instructions);
     }
     if (gl_info->supported[ARB_VERTEX_PROGRAM])
     {
         GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &gl_max));
         gl_info->limits.arb_vs_float_constants = gl_max;
-        TRACE("Max ARB_VERTEX_PROGRAM float constants: %d.\n", gl_info->limits.arb_vs_float_constants);
+        FIXME("Max ARB_VERTEX_PROGRAM float constants: %d.\n", gl_info->limits.arb_vs_float_constants);
         GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB, &gl_max));
         gl_info->limits.arb_vs_native_constants = gl_max;
-        TRACE("Max ARB_VERTEX_PROGRAM native float constants: %d.\n",
+        FIXME("Max ARB_VERTEX_PROGRAM native float constants: %d.\n",
                 gl_info->limits.arb_vs_native_constants);
         GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB, &gl_max));
         gl_info->limits.arb_vs_temps = gl_max;
-        TRACE("Max ARB_VERTEX_PROGRAM native temporaries: %d.\n", gl_info->limits.arb_vs_temps);
+        FIXME("Max ARB_VERTEX_PROGRAM native temporaries: %d.\n", gl_info->limits.arb_vs_temps);
         GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, &gl_max));
         gl_info->limits.arb_vs_instructions = gl_max;
-        TRACE("Max ARB_VERTEX_PROGRAM native instructions: %d.\n", gl_info->limits.arb_vs_instructions);
+        FIXME("Max ARB_VERTEX_PROGRAM native instructions: %d.\n", gl_info->limits.arb_vs_instructions);
     }
     if (gl_info->supported[ARB_VERTEX_SHADER])
     {
         gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB, &gl_max);
         gl_info->limits.glsl_vs_float_constants = gl_max / 4;
-        TRACE("Max ARB_VERTEX_SHADER float constants: %u.\n", gl_info->limits.glsl_vs_float_constants);
+        FIXME("Max ARB_VERTEX_SHADER float constants: %u.\n", gl_info->limits.glsl_vs_float_constants);
     }
     if (gl_info->supported[ARB_FRAGMENT_SHADER])
     {
         gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB, &gl_max);
         gl_info->limits.glsl_ps_float_constants = gl_max / 4;
-        TRACE("Max ARB_FRAGMENT_SHADER float constants: %u.\n", gl_info->limits.glsl_ps_float_constants);
+        FIXME("Max ARB_FRAGMENT_SHADER float constants: %u.\n", gl_info->limits.glsl_ps_float_constants);
         gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_VARYING_FLOATS_ARB, &gl_max);
         gl_info->limits.glsl_varyings = gl_max;
-        TRACE("Max GLSL varyings: %u (%u 4 component varyings).\n", gl_max, gl_max / 4);
+        FIXME("Max GLSL varyings: %u (%u 4 component varyings).\n", gl_max, gl_max / 4);
     }
 
     if (gl_info->supported[NV_LIGHT_MAX_EXPONENT])
diff --git a/dlls/wined3d/wined3d_main.c b/dlls/wined3d/wined3d_main.c
index 2247e9c..9435ee4 100644
--- a/dlls/wined3d/wined3d_main.c
+++ b/dlls/wined3d/wined3d_main.c
@@ -84,6 +84,8 @@ struct wined3d_settings wined3d_settings =
     TRUE,           /* Multisampling enabled by default. */
     FALSE,          /* No strict draw ordering. */
     TRUE,           /* Don't try to render onscreen by default. */
+    FALSE,          /* Override vertex constants? */
+    1024,           /* Number of vertex shaders to use */
};
 
/* Do not call while under the GL lock. */
@@ -323,6 +325,21 @@ static BOOL wined3d_dll_init(HINSTANCE hInstDLL)
             TRACE("Not always rendering backbuffers offscreen.\n");
             wined3d_settings.always_offscreen = FALSE;
         }
+        if (!get_config_key(hkey, appkey, "OverrideVertexShaders", buffer, size)
+                && !strcmp(buffer,"enabled"))
+        {
+            TRACE("Override Vertex Shader Constants\n");
+            wined3d_settings.override_vertex_constants = TRUE;
+        }
+        if (!get_config_key(hkey, appkey, "VertexShaderConstants", buffer, size))
+        {
+            int TmpVertexShaderConstants = atoi(buffer);
+            if (TmpVertexShaderConstants > 0)
+            {
+                wined3d_settings.vertex_constants_number = TmpVertexShaderConstants;
+                TRACE("Use %i Vertex Shader Constants\n", TmpVertexShaderConstants);
+            }
+        }
     }
     if (wined3d_settings.vs_mode == VS_HW)
         TRACE("Allow HW vertex shaders\n");
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index b5fd4f0..72a549c 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -281,6 +281,8 @@ struct wined3d_settings
     int allow_multisampling;
     BOOL strict_draw_ordering;
     BOOL always_offscreen;
+    BOOL override_vertex_constants;
+    int vertex_constants_number;
};
 
extern struct wined3d_settings wined3d_settings DECLSPEC_HIDDEN;
Any help would be greatly appreciated!
User avatar
olivierfrdierick
Level 5
Level 5
Posts: 258
Joined: Thu Sep 13, 2012 12:09 pm

Re: Patching Help for Wine 1.7.37 source

Post by olivierfrdierick »

This is evident that you don't know about coding.
Rewriting someone else's patch is not that easy.
You have to understand what it changes to the code.
Not which lines, but the logic.
You should contact the author of the patch if you can.
He might be willing to rewrite is own patch, or tell you what it does to the code so that you may make a new patch yourself.
User avatar
olivierfrdierick
Level 5
Level 5
Posts: 258
Joined: Thu Sep 13, 2012 12:09 pm

Re: Patching Help for Wine 1.7.37 source

Post by olivierfrdierick »

Well, it wasn't so hard after all.
I re-built the patch against Wine 1.7.37-98.
The patch is in the tar.gz attachment.
Attachments
ATiShaderPatch.diff.tar.gz
ATiShaderPatch built against Wine 1.7.37-98.
(3 KiB) Downloaded 171 times
danko_b
Newbie
Newbie
Posts: 3
Joined: Mon Mar 02, 2015 10:14 pm

Re: Patching Help for Wine 1.7.37 source

Post by danko_b »

WOW!!! Thank you so much Olivier! I really appreciate the time you spent in looking this over...And you're right, I know nothing about coding. I had a buddy in Germany that would re-write patches for me once in awhile in order to work on newer Wine versions but he hasn't been present in our forums for awhile now.

Again, many thanks for your time! I'll report back to let you know if it works for me!
Locked