[PATCH 4/5] wined3d: Merge surface_bind_and_dirtify() and volume_bind_and_dirtify() into wined3d_texture_bind_and_dirtify().
Henri Verbeet
hverbeet at codeweavers.com
Wed Nov 20 17:10:20 CST 2013
---
dlls/wined3d/surface.c | 34 ++++++----------------------------
dlls/wined3d/texture.c | 22 ++++++++++++++++++++++
dlls/wined3d/volume.c | 36 +++++++-----------------------------
dlls/wined3d/wined3d_private.h | 2 ++
4 files changed, 37 insertions(+), 57 deletions(-)
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index a3877ce..8f383a6 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -594,28 +594,6 @@ static void surface_evict_sysmem(struct wined3d_surface *surface)
surface_invalidate_location(surface, SFLAG_INSYSMEM);
}
-/* Context activation is done by the caller. */
-static void surface_bind_and_dirtify(struct wined3d_surface *surface,
- struct wined3d_context *context, BOOL srgb)
-{
- DWORD active_sampler;
-
- /* We don't need a specific texture unit, but after binding the texture
- * the current unit is dirty. Read the unit back instead of switching to
- * 0, this avoids messing around with the state manager's GL states. The
- * current texture unit should always be a valid one.
- *
- * To be more specific, this is tricky because we can implicitly be
- * called from sampler() in state.c. This means we can't touch anything
- * other than whatever happens to be the currently active texture, or we
- * would risk marking already applied sampler states dirty again. */
- active_sampler = context->rev_tex_unit_map[context->active_texture];
-
- if (active_sampler != WINED3D_UNMAPPED_STAGE)
- context_invalidate_state(context, STATE_SAMPLER(active_sampler));
- wined3d_texture_bind(surface->container, context, srgb);
-}
-
static void surface_force_reload(struct wined3d_surface *surface)
{
surface->flags &= ~(SFLAG_ALLOCATED | SFLAG_SRGBALLOCATED);
@@ -628,13 +606,13 @@ static void surface_release_client_storage(struct wined3d_surface *surface)
if (surface->container->texture_rgb.name)
{
- surface_bind_and_dirtify(surface, context, FALSE);
+ wined3d_texture_bind_and_dirtify(surface->container, context, FALSE);
gl_info->gl_ops.gl.p_glTexImage2D(surface->texture_target, surface->texture_level,
GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
}
if (surface->container->texture_srgb.name)
{
- surface_bind_and_dirtify(surface, context, TRUE);
+ wined3d_texture_bind_and_dirtify(surface->container, context, TRUE);
gl_info->gl_ops.gl.p_glTexImage2D(surface->texture_target, surface->texture_level,
GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
}
@@ -3746,7 +3724,7 @@ void surface_load_fb_texture(struct wined3d_surface *surface, BOOL srgb)
device_invalidate_state(device, STATE_FRAMEBUFFER);
surface_prepare_texture(surface, context, srgb);
- surface_bind_and_dirtify(surface, context, srgb);
+ wined3d_texture_bind_and_dirtify(surface->container, context, srgb);
TRACE("Reading back offscreen render target %p.\n", surface);
@@ -3778,7 +3756,7 @@ static void surface_prepare_texture_internal(struct wined3d_surface *surface,
surface->flags |= SFLAG_CONVERTED;
else surface->flags &= ~SFLAG_CONVERTED;
- surface_bind_and_dirtify(surface, context, srgb);
+ wined3d_texture_bind_and_dirtify(surface->container, context, srgb);
surface_allocate_surface(surface, context->gl_info, &format, srgb);
surface->flags |= alloc_flag;
}
@@ -5087,7 +5065,7 @@ static void surface_load_sysmem(struct wined3d_surface *surface,
/* TODO: Use already acquired context when possible. */
context = context_acquire(device, NULL);
- surface_bind_and_dirtify(surface, context, !(surface->flags & SFLAG_INTEXTURE));
+ wined3d_texture_bind_and_dirtify(surface->container, context, !(surface->flags & SFLAG_INTEXTURE));
surface_download_data(surface, gl_info);
context_release(context);
@@ -5214,7 +5192,7 @@ static HRESULT surface_load_texture(struct wined3d_surface *surface,
context = context_acquire(device, NULL);
surface_prepare_texture(surface, context, srgb);
- surface_bind_and_dirtify(surface, context, srgb);
+ wined3d_texture_bind_and_dirtify(surface->container, context, srgb);
if (surface->CKeyFlags & WINEDDSD_CKSRCBLT)
{
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index 9ce96c9..52a2bf9 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -258,6 +258,28 @@ void wined3d_texture_bind(struct wined3d_texture *texture,
}
/* Context activation is done by the caller. */
+void wined3d_texture_bind_and_dirtify(struct wined3d_texture *texture,
+ struct wined3d_context *context, BOOL srgb)
+{
+ DWORD active_sampler;
+
+ /* We don't need a specific texture unit, but after binding the texture
+ * the current unit is dirty. Read the unit back instead of switching to
+ * 0, this avoids messing around with the state manager's GL states. The
+ * current texture unit should always be a valid one.
+ *
+ * To be more specific, this is tricky because we can implicitly be
+ * called from sampler() in state.c. This means we can't touch anything
+ * other than whatever happens to be the currently active texture, or we
+ * would risk marking already applied sampler states dirty again. */
+ active_sampler = context->rev_tex_unit_map[context->active_texture];
+ if (active_sampler != WINED3D_UNMAPPED_STAGE)
+ context_invalidate_state(context, STATE_SAMPLER(active_sampler));
+
+ wined3d_texture_bind(texture, context, srgb);
+}
+
+/* Context activation is done by the caller. */
static void apply_wrap(const struct wined3d_gl_info *gl_info, GLenum target,
enum wined3d_texture_address d3d_wrap, GLenum param, BOOL cond_np2)
{
diff --git a/dlls/wined3d/volume.c b/dlls/wined3d/volume.c
index 037e904..efe0f38 100644
--- a/dlls/wined3d/volume.c
+++ b/dlls/wined3d/volume.c
@@ -27,28 +27,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(d3d_surface);
WINE_DECLARE_DEBUG_CHANNEL(d3d_perf);
-/* Context activation is done by the caller. */
-static void volume_bind_and_dirtify(const struct wined3d_volume *volume,
- struct wined3d_context *context, BOOL srgb)
-{
- DWORD active_sampler;
-
- /* We don't need a specific texture unit, but after binding the texture the current unit is dirty.
- * Read the unit back instead of switching to 0, this avoids messing around with the state manager's
- * gl states. The current texture unit should always be a valid one.
- *
- * To be more specific, this is tricky because we can implicitly be called
- * from sampler() in state.c. This means we can't touch anything other than
- * whatever happens to be the currently active texture, or we would risk
- * marking already applied sampler states dirty again. */
- active_sampler = context->rev_tex_unit_map[context->active_texture];
-
- if (active_sampler != WINED3D_UNMAPPED_STAGE)
- context_invalidate_state(context, STATE_SAMPLER(active_sampler));
-
- wined3d_texture_bind(volume->container, context, srgb);
-}
-
void volume_set_container(struct wined3d_volume *volume, struct wined3d_texture *container)
{
TRACE("volume %p, container %p.\n", volume, container);
@@ -274,9 +252,9 @@ static void wined3d_volume_srgb_transfer(struct wined3d_volume *volume,
if (!data.addr)
return;
- volume_bind_and_dirtify(volume, context, !dest_is_srgb);
+ wined3d_texture_bind_and_dirtify(volume->container, context, !dest_is_srgb);
wined3d_volume_download_data(volume, context, &data);
- volume_bind_and_dirtify(volume, context, dest_is_srgb);
+ wined3d_texture_bind_and_dirtify(volume->container, context, dest_is_srgb);
wined3d_volume_upload_data(volume, context, &data);
HeapFree(GetProcessHeap(), 0, data.addr);
@@ -376,9 +354,9 @@ static void wined3d_volume_load_location(struct wined3d_volume *volume,
struct wined3d_bo_address data = {0, volume->resource.heap_memory};
if (volume->locations & WINED3D_LOCATION_TEXTURE_RGB)
- volume_bind_and_dirtify(volume, context, FALSE);
+ wined3d_texture_bind_and_dirtify(volume->container, context, FALSE);
else
- volume_bind_and_dirtify(volume, context, TRUE);
+ wined3d_texture_bind_and_dirtify(volume->container, context, TRUE);
volume->download_count++;
wined3d_volume_download_data(volume, context, &data);
@@ -406,9 +384,9 @@ static void wined3d_volume_load_location(struct wined3d_volume *volume,
struct wined3d_bo_address data = {volume->pbo, NULL};
if (volume->locations & WINED3D_LOCATION_TEXTURE_RGB)
- volume_bind_and_dirtify(volume, context, FALSE);
+ wined3d_texture_bind_and_dirtify(volume->container, context, FALSE);
else
- volume_bind_and_dirtify(volume, context, TRUE);
+ wined3d_texture_bind_and_dirtify(volume->container, context, TRUE);
wined3d_volume_download_data(volume, context, &data);
}
@@ -430,7 +408,7 @@ static void wined3d_volume_load_location(struct wined3d_volume *volume,
/* Context activation is done by the caller. */
void wined3d_volume_load(struct wined3d_volume *volume, struct wined3d_context *context, BOOL srgb_mode)
{
- volume_bind_and_dirtify(volume, context, srgb_mode);
+ wined3d_texture_bind_and_dirtify(volume->container, context, srgb_mode);
if (srgb_mode)
{
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 2a2b6c6..31235f2 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2105,6 +2105,8 @@ void wined3d_texture_apply_state_changes(struct wined3d_texture *texture,
const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
void wined3d_texture_bind(struct wined3d_texture *texture,
struct wined3d_context *context, BOOL srgb) DECLSPEC_HIDDEN;
+void wined3d_texture_bind_and_dirtify(struct wined3d_texture *texture,
+ struct wined3d_context *context, BOOL srgb) DECLSPEC_HIDDEN;
void wined3d_texture_set_dirty(struct wined3d_texture *texture) DECLSPEC_HIDDEN;
#define WINED3D_VFLAG_ALLOCATED 0x00000001
--
1.7.10.4
More information about the wine-patches
mailing list