=?UTF-8?Q?Stefan=20D=C3=B6singer=20?=: wined3d: Add per-context private data for fragment pipelines.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Mar 24 10:00:45 CDT 2015


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

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Mon Mar 23 18:59:09 2015 +0100

wined3d: Add per-context private data for fragment pipelines.

---

 dlls/wined3d/arb_program_shader.c    | 11 +++++++++++
 dlls/wined3d/ati_fragment_shader.c   | 11 +++++++++++
 dlls/wined3d/context.c               |  7 +++++++
 dlls/wined3d/glsl_shader.c           | 11 +++++++++++
 dlls/wined3d/nvidia_texture_shader.c | 14 ++++++++++++++
 dlls/wined3d/state.c                 | 13 +++++++++++++
 dlls/wined3d/wined3d_private.h       |  3 +++
 7 files changed, 70 insertions(+)

diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c
index aa9dc76..747836c 100644
--- a/dlls/wined3d/arb_program_shader.c
+++ b/dlls/wined3d/arb_program_shader.c
@@ -6789,11 +6789,22 @@ static const struct StateEntryTemplate arbfp_fragmentstate_template[] =
     {0 /* Terminate */,                                   { 0,                                                  0                       }, WINED3D_GL_EXT_NONE             },
 };
 
+static BOOL arbfp_alloc_context_data(struct wined3d_context *context)
+{
+    return TRUE;
+}
+
+static void arbfp_free_context_data(struct wined3d_context *context)
+{
+}
+
 const struct fragment_pipeline arbfp_fragment_pipeline = {
     arbfp_enable,
     arbfp_get_caps,
     arbfp_alloc,
     arbfp_free,
+    arbfp_alloc_context_data,
+    arbfp_free_context_data,
     shader_arb_color_fixup_supported,
     arbfp_fragmentstate_template,
 };
diff --git a/dlls/wined3d/ati_fragment_shader.c b/dlls/wined3d/ati_fragment_shader.c
index afe7158..ee3e90b 100644
--- a/dlls/wined3d/ati_fragment_shader.c
+++ b/dlls/wined3d/ati_fragment_shader.c
@@ -1249,11 +1249,22 @@ static BOOL atifs_color_fixup_supported(struct color_fixup_desc fixup)
     return FALSE;
 }
 
+static BOOL atifs_alloc_context_data(struct wined3d_context *context)
+{
+    return TRUE;
+}
+
+static void atifs_free_context_data(struct wined3d_context *context)
+{
+}
+
 const struct fragment_pipeline atifs_fragment_pipeline = {
     atifs_enable,
     atifs_get_caps,
     atifs_alloc,
     atifs_free,
+    atifs_alloc_context_data,
+    atifs_free_context_data,
     atifs_color_fixup_supported,
     atifs_fragmentstate_template,
 };
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index f875006..1d7cf9c 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -1447,6 +1447,11 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain,
         ERR("Failed to allocate shader backend context data.\n");
         goto out;
     }
+    if (!device->adapter->fragment_pipe->allocate_context_data(ret))
+    {
+        ERR("Failed to allocate fragment pipeline context data.\n");
+        goto out;
+    }
 
     /* Initialize the texture unit mapping to a 1:1 mapping */
     for (s = 0; s < MAX_COMBINED_SAMPLERS; ++s)
@@ -1764,6 +1769,7 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain,
 
 out:
     device->shader_backend->shader_free_context_data(ret);
+    device->adapter->fragment_pipe->free_context_data(ret);
     HeapFree(GetProcessHeap(), 0, ret->free_event_queries);
     HeapFree(GetProcessHeap(), 0, ret->free_occlusion_queries);
     HeapFree(GetProcessHeap(), 0, ret->free_timestamp_queries);
@@ -1797,6 +1803,7 @@ void context_destroy(struct wined3d_device *device, struct wined3d_context *cont
     }
 
     device->shader_backend->shader_free_context_data(context);
+    device->adapter->fragment_pipe->free_context_data(context);
     HeapFree(GetProcessHeap(), 0, context->draw_buffers);
     HeapFree(GetProcessHeap(), 0, context->blit_targets);
     device_context_remove(device, context);
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 6e3b535..0fa8308 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -7539,12 +7539,23 @@ static const struct StateEntryTemplate glsl_fragment_pipe_state_template[] =
     {0 /* Terminate */,                                         {0,                                                          0                                      }, WINED3D_GL_EXT_NONE },
 };
 
