Stefan Dösinger : wined3d: Add a shader DLL init callback.

Alexandre Julliard julliard at winehq.org
Tue Mar 25 14:19:58 CDT 2008


Module: wine
Branch: master
Commit: a440051016901da1dc0c945365f1843339c6f600
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=a440051016901da1dc0c945365f1843339c6f600

Author: Stefan Dösinger <stefan at 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;




More information about the wine-cvs mailing list