Module: wine Branch: master Commit: 0122cee51f1ab01601abf2b2b4e15d6f54fdaffe URL: http://source.winehq.org/git/wine.git/?a=commit;h=0122cee51f1ab01601abf2b2b4...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Thu Apr 29 23:41:30 2010 +0200
wined3d: Make sure all fields of the shader backend caps are always initialized.
---
dlls/wined3d/arb_program_shader.c | 16 +++++++++++----- dlls/wined3d/device.c | 1 - dlls/wined3d/directx.c | 1 - dlls/wined3d/shader.c | 3 +++ 4 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c index 5529f92..3852847 100644 --- a/dlls/wined3d/arb_program_shader.c +++ b/dlls/wined3d/arb_program_shader.c @@ -4667,11 +4667,6 @@ static void shader_arb_get_caps(const struct wined3d_gl_info *gl_info, struct sh DWORD vs_consts = min(gl_info->limits.arb_vs_float_constants, gl_info->limits.arb_vs_native_constants); DWORD ps_consts = min(gl_info->limits.arb_ps_float_constants, gl_info->limits.arb_ps_native_constants);
- /* We don't have an ARB fixed function pipeline yet, so let the none backend set its caps, - * then overwrite the shader specific ones - */ - none_shader_backend.shader_get_caps(gl_info, pCaps); - if (gl_info->supported[ARB_VERTEX_PROGRAM]) { if (gl_info->supported[NV_VERTEX_PROGRAM3]) @@ -4692,6 +4687,11 @@ static void shader_arb_get_caps(const struct wined3d_gl_info *gl_info, struct sh } pCaps->MaxVertexShaderConst = vs_consts; } + else + { + pCaps->VertexShaderVersion = 0; + pCaps->MaxVertexShaderConst = 0; + }
if (gl_info->supported[ARB_FRAGMENT_PROGRAM]) { @@ -4714,6 +4714,12 @@ static void shader_arb_get_caps(const struct wined3d_gl_info *gl_info, struct sh pCaps->PixelShader1xMaxValue = 8.0f; pCaps->MaxPixelShaderConst = ps_consts; } + else + { + pCaps->PixelShaderVersion = 0; + pCaps->PixelShader1xMaxValue = 0.0f; + pCaps->MaxPixelShaderConst = 0; + }
pCaps->VSClipping = use_nv_clip(gl_info); } diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 463ccbf..0c7b4a1 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -7086,7 +7086,6 @@ HRESULT device_init(IWineD3DDeviceImpl *device, IWineD3DImpl *wined3d, select_shader_mode(&adapter->gl_info, &device->ps_selected_mode, &device->vs_selected_mode); device->shader_backend = adapter->shader_backend;
- memset(&shader_caps, 0, sizeof(shader_caps)); device->shader_backend->shader_get_caps(&adapter->gl_info, &shader_caps); device->d3d_vshader_constantF = shader_caps.MaxVertexShaderConst; device->d3d_pshader_constantF = shader_caps.MaxPixelShaderConst; diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index 08dcafd..b884a01 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -4542,7 +4542,6 @@ static HRESULT WINAPI IWineD3DImpl_GetDeviceCaps(IWineD3D *iface, UINT Adapter, WINED3DPTFILTERCAPS_MAGFLINEAR; pCaps->VertexTextureFilterCaps = 0;
- memset(&shader_caps, 0, sizeof(shader_caps)); adapter->shader_backend->shader_get_caps(&adapter->gl_info, &shader_caps); adapter->fragment_pipe->get_caps(&adapter->gl_info, &fragment_caps);
diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c index b015178..28228e1 100644 --- a/dlls/wined3d/shader.c +++ b/dlls/wined3d/shader.c @@ -1418,8 +1418,11 @@ static void shader_none_get_caps(const struct wined3d_gl_info *gl_info, struct s { /* Set the shader caps to 0 for the none shader backend */ caps->VertexShaderVersion = 0; + caps->MaxVertexShaderConst = 0; caps->PixelShaderVersion = 0; caps->PixelShader1xMaxValue = 0.0f; + caps->MaxPixelShaderConst = 0; + caps->VSClipping = FALSE; }
static BOOL shader_none_color_fixup_supported(struct color_fixup_desc fixup)