Module: wine Branch: master Commit: 8a7f4279480bcc055248945702e04866e2722ed8 URL: http://source.winehq.org/git/wine.git/?a=commit;h=8a7f4279480bcc055248945702...
Author: H. Verbeet hverbeet@gmail.com Date: Mon Nov 27 20:50:43 2006 +0100
wined3d: Select the right shader backend when creating the device.
---
dlls/wined3d/directx.c | 7 +++++++ dlls/wined3d/drawprim.c | 22 ++++------------------ dlls/wined3d/wined3d_private.h | 1 + 3 files changed, 12 insertions(+), 18 deletions(-)
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index 368f384..5fc22d6 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -2438,6 +2438,13 @@ static HRESULT WINAPI IWineD3DImpl_Crea IWineD3DImpl_FillGLCaps(iface, IWineD3DImpl_GetAdapterDisplay(iface, Adapter)); LEAVE_GL(); select_shader_mode(&This->gl_info, DeviceType, &object->ps_selected_mode, &object->vs_selected_mode); + if (object->ps_selected_mode == SHADER_GLSL || object->vs_selected_mode == SHADER_GLSL) { + object->shader_backend = &glsl_shader_backend; + } else if (object->ps_selected_mode == SHADER_ARB || object->vs_selected_mode == SHADER_ARB) { + object->shader_backend = &arb_program_shader_backend; + } else { + object->shader_backend = &none_shader_backend; + }
/* This function should *not* be modifying GL caps * TODO: move the functionality where it belongs */ diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c index 0c708c3..05e8f78 100644 --- a/dlls/wined3d/drawprim.c +++ b/dlls/wined3d/drawprim.c @@ -1802,18 +1802,10 @@ inline static void drawPrimitiveDrawStri }
/* Make any shaders active */ - if (This->vs_selected_mode == SHADER_GLSL || This->ps_selected_mode == SHADER_GLSL) { - glsl_shader_backend.shader_select(iface, usePixelShaderFunction, useVertexShaderFunction); - } else if (This->vs_selected_mode == SHADER_ARB || This->ps_selected_mode == SHADER_ARB) { - arb_program_shader_backend.shader_select(iface, usePixelShaderFunction, useVertexShaderFunction); - } + This->shader_backend->shader_select(iface, usePixelShaderFunction, useVertexShaderFunction);
/* Load any global constants/uniforms that may have been set by the application */ - if (This->vs_selected_mode == SHADER_GLSL || This->ps_selected_mode == SHADER_GLSL) { - glsl_shader_backend.shader_load_constants(iface, usePixelShaderFunction, useVertexShaderFunction); - } else if (This->vs_selected_mode == SHADER_ARB || This->ps_selected_mode == SHADER_ARB) { - arb_program_shader_backend.shader_load_constants(iface, usePixelShaderFunction, useVertexShaderFunction); - } + This->shader_backend->shader_load_constants(iface, usePixelShaderFunction, useVertexShaderFunction);
/* Draw vertex-by-vertex */ if (useDrawStridedSlow) @@ -1822,11 +1814,7 @@ inline static void drawPrimitiveDrawStri drawStridedFast(iface, numberOfIndicies, glPrimType, idxData, idxSize, minIndex, StartIdx);
/* Cleanup any shaders */ - if (This->vs_selected_mode == SHADER_GLSL || This->ps_selected_mode == SHADER_GLSL) { - glsl_shader_backend.shader_cleanup(usePixelShaderFunction, useVertexShaderFunction); - } else if (This->vs_selected_mode == SHADER_ARB || This->ps_selected_mode == SHADER_ARB) { - arb_program_shader_backend.shader_cleanup(usePixelShaderFunction, useVertexShaderFunction); - } + This->shader_backend->shader_cleanup(usePixelShaderFunction, useVertexShaderFunction);
/* Unload vertex data */ if (useVertexShaderFunction) { @@ -2046,7 +2034,6 @@ static void check_fbo_status(IWineD3DDev
static void depth_blt(IWineD3DDevice *iface, GLuint texture) { IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; - BOOL glsl_mode = This->vs_selected_mode == SHADER_GLSL || This->ps_selected_mode == SHADER_GLSL;
glPushAttrib(GL_ENABLE_BIT | GL_DEPTH_BUFFER_BIT);
@@ -2061,8 +2048,7 @@ static void depth_blt(IWineD3DDevice *if glBindTexture(GL_TEXTURE_2D, texture); glEnable(GL_TEXTURE_2D);
- if (glsl_mode) glsl_shader_backend.shader_select_depth_blt(iface); - else arb_program_shader_backend.shader_select_depth_blt(iface); + This->shader_backend->shader_select_depth_blt(iface);
glBegin(GL_TRIANGLE_STRIP); glVertex2f(-1.0f, -1.0f); diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 8db15e0..0776767 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -515,6 +515,7 @@ typedef struct IWineD3DDeviceImpl /* Selected capabilities */ int vs_selected_mode; int ps_selected_mode; + const shader_backend_t *shader_backend;
/* Optimization */ BOOL modelview_valid;