[PATCH 4/4] wined3d: Pass an IWineD3DBaseTextureImpl pointer to internal_preload().

Henri Verbeet hverbeet at codeweavers.com
Mon Jan 3 11:51:41 CST 2011


---
 dlls/wined3d/cubetexture.c     |   33 ++++++++++++++++-----------------
 dlls/wined3d/device.c          |    5 +++--
 dlls/wined3d/surface.c         |    4 ++--
 dlls/wined3d/texture.c         |   33 ++++++++++++++++-----------------
 dlls/wined3d/volumetexture.c   |   37 ++++++++++++++++++-------------------
 dlls/wined3d/wined3d_private.h |    3 ++-
 6 files changed, 57 insertions(+), 58 deletions(-)

diff --git a/dlls/wined3d/cubetexture.c b/dlls/wined3d/cubetexture.c
index 70fca05..f4b438e 100644
--- a/dlls/wined3d/cubetexture.c
+++ b/dlls/wined3d/cubetexture.c
@@ -28,17 +28,17 @@
 WINE_DEFAULT_DEBUG_CHANNEL(d3d_texture);
 
 /* Do not call while under the GL lock. */
-static void cubetexture_internal_preload(IWineD3DBaseTexture *iface, enum WINED3DSRGB srgb)
+static void cubetexture_internal_preload(IWineD3DBaseTextureImpl *texture, enum WINED3DSRGB srgb)
 {
-    /* Override the IWineD3DResource Preload method. */
-    IWineD3DCubeTextureImpl *This = (IWineD3DCubeTextureImpl *)iface;
-    UINT sub_count = This->baseTexture.level_count * This->baseTexture.layer_count;
-    IWineD3DDeviceImpl *device = This->resource.device;
+    UINT sub_count = texture->baseTexture.level_count * texture->baseTexture.layer_count;
+    IWineD3DDeviceImpl *device = texture->resource.device;
     struct wined3d_context *context = NULL;
     BOOL srgb_mode;
     BOOL *dirty;
     UINT i;
 
+    TRACE("texture %p, srgb %#x.\n", texture, srgb);
+
     switch (srgb)
     {
         case SRGB_RGB:
@@ -46,7 +46,7 @@ static void cubetexture_internal_preload(IWineD3DBaseTexture *iface, enum WINED3
             break;
 
         case SRGB_BOTH:
-            cubetexture_internal_preload(iface, SRGB_RGB);
+            cubetexture_internal_preload(texture, SRGB_RGB);
             /* Fallthrough */
 
         case SRGB_SRGB:
@@ -54,12 +54,10 @@ static void cubetexture_internal_preload(IWineD3DBaseTexture *iface, enum WINED3
             break;
 
         default:
-            srgb_mode = This->baseTexture.is_srgb;
+            srgb_mode = texture->baseTexture.is_srgb;
             break;
     }
-    dirty = srgb_mode ? &This->baseTexture.texture_srgb.dirty : &This->baseTexture.texture_rgb.dirty;
-
-    TRACE("(%p) : About to load texture: dirtified(%u).\n", This, *dirty);
+    dirty = srgb_mode ? &texture->baseTexture.texture_srgb.dirty : &texture->baseTexture.texture_rgb.dirty;
 
     /* We only have to activate a context for gl when we're not drawing.
      * In most cases PreLoad will be called during draw and a context was
@@ -71,12 +69,12 @@ static void cubetexture_internal_preload(IWineD3DBaseTexture *iface, enum WINED3
         context = context_acquire(device, NULL);
     }
 
-    if (This->resource.format->id == WINED3DFMT_P8_UINT
-            || This->resource.format->id == WINED3DFMT_P8_UINT_A8_UNORM)
+    if (texture->resource.format->id == WINED3DFMT_P8_UINT
+            || texture->resource.format->id == WINED3DFMT_P8_UINT_A8_UNORM)
     {
         for (i = 0; i < sub_count; ++i)
         {
-            IWineD3DSurfaceImpl *surface = (IWineD3DSurfaceImpl *)This->baseTexture.sub_resources[i];
+            IWineD3DSurfaceImpl *surface = (IWineD3DSurfaceImpl *)texture->baseTexture.sub_resources[i];
 
             if (palette9_changed(surface))
             {
@@ -96,12 +94,12 @@ static void cubetexture_internal_preload(IWineD3DBaseTexture *iface, enum WINED3
     {
         for (i = 0; i < sub_count; ++i)
         {
-            IWineD3DSurface_LoadTexture((IWineD3DSurface *)This->baseTexture.sub_resources[i], srgb_mode);
+            IWineD3DSurface_LoadTexture((IWineD3DSurface *)texture->baseTexture.sub_resources[i], srgb_mode);
         }
     }
     else
     {
-        TRACE("(%p) Texture not dirty, nothing to do.\n" , iface);
+        TRACE("Texture %p not dirty, nothing to do.\n" , texture);
     }
 
     /* No longer dirty. */
@@ -203,8 +201,9 @@ static DWORD WINAPI IWineD3DCubeTextureImpl_GetPriority(IWineD3DCubeTexture *ifa
 }
 
 /* Do not call while under the GL lock. */
-static void WINAPI IWineD3DCubeTextureImpl_PreLoad(IWineD3DCubeTexture *iface) {
-    cubetexture_internal_preload((IWineD3DBaseTexture *) iface, SRGB_ANY);
+static void WINAPI IWineD3DCubeTextureImpl_PreLoad(IWineD3DCubeTexture *iface)
+{
+    cubetexture_internal_preload((IWineD3DBaseTextureImpl *)iface, SRGB_ANY);
 }
 
 /* Do not call while under the GL lock. */
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 0789ed9..1f9d877 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -460,7 +460,7 @@ static void device_preload_texture(const struct wined3d_state *state, unsigned i
 
     if (!(texture = state->textures[idx])) return;
     srgb = state->sampler_states[idx][WINED3DSAMP_SRGBTEXTURE] ? SRGB_SRGB : SRGB_RGB;
-    texture->baseTexture.internal_preload((IWineD3DBaseTexture *)texture, srgb);
+    texture->baseTexture.internal_preload(texture, srgb);
 }
 
 void device_preload_textures(IWineD3DDeviceImpl *device)
@@ -5062,7 +5062,8 @@ static HRESULT WINAPI IWineD3DDeviceImpl_UpdateTexture(IWineD3DDevice *iface,
     }
 
     /* Make sure that the destination texture is loaded. */
-    ((IWineD3DBaseTextureImpl *)dst_texture)->baseTexture.internal_preload(dst_texture, SRGB_RGB);
+    ((IWineD3DBaseTextureImpl *)dst_texture)->baseTexture.internal_preload(
+            (IWineD3DBaseTextureImpl *)dst_texture, SRGB_RGB);
 
     /* Update every surface level of the texture. */
     switch (type)
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 6b5258b..278eb5e 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -1071,8 +1071,8 @@ void surface_internal_preload(IWineD3DSurfaceImpl *surface, enum WINED3DSRGB srg
     {
         IWineD3DBaseTextureImpl *texture = surface->container.u.texture;
 
-        TRACE("Passing to container.\n");
-        texture->baseTexture.internal_preload((IWineD3DBaseTexture *)texture, srgb);
+        TRACE("Passing to container (%p).\n", texture);
+        texture->baseTexture.internal_preload(texture, srgb);
     }
     else
     {
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index da0e175..083d389 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -28,17 +28,15 @@
 WINE_DEFAULT_DEBUG_CHANNEL(d3d_texture);
 
 /* Do not call while under the GL lock. */
-static void texture_internal_preload(IWineD3DBaseTexture *iface, enum WINED3DSRGB srgb)
+static void texture_internal_preload(IWineD3DBaseTextureImpl *texture, enum WINED3DSRGB srgb)
 {
-    /* Override the IWineD3DResource PreLoad method. */
-    IWineD3DTextureImpl *This = (IWineD3DTextureImpl *)iface;
-    IWineD3DDeviceImpl *device = This->resource.device;
+    IWineD3DDeviceImpl *device = texture->resource.device;
     struct wined3d_context *context = NULL;
     unsigned int i;
     BOOL srgb_mode;
     BOOL *dirty;
 
-    TRACE("(%p) : About to load texture.\n", This);
+    TRACE("texture %p, srgb %#x.\n", texture, srgb);
 
     switch (srgb)
     {
@@ -47,7 +45,7 @@ static void texture_internal_preload(IWineD3DBaseTexture *iface, enum WINED3DSRG
             break;
 
         case SRGB_BOTH:
-            texture_internal_preload(iface, SRGB_RGB);
+            texture_internal_preload(texture, SRGB_RGB);
             /* Fallthrough */
 
         case SRGB_SRGB:
@@ -55,10 +53,10 @@ static void texture_internal_preload(IWineD3DBaseTexture *iface, enum WINED3DSRG
             break;
 
         default:
-            srgb_mode = This->baseTexture.is_srgb;
+            srgb_mode = texture->baseTexture.is_srgb;
             break;
     }
-    dirty = srgb_mode ? &This->baseTexture.texture_srgb.dirty : &This->baseTexture.texture_rgb.dirty;
+    dirty = srgb_mode ? &texture->baseTexture.texture_srgb.dirty : &texture->baseTexture.texture_rgb.dirty;
 
     if (!device->isInDraw)
     {
@@ -67,12 +65,12 @@ static void texture_internal_preload(IWineD3DBaseTexture *iface, enum WINED3DSRG
         context = context_acquire(device, NULL);
     }
 
-    if (This->resource.format->id == WINED3DFMT_P8_UINT
-            || This->resource.format->id == WINED3DFMT_P8_UINT_A8_UNORM)
+    if (texture->resource.format->id == WINED3DFMT_P8_UINT
+            || texture->resource.format->id == WINED3DFMT_P8_UINT_A8_UNORM)
     {
-        for (i = 0; i < This->baseTexture.level_count; ++i)
+        for (i = 0; i < texture->baseTexture.level_count; ++i)
         {
-            IWineD3DSurfaceImpl *surface = (IWineD3DSurfaceImpl *)This->baseTexture.sub_resources[i];
+            IWineD3DSurfaceImpl *surface = (IWineD3DSurfaceImpl *)texture->baseTexture.sub_resources[i];
             if (palette9_changed(surface))
             {
                 TRACE("Reloading surface because the d3d8/9 palette was changed.\n");
@@ -88,14 +86,14 @@ static void texture_internal_preload(IWineD3DBaseTexture *iface, enum WINED3DSRG
      * since the last load then reload the surfaces. */
     if (*dirty)
     {
-        for (i = 0; i < This->baseTexture.level_count; ++i)
+        for (i = 0; i < texture->baseTexture.level_count; ++i)
         {
-            IWineD3DSurface_LoadTexture((IWineD3DSurface *)This->baseTexture.sub_resources[i], srgb_mode);
+            IWineD3DSurface_LoadTexture((IWineD3DSurface *)texture->baseTexture.sub_resources[i], srgb_mode);
         }
     }
     else
     {
-        TRACE("(%p) Texture not dirty, nothing to do.\n", iface);
+        TRACE("Texture %p not dirty, nothing to do.\n", texture);
     }
 
     if (context) context_release(context);
@@ -198,8 +196,9 @@ static DWORD WINAPI IWineD3DTextureImpl_GetPriority(IWineD3DTexture *iface) {
 }
 
 /* Do not call while under the GL lock. */
-static void WINAPI IWineD3DTextureImpl_PreLoad(IWineD3DTexture *iface) {
-    texture_internal_preload((IWineD3DBaseTexture *) iface, SRGB_ANY);
+static void WINAPI IWineD3DTextureImpl_PreLoad(IWineD3DTexture *iface)
+{
+    texture_internal_preload((IWineD3DBaseTextureImpl *)iface, SRGB_ANY);
 }
 
 /* Do not call while under the GL lock. */
diff --git a/dlls/wined3d/volumetexture.c b/dlls/wined3d/volumetexture.c
index 23694df..03410dc 100644
--- a/dlls/wined3d/volumetexture.c
+++ b/dlls/wined3d/volumetexture.c
@@ -27,55 +27,53 @@
 WINE_DEFAULT_DEBUG_CHANNEL(d3d_texture);
 
 /* Do not call while under the GL lock. */
-static void volumetexture_internal_preload(IWineD3DBaseTexture *iface, enum WINED3DSRGB srgb)
+static void volumetexture_internal_preload(IWineD3DBaseTextureImpl *texture, enum WINED3DSRGB srgb)
 {
-    /* Override the IWineD3DResource Preload method. */
-    IWineD3DVolumeTextureImpl *This = (IWineD3DVolumeTextureImpl *)iface;
-    IWineD3DDeviceImpl *device = This->resource.device;
+    IWineD3DDeviceImpl *device = texture->resource.device;
     const struct wined3d_gl_info *gl_info = &device->adapter->gl_info;
     struct wined3d_context *context = NULL;
-    BOOL srgb_mode = This->baseTexture.is_srgb;
+    BOOL srgb_mode = texture->baseTexture.is_srgb;
     BOOL srgb_was_toggled = FALSE;
     unsigned int i;
 
-    TRACE("(%p) : About to load texture.\n", This);
+    TRACE("texture %p, srgb %#x.\n", texture, srgb);
 
     if (!device->isInDraw) context = context_acquire(device, NULL);
-    else if (gl_info->supported[EXT_TEXTURE_SRGB] && This->baseTexture.bindCount > 0)
+    else if (gl_info->supported[EXT_TEXTURE_SRGB] && texture->baseTexture.bindCount > 0)
     {
-        srgb_mode = device->stateBlock->state.sampler_states[This->baseTexture.sampler][WINED3DSAMP_SRGBTEXTURE];
-        srgb_was_toggled = This->baseTexture.is_srgb != srgb_mode;
-        This->baseTexture.is_srgb = srgb_mode;
+        srgb_mode = device->stateBlock->state.sampler_states[texture->baseTexture.sampler][WINED3DSAMP_SRGBTEXTURE];
+        srgb_was_toggled = texture->baseTexture.is_srgb != srgb_mode;
+        texture->baseTexture.is_srgb = srgb_mode;
     }
 
     /* If the texture is marked dirty or the srgb sampler setting has changed
      * since the last load then reload the volumes. */
-    if (This->baseTexture.texture_rgb.dirty)
+    if (texture->baseTexture.texture_rgb.dirty)
     {
-        for (i = 0; i < This->baseTexture.level_count; ++i)
+        for (i = 0; i < texture->baseTexture.level_count; ++i)
         {
-            IWineD3DVolume *volume = (IWineD3DVolume *)This->baseTexture.sub_resources[i];
+            IWineD3DVolume *volume = (IWineD3DVolume *)texture->baseTexture.sub_resources[i];
             IWineD3DVolume_LoadTexture(volume, i, srgb_mode);
         }
     }
     else if (srgb_was_toggled)
     {
-        for (i = 0; i < This->baseTexture.level_count; ++i)
+        for (i = 0; i < texture->baseTexture.level_count; ++i)
         {
-            IWineD3DVolume *volume = (IWineD3DVolume *)This->baseTexture.sub_resources[i];
+            IWineD3DVolume *volume = (IWineD3DVolume *)texture->baseTexture.sub_resources[i];
             volume_add_dirty_box(volume, NULL);
             IWineD3DVolume_LoadTexture(volume, i, srgb_mode);
         }
     }
     else
     {
-        TRACE("(%p) Texture not dirty, nothing to do.\n", iface);
+        TRACE("Texture %p not dirty, nothing to do.\n", texture);
     }
 
     if (context) context_release(context);
 
     /* No longer dirty */
-    This->baseTexture.texture_rgb.dirty = FALSE;
+    texture->baseTexture.texture_rgb.dirty = FALSE;
 }
 
 static void volumetexture_cleanup(IWineD3DVolumeTextureImpl *This)
@@ -165,8 +163,9 @@ static DWORD WINAPI IWineD3DVolumeTextureImpl_GetPriority(IWineD3DVolumeTexture
     return resource_get_priority((IWineD3DResource *)iface);
 }
 
-static void WINAPI IWineD3DVolumeTextureImpl_PreLoad(IWineD3DVolumeTexture *iface) {
-    volumetexture_internal_preload((IWineD3DBaseTexture *) iface, SRGB_ANY);
+static void WINAPI IWineD3DVolumeTextureImpl_PreLoad(IWineD3DVolumeTexture *iface)
+{
+    volumetexture_internal_preload((IWineD3DBaseTextureImpl *)iface, SRGB_ANY);
 }
 
 /* Do not call while under the GL lock. */
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 98823db..aa43df6 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -58,6 +58,7 @@ typedef struct IWineD3DPaletteImpl    IWineD3DPaletteImpl;
 typedef struct IWineD3DDeviceImpl     IWineD3DDeviceImpl;
 typedef struct IWineD3DSwapChainImpl  IWineD3DSwapChainImpl;
 struct IWineD3DBaseShaderImpl;
+struct IWineD3DBaseTextureImpl;
 
 /* Texture format fixups */
 
@@ -1897,7 +1898,7 @@ typedef struct IWineD3DBaseTextureClass
     const struct min_lookup *minMipLookup;
     const GLenum            *magLookup;
     GLenum target;
-    void                    (*internal_preload)(IWineD3DBaseTexture *iface, enum WINED3DSRGB srgb);
+    void                    (*internal_preload)(struct IWineD3DBaseTextureImpl *texture, enum WINED3DSRGB srgb);
 } IWineD3DBaseTextureClass;
 
 typedef struct IWineD3DBaseTextureImpl
-- 
1.7.2.2




More information about the wine-patches mailing list