From d5238cfb388e33250d82524e5890a31670f6c178 Mon Sep 17 00:00:00 2001 From: "H. Verbeet" Date: Sun, 30 Jul 2006 23:28:10 +0200 Subject: [PATCH] wined3d: Split the GLSL check in a check for GLSL vertex shaders and one for GLSL fragment shaders. --- dlls/wined3d/directx.c | 29 ++++++++++++++++++----------- include/wine/wined3d_gl.h | 3 ++- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index faaff47de49..1fa4a5e9c3b 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -216,7 +216,7 @@ static void select_shader_mode( *vs_selected = SHADER_NONE; } else if (DeviceType == WINED3DDEVTYPE_REF || wined3d_settings.vs_mode == VS_SW) { *vs_selected = SHADER_SW; - } else if (gl_info->supported[ARB_SHADING_LANGUAGE_100] && wined3d_settings.glslRequested) { + } else if (gl_info->supported[ARB_VERTEX_SHADER] && wined3d_settings.glslRequested) { *vs_selected = SHADER_GLSL; } else if (gl_info->supported[ARB_VERTEX_PROGRAM]) { *vs_selected = SHADER_ARB; @@ -229,7 +229,7 @@ static void select_shader_mode( *ps_selected = SHADER_NONE; } else if (DeviceType == WINED3DDEVTYPE_REF) { *ps_selected = SHADER_NONE; - } else if (gl_info->supported[ARB_SHADING_LANGUAGE_100] && wined3d_settings.glslRequested) { + } else if (gl_info->supported[ARB_FRAGMENT_SHADER] && wined3d_settings.glslRequested) { *ps_selected = SHADER_GLSL; } else if (gl_info->supported[ARB_FRAGMENT_PROGRAM]) { *ps_selected = SHADER_ARB; @@ -521,6 +521,10 @@ BOOL IWineD3DImpl_FillGLCaps(IWineD3D *iface, Display* display) { gl_info->vs_arb_version = VS_VERSION_NOT_SUPPORTED; gl_info->vs_nv_version = VS_VERSION_NOT_SUPPORTED; gl_info->vs_ati_version = VS_VERSION_NOT_SUPPORTED; + gl_info->vs_glsl_constantsF = 0; + gl_info->ps_glsl_constantsF = 0; + gl_info->vs_arb_constantsF = 0; + gl_info->ps_arb_constantsF = 0; /* Now work out what GL support this card really has */ #define USE_GL_FUNC(type, pfn) gl_info->pfn = (type) glXGetProcAddressARB( (const GLubyte *) #pfn); @@ -576,18 +580,14 @@ BOOL IWineD3DImpl_FillGLCaps(IWineD3D *iface, Display* display) { GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &gl_max)); TRACE_(d3d_caps)(" FOUND: ARB Pixel Shader support - max float constants=%u\n", gl_max); gl_info->ps_arb_constantsF = gl_max; + } else if (strcmp(ThisExtn, "GL_ARB_fragment_shader") == 0) { + gl_info->supported[ARB_FRAGMENT_SHADER] = TRUE; + glGetIntegerv(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB, &gl_max); + TRACE_(d3d_caps)(" FOUND: ARB_fragment_shader (GLSL) support - max float ps constants=%u\n", gl_max); + gl_info->ps_glsl_constantsF = gl_max; } else if (strcmp(ThisExtn, "GL_ARB_imaging") == 0) { TRACE_(d3d_caps)(" FOUND: ARB imaging support\n"); gl_info->supported[ARB_IMAGING] = TRUE; - } 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; - glGetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB, &gl_max); - TRACE_(d3d_caps)(" FOUND: GL Shading Language support - max float vs constants=%u\n", gl_max); - gl_info->vs_glsl_constantsF = gl_max; - glGetIntegerv(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB, &gl_max); - TRACE_(d3d_caps)(" FOUND: GL Shading Language support - max float ps constants=%u\n", gl_max); - gl_info->ps_glsl_constantsF = gl_max; } else if (strcmp(ThisExtn, "GL_ARB_multisample") == 0) { TRACE_(d3d_caps)(" FOUND: ARB Multisample support\n"); gl_info->supported[ARB_MULTISAMPLE] = TRUE; @@ -637,6 +637,11 @@ BOOL IWineD3DImpl_FillGLCaps(IWineD3D *iface, Display* display) { GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &gl_max)); TRACE_(d3d_caps)(" FOUND: ARB Vertex Shader support - max float constants=%u\n", gl_max); gl_info->vs_arb_constantsF = gl_max; + } else if (strcmp(ThisExtn, "GL_ARB_vertex_shader") == 0) { + gl_info->supported[ARB_VERTEX_SHADER] = TRUE; + glGetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB, &gl_max); + TRACE_(d3d_caps)(" FOUND: ARB_vertex_shader (GLSL) support - max float vs constants=%u\n", gl_max); + gl_info->vs_glsl_constantsF = gl_max; } else if (strcmp(ThisExtn, "GL_ARB_vertex_blend") == 0) { glGetIntegerv(GL_MAX_VERTEX_UNITS_ARB, &gl_max); TRACE_(d3d_caps)(" FOUND: ARB Vertex Blend support GL_MAX_VERTEX_UNITS_ARB %d\n", gl_max); @@ -766,6 +771,8 @@ BOOL IWineD3DImpl_FillGLCaps(IWineD3D *iface, Display* display) { if (*GL_Extensions == ' ') GL_Extensions++; } } + checkGLcall("extension detection\n"); + gl_info->max_sampler_stages = max(gl_info->max_samplers, gl_info->max_texture_stages); /* Load all the lookup tables diff --git a/include/wine/wined3d_gl.h b/include/wine/wined3d_gl.h index a0b96d6b19e..d9b075c1995 100644 --- a/include/wine/wined3d_gl.h +++ b/include/wine/wined3d_gl.h @@ -1345,6 +1345,7 @@ typedef enum _GL_PSVersion { typedef enum _GL_SupportedExt { /* ARB */ ARB_FRAGMENT_PROGRAM, + ARB_FRAGMENT_SHADER, ARB_IMAGING, ARB_MULTISAMPLE, ARB_MULTITEXTURE, @@ -1362,7 +1363,7 @@ typedef enum _GL_SupportedExt { ARB_VERTEX_PROGRAM, ARB_VERTEX_BLEND, ARB_VERTEX_BUFFER_OBJECT, - ARB_SHADING_LANGUAGE_100, + ARB_VERTEX_SHADER, /* EXT */ EXT_FOG_COORD, EXT_FRAMEBUFFER_OBJECT, -- 2.11.4.GIT