mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-14 19:35:42 +00:00
wined3d: Replace "VertexShaderMode" and "PixelShaderMode" with shader model limits.
This commit is contained in:
parent
6f04922de0
commit
dc21460397
|
@ -4989,6 +4989,7 @@ static void shader_arb_get_caps(const struct wined3d_gl_info *gl_info, struct sh
|
|||
if (gl_info->supported[ARB_VERTEX_PROGRAM])
|
||||
{
|
||||
DWORD vs_consts;
|
||||
UINT vs_version;
|
||||
|
||||
/* 96 is the minimum allowed value of MAX_PROGRAM_ENV_PARAMETERS_ARB
|
||||
* for vertex programs. If the native limit is less than that it's
|
||||
|
@ -5001,20 +5002,21 @@ static void shader_arb_get_caps(const struct wined3d_gl_info *gl_info, struct sh
|
|||
|
||||
if (gl_info->supported[NV_VERTEX_PROGRAM3])
|
||||
{
|
||||
caps->vs_version = 3;
|
||||
vs_version = 3;
|
||||
TRACE("Hardware vertex shader version 3.0 enabled (NV_VERTEX_PROGRAM3)\n");
|
||||
}
|
||||
else if (vs_consts >= 256)
|
||||
{
|
||||
/* Shader Model 2.0 requires at least 256 vertex shader constants */
|
||||
caps->vs_version = 2;
|
||||
vs_version = 2;
|
||||
TRACE("Hardware vertex shader version 2.0 enabled (ARB_PROGRAM)\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
caps->vs_version = 1;
|
||||
vs_version = 1;
|
||||
TRACE("Hardware vertex shader version 1.1 enabled (ARB_PROGRAM)\n");
|
||||
}
|
||||
caps->vs_version = min(wined3d_settings.max_sm_vs, vs_version);
|
||||
caps->vs_uniform_count = vs_consts;
|
||||
}
|
||||
else
|
||||
|
@ -5028,6 +5030,7 @@ static void shader_arb_get_caps(const struct wined3d_gl_info *gl_info, struct sh
|
|||
if (gl_info->supported[ARB_FRAGMENT_PROGRAM])
|
||||
{
|
||||
DWORD ps_consts;
|
||||
UINT ps_version;
|
||||
|
||||
/* Similar as above for vertex programs, but the minimum for fragment
|
||||
* programs is 24. */
|
||||
|
@ -5038,20 +5041,21 @@ static void shader_arb_get_caps(const struct wined3d_gl_info *gl_info, struct sh
|
|||
|
||||
if (gl_info->supported[NV_FRAGMENT_PROGRAM2])
|
||||
{
|
||||
caps->ps_version = 3;
|
||||
ps_version = 3;
|
||||
TRACE("Hardware pixel shader version 3.0 enabled (NV_FRAGMENT_PROGRAM2)\n");
|
||||
}
|
||||
else if (ps_consts >= 32)
|
||||
{
|
||||
/* Shader Model 2.0 requires at least 32 pixel shader constants */
|
||||
caps->ps_version = 2;
|
||||
ps_version = 2;
|
||||
TRACE("Hardware pixel shader version 2.0 enabled (ARB_PROGRAM)\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
caps->ps_version = 1;
|
||||
ps_version = 1;
|
||||
TRACE("Hardware pixel shader version 1.4 enabled (ARB_PROGRAM)\n");
|
||||
}
|
||||
caps->ps_version = min(wined3d_settings.max_sm_ps, ps_version);
|
||||
caps->ps_uniform_count = ps_consts;
|
||||
caps->ps_1x_max_value = 8.0f;
|
||||
}
|
||||
|
|
|
@ -2267,8 +2267,6 @@ static const struct wined3d_shader_backend_ops *select_shader_backend(const stru
|
|||
{
|
||||
BOOL glsl = wined3d_settings.glslRequested && gl_info->glsl_version >= MAKEDWORD_VERSION(1, 20);
|
||||
|
||||
if (wined3d_settings.vs_mode == VS_NONE && wined3d_settings.ps_mode == PS_NONE)
|
||||
return &none_shader_backend;
|
||||
if (glsl && gl_info->supported[ARB_FRAGMENT_SHADER])
|
||||
return &glsl_shader_backend;
|
||||
if (glsl && gl_info->supported[ARB_VERTEX_SHADER])
|
||||
|
|
|
@ -6184,9 +6184,9 @@ static void shader_glsl_get_caps(const struct wined3d_gl_info *gl_info, struct s
|
|||
shader_model = 2;
|
||||
TRACE("Shader model %u.\n", shader_model);
|
||||
|
||||
caps->vs_version = shader_model;
|
||||
caps->gs_version = shader_model;
|
||||
caps->ps_version = shader_model;
|
||||
caps->vs_version = min(wined3d_settings.max_sm_vs, shader_model);
|
||||
caps->gs_version = min(wined3d_settings.max_sm_gs, shader_model);
|
||||
caps->ps_version = min(wined3d_settings.max_sm_ps, shader_model);
|
||||
|
||||
caps->vs_uniform_count = gl_info->limits.glsl_vs_float_constants;
|
||||
caps->ps_uniform_count = gl_info->limits.glsl_ps_float_constants;
|
||||
|
|
|
@ -72,8 +72,6 @@ static CRITICAL_SECTION wined3d_wndproc_cs = {&wined3d_wndproc_cs_debug, -1, 0,
|
|||
* where appropriate. */
|
||||
struct wined3d_settings wined3d_settings =
|
||||
{
|
||||
VS_HW, /* Hardware by default */
|
||||
PS_HW, /* Hardware by default */
|
||||
TRUE, /* Use of GLSL enabled by default */
|
||||
ORM_FBO, /* Use FBOs to do offscreen rendering */
|
||||
RTL_READTEX, /* Default render target locking method */
|
||||
|
@ -84,6 +82,9 @@ struct wined3d_settings wined3d_settings =
|
|||
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. */
|
||||
};
|
||||
|
||||
/* Do not call while under the GL lock. */
|
||||
|
@ -196,27 +197,6 @@ static BOOL wined3d_dll_init(HINSTANCE hInstDLL)
|
|||
|
||||
if (hkey || appkey)
|
||||
{
|
||||
if ( !get_config_key( hkey, appkey, "VertexShaderMode", buffer, size) )
|
||||
{
|
||||
if (!strcmp(buffer,"none"))
|
||||
{
|
||||
TRACE("Disable vertex shaders\n");
|
||||
wined3d_settings.vs_mode = VS_NONE;
|
||||
}
|
||||
}
|
||||
if ( !get_config_key( hkey, appkey, "PixelShaderMode", buffer, size) )
|
||||
{
|
||||
if (!strcmp(buffer,"enabled"))
|
||||
{
|
||||
TRACE("Allow pixel shaders\n");
|
||||
wined3d_settings.ps_mode = PS_HW;
|
||||
}
|
||||
if (!strcmp(buffer,"disabled"))
|
||||
{
|
||||
TRACE("Disable pixel shaders\n");
|
||||
wined3d_settings.ps_mode = PS_NONE;
|
||||
}
|
||||
}
|
||||
if ( !get_config_key( hkey, appkey, "UseGLSL", buffer, size) )
|
||||
{
|
||||
if (!strcmp(buffer,"disabled"))
|
||||
|
@ -323,13 +303,13 @@ static BOOL wined3d_dll_init(HINSTANCE hInstDLL)
|
|||
TRACE("Not always rendering backbuffers offscreen.\n");
|
||||
wined3d_settings.always_offscreen = FALSE;
|
||||
}
|
||||
if (!get_config_key_dword(hkey, appkey, "MaxShaderModelVS", &wined3d_settings.max_sm_vs))
|
||||
TRACE("Limiting VS shader model to %u.\n", wined3d_settings.max_sm_vs);
|
||||
if (!get_config_key_dword(hkey, appkey, "MaxShaderModelGS", &wined3d_settings.max_sm_gs))
|
||||
TRACE("Limiting GS shader model to %u.\n", wined3d_settings.max_sm_gs);
|
||||
if (!get_config_key_dword(hkey, appkey, "MaxShaderModelPS", &wined3d_settings.max_sm_ps))
|
||||
TRACE("Limiting PS shader model to %u.\n", wined3d_settings.max_sm_ps);
|
||||
}
|
||||
if (wined3d_settings.vs_mode == VS_HW)
|
||||
TRACE("Allow HW vertex shaders\n");
|
||||
if (wined3d_settings.ps_mode == PS_NONE)
|
||||
TRACE("Disable pixel shaders\n");
|
||||
if (wined3d_settings.glslRequested)
|
||||
TRACE("If supported by your system, GL Shading Language will be used\n");
|
||||
|
||||
if (appkey) RegCloseKey( appkey );
|
||||
if (hkey) RegCloseKey( hkey );
|
||||
|
|
|
@ -237,18 +237,6 @@ static inline float float_24_to_32(DWORD in)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Settings
|
||||
*/
|
||||
#define VS_NONE 0
|
||||
#define VS_HW 1
|
||||
|
||||
#define PS_NONE 0
|
||||
#define PS_HW 1
|
||||
|
||||
#define VBO_NONE 0
|
||||
#define VBO_HW 1
|
||||
|
||||
#define ORM_BACKBUFFER 0
|
||||
#define ORM_FBO 1
|
||||
|
||||
|
@ -262,9 +250,6 @@ static inline float float_24_to_32(DWORD in)
|
|||
* values in wined3d_main.c as well. */
|
||||
struct wined3d_settings
|
||||
{
|
||||
/* vertex and pixel shader modes */
|
||||
int vs_mode;
|
||||
int ps_mode;
|
||||
/* Ideally, we don't want the user to have to request GLSL. If the
|
||||
* hardware supports GLSL, we should use it. However, until it's fully
|
||||
* implemented, we'll leave it as a registry setting for developers. */
|
||||
|
@ -279,6 +264,9 @@ struct wined3d_settings
|
|||
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;
|
||||
};
|
||||
|
||||
extern struct wined3d_settings wined3d_settings DECLSPEC_HIDDEN;
|
||||
|
|
Loading…
Reference in a new issue