Ken Thomases : wined3d: Track if a context' s private hdc has had its pixel format set, so we don't need to check it.
Alexandre Julliard
julliard at winehq.org
Mon Mar 24 15:59:47 CDT 2014
Module: wine
Branch: master
Commit: f3aa4812382caa459b9b612f66998c6ea8257594
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f3aa4812382caa459b9b612f66998c6ea8257594
Author: Ken Thomases <ken at codeweavers.com>
Date: Sun Mar 23 22:46:25 2014 -0500
wined3d: Track if a context's private hdc has had its pixel format set, so we don't need to check it.
---
dlls/wined3d/context.c | 22 +++++++++++++++++-----
dlls/wined3d/wined3d_private.h | 3 ++-
2 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index 34c0637..00ab25f 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -753,9 +753,13 @@ static BOOL context_restore_pixel_format(struct wined3d_context *ctx)
static BOOL context_set_pixel_format(struct wined3d_context *context, HDC dc, BOOL private, int format)
{
const struct wined3d_gl_info *gl_info = context->gl_info;
- int current = GetPixelFormat(dc);
+ int current;
- if (current == format) return TRUE;
+ if (dc == context->hdc && context->hdc_is_private && context->hdc_has_format)
+ return TRUE;
+
+ current = GetPixelFormat(dc);
+ if (current == format) goto success;
if (!current)
{
@@ -769,7 +773,7 @@ static BOOL context_set_pixel_format(struct wined3d_context *context, HDC dc, BO
context->restore_pf = 0;
context->restore_pf_win = private ? NULL : WindowFromDC(dc);
- return TRUE;
+ goto success;
}
/* By default WGL doesn't allow pixel format adjustments but we need it
@@ -796,7 +800,7 @@ static BOOL context_set_pixel_format(struct wined3d_context *context, HDC dc, BO
context->restore_pf_win = win;
}
- return TRUE;
+ goto success;
}
/* OpenGL doesn't allow pixel format adjustments. Print an error and
@@ -806,6 +810,11 @@ static BOOL context_set_pixel_format(struct wined3d_context *context, HDC dc, BO
ERR("Unable to set pixel format %d on device context %p. Already using format %d.\n",
format, dc, current);
return TRUE;
+
+success:
+ if (dc == context->hdc && context->hdc_is_private)
+ context->hdc_has_format = TRUE;
+ return TRUE;
}
static BOOL context_set_gl_context(struct wined3d_context *ctx)
@@ -891,6 +900,7 @@ static void context_update_window(struct wined3d_context *context)
context->win_handle = context->swapchain->win_handle;
context->hdc_is_private = FALSE;
+ context->hdc_has_format = FALSE;
context->needs_set = 1;
context->valid = 1;
@@ -1120,7 +1130,8 @@ static void context_enter(struct wined3d_context *context)
context->restore_dc = wglGetCurrentDC();
context->needs_set = 1;
}
- else if (!context->needs_set && context->pixel_format != GetPixelFormat(context->hdc))
+ else if (!context->needs_set && !(context->hdc_is_private && context->hdc_has_format)
+ && context->pixel_format != GetPixelFormat(context->hdc))
context->needs_set = 1;
}
}
@@ -1521,6 +1532,7 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain,
ret->win_handle = swapchain->win_handle;
ret->hdc = hdc;
ret->hdc_is_private = hdc_is_private;
+ ret->hdc_has_format = TRUE;
ret->pixel_format = pixel_format;
ret->needs_set = 1;
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 69630b1..7abcc8a 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1087,7 +1087,8 @@ struct wined3d_context
DWORD rebind_fbo : 1;
DWORD needs_set : 1;
DWORD hdc_is_private : 1;
- DWORD padding : 17;
+ DWORD hdc_has_format : 1; /* only meaningful if hdc_is_private */
+ DWORD padding : 16;
DWORD shader_update_mask;
DWORD constant_update_mask;
DWORD numbered_array_mask;
More information about the wine-cvs
mailing list