+static BOOL glsl_fragment_pipe_alloc_context_data(struct wined3d_context *context)
+{
+    return TRUE;
+}
+
+static void glsl_fragment_pipe_free_context_data(struct wined3d_context *context)
+{
+}
+
 const struct fragment_pipeline glsl_fragment_pipe =
 {
     glsl_fragment_pipe_enable,
     glsl_fragment_pipe_get_caps,
     glsl_fragment_pipe_alloc,
     glsl_fragment_pipe_free,
+    glsl_fragment_pipe_alloc_context_data,
+    glsl_fragment_pipe_free_context_data,
     shader_glsl_color_fixup_supported,
     glsl_fragment_pipe_state_template,
 };
diff --git a/dlls/wined3d/nvidia_texture_shader.c b/dlls/wined3d/nvidia_texture_shader.c
index 136e7f7..516b8af 100644
--- a/dlls/wined3d/nvidia_texture_shader.c
+++ b/dlls/wined3d/nvidia_texture_shader.c
@@ -906,11 +906,23 @@ static const struct StateEntryTemplate nvrc_fragmentstate_template[] =
     {0 /* Terminate */,                                   { 0,                                                  0                   }, WINED3D_GL_EXT_NONE             },
 };
 
+static BOOL nvrc_context_alloc(struct wined3d_context *context)
+{
+    return TRUE;
+}
+
+static void nvrc_context_free(struct wined3d_context *context)
+{
+}
+
+
 const struct fragment_pipeline nvts_fragment_pipeline = {
     nvts_enable,
     nvrc_fragment_get_caps,
     nvrc_fragment_alloc,
     nvrc_fragment_free,
+    nvrc_context_alloc,
+    nvrc_context_free,
     nvts_color_fixup_supported,
     nvrc_fragmentstate_template,
 };
@@ -920,6 +932,8 @@ const struct fragment_pipeline nvrc_fragment_pipeline = {
     nvrc_fragment_get_caps,
     nvrc_fragment_alloc,
     nvrc_fragment_free,
+    nvrc_context_alloc,
+    nvrc_context_free,
     nvts_color_fixup_supported,
     nvrc_fragmentstate_template,
 };
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index 4118f69..a949077 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -5793,11 +5793,22 @@ static BOOL ffp_color_fixup_supported(struct color_fixup_desc fixup)
     return FALSE;
 }
 
+static BOOL ffp_none_context_alloc(struct wined3d_context *context)
+{
+    return TRUE;
+}
+
+static void ffp_none_context_free(struct wined3d_context *context)
+{
+}
+
 const struct fragment_pipeline ffp_fragment_pipeline = {
     ffp_enable,
     ffp_fragment_get_caps,
     ffp_alloc,
     ffp_free,
+    ffp_none_context_alloc,
+    ffp_none_context_free,
     ffp_color_fixup_supported,
     ffp_fragmentstate_template,
 };
@@ -5841,6 +5852,8 @@ const struct fragment_pipeline none_fragment_pipe =
     fp_none_get_caps,
     none_alloc,
     none_free,
+    ffp_none_context_alloc,
+    ffp_none_context_free,
     fp_none_color_fixup_supported,
     NULL,
 };
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 99d7aed..c88f9b1 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1190,6 +1190,7 @@ struct wined3d_context
     GLint                   aux_buffers;
 
     void *shader_backend_data;
+    void *fragment_pipe_data;
 
     /* FBOs */
     UINT                    fbo_entry_count;
@@ -1273,6 +1274,8 @@ struct fragment_pipeline
     void (*get_caps)(const struct wined3d_gl_info *gl_info, struct fragment_caps *caps);
     void *(*alloc_private)(const struct wined3d_shader_backend_ops *shader_backend, void *shader_priv);
     void (*free_private)(struct wined3d_device *device);
+    BOOL (*allocate_context_data)(struct wined3d_context *context);
+    void (*free_context_data)(struct wined3d_context *context);
     BOOL (*color_fixup_supported)(struct color_fixup_desc fixup);
     const struct StateEntryTemplate *states;
 };




More information about the wine-cvs mailing list