[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