Stefan Dösinger : wined3d: Enable Shader Model 2. 0 in ARB.

Alexandre Julliard julliard at winehq.org
Mon Jun 22 09:04:11 CDT 2009


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

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Thu Jun 18 18:27:04 2009 +0200

wined3d: Enable Shader Model 2.0 in ARB.

If the needed constants are available, we can support all vs_2_0 and ps_2_0
requirements with the plain ARB extensions. We cannot however, run SM 2.0a or
SM 2.0b.

---

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

diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c
index cab4bf7..fbd56a0 100644
--- a/dlls/wined3d/arb_program_shader.c
+++ b/dlls/wined3d/arb_program_shader.c
@@ -4124,15 +4124,33 @@ static void shader_arb_get_caps(WINED3DDEVTYPE devtype, const WineD3D_GL_Info *g
     none_shader_backend.shader_get_caps(devtype, gl_info, pCaps);
 
     if(GL_SUPPORT(ARB_VERTEX_PROGRAM)) {
-        pCaps->VertexShaderVersion = WINED3DVS_VERSION(1,1);
-        TRACE_(d3d_caps)("Hardware vertex shader version 1.1 enabled (ARB_PROGRAM)\n");
+        /* Shader Model 2.0 requires at least 256 vertex shader constants */
+        if(GL_LIMITS(vshader_constantsF) >= 256)
+        {
+            pCaps->VertexShaderVersion = WINED3DVS_VERSION(2,0);
+            TRACE_(d3d_caps)("Hardware vertex shader version 2.0 enabled (ARB_PROGRAM)\n");
+        }
+        else
+        {
+            pCaps->VertexShaderVersion = WINED3DVS_VERSION(1,1);
+            TRACE_(d3d_caps)("Hardware vertex shader version 1.1 enabled (ARB_PROGRAM)\n");
+        }
         pCaps->MaxVertexShaderConst = GL_LIMITS(vshader_constantsF) - 1;
     }
 
     if(GL_SUPPORT(ARB_FRAGMENT_PROGRAM)) {
-        pCaps->PixelShaderVersion    = WINED3DPS_VERSION(1,4);
+        /* Shader Model 2.0 requires at least 32 pixel shader constants */
+        if(GL_LIMITS(vshader_constantsF) >= 32)
+        {
+            pCaps->PixelShaderVersion    = WINED3DPS_VERSION(2,0);
+            TRACE_(d3d_caps)("Hardware pixel shader version 2.0 enabled (ARB_PROGRAM)\n");
+        }
+        else
+        {
+            pCaps->PixelShaderVersion    = WINED3DPS_VERSION(1,4);
+            TRACE_(d3d_caps)("Hardware pixel shader version 1.4 enabled (ARB_PROGRAM)\n");
+        }
         pCaps->PixelShader1xMaxValue = 8.0;
-        TRACE_(d3d_caps)("Hardware pixel shader version 1.4 enabled (ARB_PROGRAM)\n");
         pCaps->MaxPixelShaderConst = GL_LIMITS(pshader_constantsF);
     }
 




More information about the wine-cvs mailing list