Module: wine Branch: master Commit: a440051016901da1dc0c945365f1843339c6f600 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a440051016901da1dc0c945365...
Author: Stefan Dösinger stefan@codeweavers.com Date: Sat Mar 22 14:29:50 2008 +0100
wined3d: Add a shader DLL init callback.
---
dlls/wined3d/arb_program_shader.c | 4 ++++ dlls/wined3d/baseshader.c | 2 ++ dlls/wined3d/glsl_shader.c | 3 +++ dlls/wined3d/wined3d_main.c | 4 ++++ dlls/wined3d/wined3d_private.h | 4 ++++ 5 files changed, 17 insertions(+), 0 deletions(-)
diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c index e42a481..8868dac 100644 --- a/dlls/wined3d/arb_program_shader.c +++ b/dlls/wined3d/arb_program_shader.c @@ -2058,6 +2058,9 @@ static void shader_arb_get_caps(WINED3DDEVTYPE devtype, WineD3D_GL_Info *gl_info TRACE_(d3d_caps)("Hardware pixel shader version 1.4 enabled (ARB_PROGRAM)\n"); }
+static void shader_arb_load_init(void) { +} + const shader_backend_t arb_program_shader_backend = { &shader_arb_select, &shader_arb_select_depth_blt, @@ -2072,5 +2075,6 @@ const shader_backend_t arb_program_shader_backend = { &shader_arb_generate_pshader, &shader_arb_generate_vshader, &shader_arb_get_caps, + &shader_arb_load_init, FFPStateTable }; diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c index 1e48194..678b119 100644 --- a/dlls/wined3d/baseshader.c +++ b/dlls/wined3d/baseshader.c @@ -1104,6 +1104,7 @@ static void shader_none_generate_pshader(IWineD3DPixelShader *iface, SHADER_BUFF static void shader_none_generate_vshader(IWineD3DVertexShader *iface, SHADER_BUFFER *buffer) { FIXME("NONE shader backend asked to generate a vertex shader\n"); } +static void shader_none_load_init(void) {}
#define GLINFO_LOCATION (*gl_info) static void shader_none_get_caps(WINED3DDEVTYPE devtype, WineD3D_GL_Info *gl_info, struct shader_caps *pCaps) { @@ -1185,6 +1186,7 @@ const shader_backend_t none_shader_backend = { &shader_none_generate_pshader, &shader_none_generate_vshader, &shader_none_get_caps, + &shader_none_load_init, FFPStateTable };
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index 908f5bd..1b476ed 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -3580,6 +3580,8 @@ static void shader_glsl_get_caps(WINED3DDEVTYPE devtype, WineD3D_GL_Info *gl_inf TRACE_(d3d_caps)("Hardware pixel shader version %d.%d enabled (GLSL)\n", (pCaps->PixelShaderVersion >> 8) & 0xff, pCaps->PixelShaderVersion & 0xff); }
+static void shader_glsl_load_init(void) {} + const shader_backend_t glsl_shader_backend = { &shader_glsl_select, &shader_glsl_select_depth_blt, @@ -3594,5 +3596,6 @@ const shader_backend_t glsl_shader_backend = { &shader_glsl_generate_pshader, &shader_glsl_generate_vshader, &shader_glsl_get_caps, + &shader_glsl_load_init, FFPStateTable }; diff --git a/dlls/wined3d/wined3d_main.c b/dlls/wined3d/wined3d_main.c index 26e7f70..2608604 100644 --- a/dlls/wined3d/wined3d_main.c +++ b/dlls/wined3d/wined3d_main.c @@ -93,6 +93,10 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv) DWORD len; WNDCLASSA wc;
+ glsl_shader_backend.shader_dll_load_init(); + arb_program_shader_backend.shader_dll_load_init(); + none_shader_backend.shader_dll_load_init(); + /* We need our own window class for a fake window which we use to retrieve GL capabilities */ /* We might need CS_OWNDC in the future if we notice strange things on Windows. * Various articles/posts about OpenGL problems on Windows recommend this. */ diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 8628f03..ffd44f6 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -291,6 +291,7 @@ typedef struct { void (*shader_generate_pshader)(IWineD3DPixelShader *iface, SHADER_BUFFER *buffer); void (*shader_generate_vshader)(IWineD3DVertexShader *iface, SHADER_BUFFER *buffer); void (*shader_get_caps)(WINED3DDEVTYPE devtype, WineD3D_GL_Info *gl_info, struct shader_caps *caps); + void (*shader_dll_load_init)(void); const struct StateEntry *StateTable; } shader_backend_t;
@@ -789,6 +790,9 @@ struct IWineD3DDeviceImpl struct list shaders; /* a linked list to track shaders (pixel and vertex) */ unsigned int highest_dirty_ps_const, highest_dirty_vs_const;
+ /* TODO: Move this into the shader model private data */ + struct list fragment_shaders; /* A linked list to track fragment pipeline replacement shaders */ + /* Render Target Support */ IWineD3DSurface **render_targets; IWineD3DSurface *auto_depth_stencil_buffer;