[PATCH 3/5] wined3d: Store the current render target as an IWineD3DSurfaceImpl pointer in the context.

Henri Verbeet hverbeet at codeweavers.com
Wed Apr 21 15:02:31 CDT 2010


---
 dlls/wined3d/context.c         |   38 +++++++++++++++++++-------------------
 dlls/wined3d/device.c          |    5 ++---
 dlls/wined3d/glsl_shader.c     |    2 +-
 dlls/wined3d/query.c           |   14 ++++++++------
 dlls/wined3d/swapchain.c       |    5 ++---
 dlls/wined3d/wined3d_private.h |    2 +-
 6 files changed, 33 insertions(+), 33 deletions(-)

diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index e3833fc..fdd7ed3 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -620,7 +620,7 @@ void context_resource_released(IWineD3DDevice *iface, IWineD3DResource *resource
                 const struct wined3d_gl_info *gl_info = context->gl_info;
                 struct fbo_entry *entry, *entry2;
 
-                if (context->current_rt == (IWineD3DSurface *)resource) context->current_rt = NULL;
+                if (context->current_rt == (IWineD3DSurfaceImpl *)resource) context->current_rt = NULL;
 
                 LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, &context->fbo_list, struct fbo_entry, entry)
                 {
@@ -1347,7 +1347,7 @@ struct wined3d_context *context_create(IWineD3DSwapChainImpl *swapchain, IWineD3
     }
 
     ret->swapchain = swapchain;
-    ret->current_rt = (IWineD3DSurface *)target;
+    ret->current_rt = target;
     ret->tid = GetCurrentThreadId();
 
     ret->render_offscreen = surface_is_offscreen(target);
@@ -1579,8 +1579,8 @@ static void SetupForBlit(IWineD3DDeviceImpl *This, struct wined3d_context *conte
     int i;
     const struct StateEntry *StateTable = This->StateTable;
     const struct wined3d_gl_info *gl_info = context->gl_info;
-    UINT width = ((IWineD3DSurfaceImpl *)context->current_rt)->currentDesc.Width;
-    UINT height = ((IWineD3DSurfaceImpl *)context->current_rt)->currentDesc.Height;
+    UINT width = context->current_rt->currentDesc.Width;
+    UINT height = context->current_rt->currentDesc.Height;
     DWORD sampler;
 
     TRACE("Setting up context %p for blitting\n", context);
@@ -1822,7 +1822,7 @@ static struct wined3d_context *FindContext(IWineD3DDeviceImpl *This, IWineD3DSur
                 && current_context->current_rt
                 && current_context->swapchain->device == This)
         {
-            target = (IWineD3DSurfaceImpl *)current_context->current_rt;
+            target = current_context->current_rt;
         }
         else
         {
@@ -1832,7 +1832,7 @@ static struct wined3d_context *FindContext(IWineD3DDeviceImpl *This, IWineD3DSur
         }
     }
 
-    if (current_context && (IWineD3DSurfaceImpl *)current_context->current_rt == target)
+    if (current_context && current_context->current_rt == target)
     {
         context_validate(current_context);
         return current_context;
@@ -1875,7 +1875,7 @@ static struct wined3d_context *FindContext(IWineD3DDeviceImpl *This, IWineD3DSur
 static void context_apply_draw_buffer(struct wined3d_context *context, BOOL blit)
 {
     const struct wined3d_gl_info *gl_info = context->gl_info;
-    IWineD3DSurfaceImpl *rt = (IWineD3DSurfaceImpl *)context->current_rt;
+    IWineD3DSurfaceImpl *rt = context->current_rt;
     IWineD3DDeviceImpl *device;
 
     device = rt->resource.device;
@@ -1960,7 +1960,7 @@ static void context_validate_onscreen_formats(IWineD3DDeviceImpl *device, struct
 {
     /* Onscreen surfaces are always in a swapchain */
     IWineD3DSurfaceImpl *depth_stencil = device->depth_stencil;
-    IWineD3DSwapChainImpl *swapchain = (IWineD3DSwapChainImpl *)((IWineD3DSurfaceImpl *)context->current_rt)->container;
+    IWineD3DSwapChainImpl *swapchain = (IWineD3DSwapChainImpl *)context->current_rt->container;
 
     if (!depth_stencil) return;
     if (match_depth_stencil_format(swapchain->ds_format, depth_stencil->resource.format_desc)) return;
@@ -1971,7 +1971,7 @@ static void context_validate_onscreen_formats(IWineD3DDeviceImpl *device, struct
     WARN("Depth stencil format is not supported by WGL, rendering the backbuffer in an FBO\n");
 
     /* The currently active context is the necessary context to access the swapchain's onscreen buffers */
-    IWineD3DSurface_LoadLocation(context->current_rt, SFLAG_INTEXTURE, NULL);
+    IWineD3DSurface_LoadLocation((IWineD3DSurface *)context->current_rt, SFLAG_INTEXTURE, NULL);
     swapchain->render_to_fbo = TRUE;
     context_set_render_offscreen(context, device->StateTable, TRUE);
 }
@@ -2003,11 +2003,11 @@ static void context_apply_state(struct wined3d_context *context, IWineD3DDeviceI
                 if (context->render_offscreen)
                 {
                     FIXME("Activating for CTXUSAGE_BLIT for an offscreen target with ORM_FBO. This should be avoided.\n");
-                    surface_internal_preload(context->current_rt, SRGB_RGB);
+                    surface_internal_preload((IWineD3DSurface *)context->current_rt, SRGB_RGB);
 
                     ENTER_GL();
                     context_bind_fbo(context, GL_FRAMEBUFFER, &context->dst_fbo);
-                    context_attach_surface_fbo(context, GL_FRAMEBUFFER, 0, (IWineD3DSurfaceImpl *)context->current_rt);
+                    context_attach_surface_fbo(context, GL_FRAMEBUFFER, 0, context->current_rt);
                     context_attach_depth_stencil_fbo(context, GL_FRAMEBUFFER, NULL, FALSE);
                     LEAVE_GL();
                 } else {
@@ -2097,7 +2097,7 @@ static void context_setup_target(IWineD3DDeviceImpl *device,
     const struct StateEntry *StateTable = device->StateTable;
 
     if (!target) return;
-    else if ((IWineD3DSurfaceImpl *)context->current_rt == target) return;
+    else if (context->current_rt == target) return;
     render_offscreen = surface_is_offscreen(target);
 
     context_set_render_offscreen(context, StateTable, render_offscreen);
@@ -2110,7 +2110,7 @@ static void context_setup_target(IWineD3DDeviceImpl *device,
     }
     else
     {
-        const struct wined3d_format_desc *old = ((IWineD3DSurfaceImpl *)context->current_rt)->resource.format_desc;
+        const struct wined3d_format_desc *old = context->current_rt->resource.format_desc;
         const struct wined3d_format_desc *new = target->resource.format_desc;
 
         if (old->format != new->format)
@@ -2131,7 +2131,7 @@ static void context_setup_target(IWineD3DDeviceImpl *device,
          * has to be called with the old rendertarget active, otherwise a
          * wrong drawable is read. */
         if (wined3d_settings.offscreen_rendering_mode != ORM_FBO
-                && old_render_offscreen && (IWineD3DSurfaceImpl *)context->current_rt != target)
+                && old_render_offscreen && context->current_rt != target)
         {
             BOOL oldInDraw = device->isInDraw;
 
@@ -2147,23 +2147,23 @@ static void context_setup_target(IWineD3DDeviceImpl *device,
             device->isInDraw = TRUE;
 
             /* Read the back buffer of the old drawable into the destination texture. */
-            if (((IWineD3DSurfaceImpl *)context->current_rt)->texture_name_srgb)
+            if (context->current_rt->texture_name_srgb)
             {
-                surface_internal_preload(context->current_rt, SRGB_BOTH);
+                surface_internal_preload((IWineD3DSurface *)context->current_rt, SRGB_BOTH);
             }
             else
             {
-                surface_internal_preload(context->current_rt, SRGB_RGB);
+                surface_internal_preload((IWineD3DSurface *)context->current_rt, SRGB_RGB);
             }
 
-            IWineD3DSurface_ModifyLocation(context->current_rt, SFLAG_INDRAWABLE, FALSE);
+            IWineD3DSurface_ModifyLocation((IWineD3DSurface *)context->current_rt, SFLAG_INDRAWABLE, FALSE);
 
             device->isInDraw = oldInDraw;
         }
     }
 
     context->draw_buffer_dirty = TRUE;
-    context->current_rt = (IWineD3DSurface *)target;
+    context->current_rt = target;
 }
 
 /*****************************************************************************
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index c2e0511..23e89d2 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -7069,10 +7069,9 @@ void IWineD3DDeviceImpl_MarkStateDirty(IWineD3DDeviceImpl *This, DWORD state) {
 
 void get_drawable_size_fbo(struct wined3d_context *context, UINT *width, UINT *height)
 {
-    IWineD3DSurfaceImpl *surface = (IWineD3DSurfaceImpl *)context->current_rt;
     /* The drawable size of a fbo target is the opengl texture size, which is the power of two size. */
-    *width = surface->pow2Width;
-    *height = surface->pow2Height;
+    *width = context->current_rt->pow2Width;
+    *height = context->current_rt->pow2Height;
 }
 
 void get_drawable_size_backbuffer(struct wined3d_context *context, UINT *width, UINT *height)
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index a04aaa7..db7ccd2 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -807,7 +807,7 @@ static void shader_glsl_load_constants(const struct wined3d_context *context,
                 correction_params[1] = 1.0f;
             } else {
                 /* position is window relative, not viewport relative */
-                correction_params[0] = ((IWineD3DSurfaceImpl *)context->current_rt)->currentDesc.Height;
+                correction_params[0] = context->current_rt->currentDesc.Height;
                 correction_params[1] = -1.0f;
             }
             GL_EXTCALL(glUniform4fvARB(prog->ycorrection_location, 1, correction_params));
diff --git a/dlls/wined3d/query.c b/dlls/wined3d/query.c
index 90cdbd4..7afb370 100644
--- a/dlls/wined3d/query.c
+++ b/dlls/wined3d/query.c
@@ -59,7 +59,7 @@ enum wined3d_event_query_result wined3d_event_query_test(struct wined3d_event_qu
         return WINED3D_EVENT_QUERY_WRONG_THREAD;
     }
 
-    context = context_acquire(device, query->context->current_rt, CTXUSAGE_RESOURCELOAD);
+    context = context_acquire(device, (IWineD3DSurface *)query->context->current_rt, CTXUSAGE_RESOURCELOAD);
     gl_info = context->gl_info;
 
     ENTER_GL();
@@ -136,7 +136,7 @@ enum wined3d_event_query_result wined3d_event_query_finish(struct wined3d_event_
         return WINED3D_EVENT_QUERY_WRONG_THREAD;
     }
 
-    context = context_acquire(device, query->context->current_rt, CTXUSAGE_RESOURCELOAD);
+    context = context_acquire(device, (IWineD3DSurface *)query->context->current_rt, CTXUSAGE_RESOURCELOAD);
 
     ENTER_GL();
     if (gl_info->supported[ARB_SYNC])
@@ -195,7 +195,7 @@ void wined3d_event_query_issue(struct wined3d_event_query *query, IWineD3DDevice
         }
         else
         {
-            context = context_acquire(device, query->context->current_rt, CTXUSAGE_RESOURCELOAD);
+            context = context_acquire(device, (IWineD3DSurface *)query->context->current_rt, CTXUSAGE_RESOURCELOAD);
         }
     }
     else
@@ -348,7 +348,7 @@ static HRESULT  WINAPI IWineD3DOcclusionQueryImpl_GetData(IWineD3DQuery* iface,
         return S_OK;
     }
 
-    context = context_acquire(This->device, query->context->current_rt, CTXUSAGE_RESOURCELOAD);
+    context = context_acquire(This->device, (IWineD3DSurface *)query->context->current_rt, CTXUSAGE_RESOURCELOAD);
 
     ENTER_GL();
 
@@ -490,7 +490,8 @@ static HRESULT  WINAPI IWineD3DOcclusionQueryImpl_Issue(IWineD3DQuery* iface,  D
                 }
                 else
                 {
-                    context = context_acquire(This->device, query->context->current_rt, CTXUSAGE_RESOURCELOAD);
+                    context = context_acquire(This->device, (IWineD3DSurface *)query->context->current_rt,
+                            CTXUSAGE_RESOURCELOAD);
 
                     ENTER_GL();
                     GL_EXTCALL(glEndQueryARB(GL_SAMPLES_PASSED_ARB));
@@ -525,7 +526,8 @@ static HRESULT  WINAPI IWineD3DOcclusionQueryImpl_Issue(IWineD3DQuery* iface,  D
                 }
                 else
                 {
-                    context = context_acquire(This->device, query->context->current_rt, CTXUSAGE_RESOURCELOAD);
+                    context = context_acquire(This->device, (IWineD3DSurface *)query->context->current_rt,
+                            CTXUSAGE_RESOURCELOAD);
 
                     ENTER_GL();
                     GL_EXTCALL(glEndQueryARB(GL_SAMPLES_PASSED_ARB));
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index 02e6bf7..3d4dab8 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -957,9 +957,8 @@ struct wined3d_context *swapchain_create_context_for_thread(IWineD3DSwapChain *i
 
 void get_drawable_size_swapchain(struct wined3d_context *context, UINT *width, UINT *height)
 {
-    IWineD3DSurfaceImpl *surface = (IWineD3DSurfaceImpl *)context->current_rt;
     /* The drawable size of an onscreen drawable is the surface size.
      * (Actually: The window size, but the surface is created in window size) */
-    *width = surface->currentDesc.Width;
-    *height = surface->currentDesc.Height;
+    *width = context->current_rt->currentDesc.Width;
+    *height = context->current_rt->currentDesc.Height;
 }
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 1972d21..b07baf7 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1054,7 +1054,7 @@ struct wined3d_context
     DWORD isStateDirty[STATE_HIGHEST / (sizeof(DWORD) * CHAR_BIT) + 1]; /* Bitmap to find out quickly if a state is dirty */
 
     IWineD3DSwapChainImpl *swapchain;
-    IWineD3DSurface *current_rt;
+    IWineD3DSurfaceImpl *current_rt;
     DWORD                   tid;    /* Thread ID which owns this context at the moment */
 
     /* Stores some information about the context state for optimization */
-- 
1.6.4.4




More information about the wine-patches mailing list