Phil Costin : wined3d: Add check for GL Shading Language 100 Extension.

Alexandre Julliard julliard at wine.codeweavers.com
Tue May 9 05:56:32 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 9413c89c33cd49a3de8fb26800e219ce04c8ebd9
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=9413c89c33cd49a3de8fb26800e219ce04c8ebd9

Author: Phil Costin <philcostin at hotmail.com>
Date:   Mon May  8 21:39:04 2006 +0100

wined3d: Add check for GL Shading Language 100 Extension.

---

 dlls/wined3d/directx.c    |   45 ++++++++++++++++++++++++++++++++++-----------
 include/wine/wined3d_gl.h |    1 +
 2 files changed, 35 insertions(+), 11 deletions(-)

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index b58aeeb..ce05a45 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -489,6 +489,9 @@ #undef USE_GL_FUNC
                 glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS_ARB, &gl_max);
                 TRACE_(d3d_caps)(" FOUND: ARB Pixel Shader support - GL_MAX_TEXTURE_IMAGE_UNITS_ARB=%u\n", gl_max);
                 gl_info->max_samplers = min(MAX_SAMPLERS, gl_max);
+            } else if (strcmp(ThisExtn, "GL_ARB_shading_language_100") == 0) {
+                TRACE_(d3d_caps)(" FOUND: GL Shading Language v100 support\n");
+                gl_info->supported[ARB_SHADING_LANGUAGE_100] = TRUE;
             } else if (strcmp(ThisExtn, "GL_ARB_multisample") == 0) {
                 TRACE_(d3d_caps)(" FOUND: ARB Multisample support\n");
                 gl_info->supported[ARB_MULTISAMPLE] = TRUE;
@@ -1674,28 +1677,48 @@ #endif
     *pCaps->MaxStreams          = MAX_STREAMS;
     *pCaps->MaxStreamStride     = 1024;
 
-    if (((wined3d_settings.vs_mode == VS_HW) && GL_SUPPORT(ARB_VERTEX_PROGRAM)) || (wined3d_settings.vs_mode == VS_SW) || (DeviceType == WINED3DDEVTYPE_REF)) {
-      *pCaps->VertexShaderVersion = D3DVS_VERSION(1,1);
+    if (wined3d_settings.vs_mode == VS_HW && GL_SUPPORT(ARB_SHADING_LANGUAGE_100) && DeviceType != WINED3DDEVTYPE_REF) {
+        /* FIXME: Uncomment the line below and remove the line beneath that to set Vertex Shader 2.0+ capability */
+        /* *pCaps->VertexShaderVersion = D3DVS_VERSION(3,0); */
+        *pCaps->VertexShaderVersion = D3DVS_VERSION(1,1);
+        TRACE_(d3d_caps)("Hardware Vertex Shaders versions 2.0+ enabled\n");
+    } else if (wined3d_settings.vs_mode == VS_HW && GL_SUPPORT(ARB_VERTEX_PROGRAM) && DeviceType != WINED3DDEVTYPE_REF) {
+        *pCaps->VertexShaderVersion = D3DVS_VERSION(1,1);
+        TRACE_(d3d_caps)("Hardware Vertex Shader version 1.1 enabled\n");
+    } else if (wined3d_settings.vs_mode == VS_SW || DeviceType == WINED3DDEVTYPE_REF) {
+        *pCaps->VertexShaderVersion = D3DVS_VERSION(1,1);
+        TRACE_(d3d_caps)("Software Vertex Shader version 1.1 enabled\n");
+    } else {
+        *pCaps->VertexShaderVersion  = 0;
+        TRACE_(d3d_caps)("Vertex Shader functionality not available\n");
+    }
 
-      if (This->gl_info.gl_vendor == VENDOR_MESA ||
-          This->gl_info.gl_vendor == VENDOR_WINE) {
+    if (This->gl_info.gl_vendor == VENDOR_MESA || This->gl_info.gl_vendor == VENDOR_WINE) {
         *pCaps->MaxVertexShaderConst = 95;
-      } else {
-        *pCaps->MaxVertexShaderConst = WINED3D_VSHADER_MAX_CONSTANTS;
-      }
     } else {
-        *pCaps->VertexShaderVersion  = 0;
-        *pCaps->MaxVertexShaderConst = 0;
+        *pCaps->MaxVertexShaderConst = WINED3D_VSHADER_MAX_CONSTANTS;
     }
 
-    if ((wined3d_settings.ps_mode == PS_HW) && GL_SUPPORT(ARB_FRAGMENT_PROGRAM) && (DeviceType != WINED3DDEVTYPE_REF)) {
+    if (wined3d_settings.ps_mode == PS_HW && GL_SUPPORT(ARB_SHADING_LANGUAGE_100) && DeviceType != WINED3DDEVTYPE_REF) {
+        /* FIXME: Uncomment the following line and remove the line beneath that to set Pixel Shader 2.0+ capability */
+        /* *pCaps->PixelShaderVersion = D3DPS_VERSION(3,0); */
+        *pCaps->PixelShaderVersion    = D3DPS_VERSION(1,4);
+        *pCaps->PixelShader1xMaxValue = 1.0;
+        TRACE_(d3d_caps)("Hardware Pixel Shaders versions 2.0+ enabled\n");
+    } else if (wined3d_settings.ps_mode == PS_HW && GL_SUPPORT(ARB_FRAGMENT_PROGRAM) && DeviceType != WINED3DDEVTYPE_REF) {
+        *pCaps->PixelShaderVersion    = D3DPS_VERSION(1,4);
+        *pCaps->PixelShader1xMaxValue = 1.0;
+        TRACE_(d3d_caps)("Hardware Pixel Shaders version 1.4 enabled\n");
+    /* FIXME: Uncomment this when there is support for software Pixel Shader 1.4 and PS_SW is defined
+    } else if (wined3d_settings.ps_mode == PS_SW || DeviceType == WINED3DDEVTYPE_REF) {
         *pCaps->PixelShaderVersion    = D3DPS_VERSION(1,4);
         *pCaps->PixelShader1xMaxValue = 1.0;
+        TRACE_(d3d_caps)("Software Pixel Shader version 1.4 enabled\n"); */
     } else {
         *pCaps->PixelShaderVersion    = 0;
         *pCaps->PixelShader1xMaxValue = 0.0;
+        TRACE_(d3d_caps)("Pixel Shader functionality not available\n");
     }
-    /* TODO: ARB_FRAGMENT_PROGRAM_100 */
 
     /* ------------------------------------------------
        The following fields apply to d3d9 only
diff --git a/include/wine/wined3d_gl.h b/include/wine/wined3d_gl.h
index 63e79ee..92f4267 100644
--- a/include/wine/wined3d_gl.h
+++ b/include/wine/wined3d_gl.h
@@ -1126,6 +1126,7 @@ typedef enum _GL_SupportedExt {
   ARB_VERTEX_PROGRAM,
   ARB_VERTEX_BLEND,
   ARB_VERTEX_BUFFER_OBJECT,
+  ARB_SHADING_LANGUAGE_100,
   /* EXT */
   EXT_FOG_COORD,
   EXT_FRAMEBUFFER_OBJECT,




More information about the wine-cvs mailing list