[PATCH 3/5] wined3d: Enable SM4 support in the GLSL shader backend when possible. (try 2)

Matteo Bruni mbruni at codeweavers.com
Tue Oct 25 09:58:45 CDT 2011


---
 dlls/wined3d/directx.c     |    4 ++--
 dlls/wined3d/glsl_shader.c |    8 +++++++-
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 5d6eef9..f6228eb 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -4750,7 +4750,7 @@ HRESULT CDECL wined3d_get_device_caps(const struct wined3d *wined3d, UINT adapte
      * are the same among all shader models. So to avoid code duplication set the shader version
      * specific, but otherwise constant caps here
      */
-    if (caps->VertexShaderVersion == 3)
+    if (caps->VertexShaderVersion >= 3)
     {
         /* Where possible set the caps based on OpenGL extensions and if they
          * aren't set (in case of software rendering) use the VS 3.0 from
@@ -4787,7 +4787,7 @@ HRESULT CDECL wined3d_get_device_caps(const struct wined3d *wined3d, UINT adapte
         caps->MaxVertexShader30InstructionSlots = 0;
     }
 
-    if (caps->PixelShaderVersion == 3)
+    if (caps->PixelShaderVersion >= 3)
     {
         /* Where possible set the caps based on OpenGL extensions and if they
          * aren't set (in case of software rendering) use the PS 3.0 from
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 612e865..cb8a711 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -4917,9 +4917,15 @@ static BOOL shader_glsl_dirty_const(void)
 
 static void shader_glsl_get_caps(const struct wined3d_gl_info *gl_info, struct shader_caps *caps)
 {
+    if (gl_info->supported[EXT_GPU_SHADER4] && gl_info->supported[ARB_GEOMETRY_SHADER4]
+            && gl_info->glsl_version >= MAKEDWORD_VERSION(1, 50))
+    {
+        caps->VertexShaderVersion = 4;
+        caps->PixelShaderVersion = 4;
+    }
     /* ARB_shader_texture_lod or EXT_gpu_shader4 is required for the SM3
      * texldd and texldl instructions. */
-    if (gl_info->supported[ARB_SHADER_TEXTURE_LOD] || gl_info->supported[EXT_GPU_SHADER4])
+    else if (gl_info->supported[ARB_SHADER_TEXTURE_LOD] || gl_info->supported[EXT_GPU_SHADER4])
     {
         caps->VertexShaderVersion = 3;
         caps->PixelShaderVersion = 3;
-- 
1.7.3.4




More information about the wine-patches mailing list