wined3d: Get rid of unused/unimplemented WINEDDBLT_* flags.

Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Henri Verbeet 2016-02-15 18:18:02 +01:00 committed by Alexandre Julliard
parent 47635a60a0
commit 0b6b5176cc
4 changed files with 74 additions and 82 deletions

View File

@ -1647,6 +1647,13 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface7_Blt(IDirectDrawSurface7 *
return DDERR_INVALIDPARAMS; return DDERR_INVALIDPARAMS;
} }
if (Flags & ~WINED3D_BLT_MASK)
{
wined3d_mutex_unlock();
FIXME("Unhandled flags %#x.\n", Flags);
return E_NOTIMPL;
}
/* TODO: Check if the DDBltFx contains any ddraw surface pointers. If it /* TODO: Check if the DDBltFx contains any ddraw surface pointers. If it
* does, copy the struct, and replace the ddraw surfaces with the wined3d * does, copy the struct, and replace the ddraw surfaces with the wined3d
* surfaces. So far no blitting operations using surfaces in the bltfx * surfaces. So far no blitting operations using surfaces in the bltfx
@ -4151,13 +4158,13 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface7_BltFast(IDirectDrawSurfac
SetRect(&dst_rect, dst_x, dst_y, dst_x + src_w, dst_y + src_h); SetRect(&dst_rect, dst_x, dst_y, dst_x + src_w, dst_y + src_h);
if (trans & DDBLTFAST_SRCCOLORKEY) if (trans & DDBLTFAST_SRCCOLORKEY)
flags |= WINEDDBLT_KEYSRC; flags |= WINED3D_BLT_SRC_CKEY;
if (trans & DDBLTFAST_DESTCOLORKEY) if (trans & DDBLTFAST_DESTCOLORKEY)
flags |= WINEDDBLT_KEYDEST; flags |= WINED3D_BLT_DST_CKEY;
if (trans & DDBLTFAST_WAIT) if (trans & DDBLTFAST_WAIT)
flags |= WINEDDBLT_WAIT; flags |= WINED3D_BLT_WAIT;
if (trans & DDBLTFAST_DONOTWAIT) if (trans & DDBLTFAST_DONOTWAIT)
flags |= WINEDDBLT_DONOTWAIT; flags |= WINED3D_BLT_DO_NOT_WAIT;
wined3d_mutex_lock(); wined3d_mutex_lock();
if (dst_impl->clipper) if (dst_impl->clipper)

View File

@ -3225,7 +3225,7 @@ static HRESULT surface_blt_special(struct wined3d_surface *dst_surface, const RE
} }
/* No destination color keying supported */ /* No destination color keying supported */
if (flags & (WINEDDBLT_KEYDEST | WINEDDBLT_KEYDESTOVERRIDE)) if (flags & (WINED3D_BLT_DST_CKEY | WINED3D_BLT_DST_CKEY_OVERRIDE))
{ {
/* Can we support that with glBlendFunc if blitting to the frame buffer? */ /* Can we support that with glBlendFunc if blitting to the frame buffer? */
TRACE("Destination color key not supported in accelerated Blit, falling back to software\n"); TRACE("Destination color key not supported in accelerated Blit, falling back to software\n");
@ -3269,7 +3269,7 @@ static HRESULT surface_blt_special(struct wined3d_surface *dst_surface, const RE
return WINED3DERR_INVALIDCALL; return WINED3DERR_INVALIDCALL;
} }
if (flags & (WINEDDBLT_KEYSRC | WINEDDBLT_KEYSRCOVERRIDE)) if (flags & (WINED3D_BLT_SRC_CKEY | WINED3D_BLT_SRC_CKEY_OVERRIDE))
{ {
TRACE("Color keying not supported by frame buffer to texture blit\n"); TRACE("Color keying not supported by frame buffer to texture blit\n");
return WINED3DERR_INVALIDCALL; return WINED3DERR_INVALIDCALL;
@ -4173,7 +4173,7 @@ static HRESULT surface_cpu_blt_compressed(const BYTE *src_data, BYTE *dst_data,
return WINED3D_OK; return WINED3D_OK;
} }
if (flags == WINEDDBLT_DDFX && fx->dwDDFX == WINEDDBLTFX_MIRRORUPDOWN) if (flags == WINED3D_BLT_FX && fx->dwDDFX == WINEDDBLTFX_MIRRORUPDOWN)
{ {
src_row += (((update_h / format->block_height) - 1) * src_pitch); src_row += (((update_h / format->block_height) - 1) * src_pitch);
@ -4245,7 +4245,7 @@ static HRESULT surface_cpu_blt_compressed(const BYTE *src_data, BYTE *dst_data,
} }
FIXME("Unsupported blit on compressed surface (format %s, flags %#x, DDFX %#x).\n", FIXME("Unsupported blit on compressed surface (format %s, flags %#x, DDFX %#x).\n",
debug_d3dformat(format->id), flags, flags & WINEDDBLT_DDFX ? fx->dwDDFX : 0); debug_d3dformat(format->id), flags, flags & WINED3D_BLT_FX ? fx->dwDDFX : 0);
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -4365,16 +4365,15 @@ static HRESULT surface_cpu_blt(struct wined3d_surface *dst_surface, const RECT *
} }
/* First, all the 'source-less' blits */ /* First, all the 'source-less' blits */
if (flags & WINEDDBLT_COLORFILL) if (flags & WINED3D_BLT_COLOR_FILL)
{ {
hr = _Blt_ColorFill(dbuf, dstwidth, dstheight, bpp, dst_map.row_pitch, fx->u5.dwFillColor); hr = _Blt_ColorFill(dbuf, dstwidth, dstheight, bpp, dst_map.row_pitch, fx->u5.dwFillColor);
flags &= ~WINEDDBLT_COLORFILL; flags &= ~WINED3D_BLT_COLOR_FILL;
} }
if (flags & WINEDDBLT_DEPTHFILL) if (flags & WINED3D_BLT_DEPTH_FILL)
{ FIXME("WINED3D_BLT_DEPTH_FILL needs to be implemented!\n");
FIXME("DDBLT_DEPTHFILL needs to be implemented!\n");
}
/* Now the 'with source' blits. */ /* Now the 'with source' blits. */
if (src_surface) if (src_surface)
{ {
@ -4519,27 +4518,28 @@ do { \
LONG dstyinc = dst_map.row_pitch, dstxinc = bpp; LONG dstyinc = dst_map.row_pitch, dstxinc = bpp;
DWORD keylow = 0xffffffff, keyhigh = 0, keymask = 0xffffffff; DWORD keylow = 0xffffffff, keyhigh = 0, keymask = 0xffffffff;
DWORD destkeylow = 0x0, destkeyhigh = 0xffffffff, destkeymask = 0xffffffff; DWORD destkeylow = 0x0, destkeyhigh = 0xffffffff, destkeymask = 0xffffffff;
if (flags & (WINEDDBLT_KEYSRC | WINEDDBLT_KEYDEST | WINEDDBLT_KEYSRCOVERRIDE | WINEDDBLT_KEYDESTOVERRIDE)) if (flags & (WINED3D_BLT_SRC_CKEY | WINED3D_BLT_DST_CKEY
| WINED3D_BLT_SRC_CKEY_OVERRIDE | WINED3D_BLT_DST_CKEY_OVERRIDE))
{ {
/* The color keying flags are checked for correctness in ddraw */ /* The color keying flags are checked for correctness in ddraw */
if (flags & WINEDDBLT_KEYSRC) if (flags & WINED3D_BLT_SRC_CKEY)
{ {
keylow = src_surface->container->async.src_blt_color_key.color_space_low_value; keylow = src_surface->container->async.src_blt_color_key.color_space_low_value;
keyhigh = src_surface->container->async.src_blt_color_key.color_space_high_value; keyhigh = src_surface->container->async.src_blt_color_key.color_space_high_value;
} }
else if (flags & WINEDDBLT_KEYSRCOVERRIDE) else if (flags & WINED3D_BLT_SRC_CKEY_OVERRIDE)
{ {
keylow = fx->ddckSrcColorkey.color_space_low_value; keylow = fx->ddckSrcColorkey.color_space_low_value;
keyhigh = fx->ddckSrcColorkey.color_space_high_value; keyhigh = fx->ddckSrcColorkey.color_space_high_value;
} }
if (flags & WINEDDBLT_KEYDEST) if (flags & WINED3D_BLT_DST_CKEY)
{ {
/* Destination color keys are taken from the source surface! */ /* Destination color keys are taken from the source surface! */
destkeylow = src_surface->container->async.dst_blt_color_key.color_space_low_value; destkeylow = src_surface->container->async.dst_blt_color_key.color_space_low_value;
destkeyhigh = src_surface->container->async.dst_blt_color_key.color_space_high_value; destkeyhigh = src_surface->container->async.dst_blt_color_key.color_space_high_value;
} }
else if (flags & WINEDDBLT_KEYDESTOVERRIDE) else if (flags & WINED3D_BLT_DST_CKEY_OVERRIDE)
{ {
destkeylow = fx->ddckDestColorkey.color_space_low_value; destkeylow = fx->ddckDestColorkey.color_space_low_value;
destkeyhigh = fx->ddckDestColorkey.color_space_high_value; destkeyhigh = fx->ddckDestColorkey.color_space_high_value;
@ -4557,10 +4557,11 @@ do { \
| masks[1] | masks[1]
| masks[2]; | masks[2];
} }
flags &= ~(WINEDDBLT_KEYSRC | WINEDDBLT_KEYDEST | WINEDDBLT_KEYSRCOVERRIDE | WINEDDBLT_KEYDESTOVERRIDE); flags &= ~(WINED3D_BLT_SRC_CKEY | WINED3D_BLT_DST_CKEY
| WINED3D_BLT_SRC_CKEY_OVERRIDE | WINED3D_BLT_DST_CKEY_OVERRIDE);
} }
if (flags & WINEDDBLT_DDFX) if (flags & WINED3D_BLT_FX)
{ {
BYTE *dTopLeft, *dTopRight, *dBottomLeft, *dBottomRight, *tmp; BYTE *dTopLeft, *dTopRight, *dBottomLeft, *dBottomRight, *tmp;
LONG tmpxy; LONG tmpxy;
@ -4572,7 +4573,7 @@ do { \
if (fx->dwDDFX & WINEDDBLTFX_ARITHSTRETCHY) if (fx->dwDDFX & WINEDDBLTFX_ARITHSTRETCHY)
{ {
/* I don't think we need to do anything about this flag */ /* I don't think we need to do anything about this flag */
WARN("flags=DDBLT_DDFX nothing done for WINEDDBLTFX_ARITHSTRETCHY\n"); WARN("Nothing done for WINEDDBLTFX_ARITHSTRETCHY.\n");
} }
if (fx->dwDDFX & WINEDDBLTFX_MIRRORLEFTRIGHT) if (fx->dwDDFX & WINEDDBLTFX_MIRRORLEFTRIGHT)
{ {
@ -4597,7 +4598,7 @@ do { \
if (fx->dwDDFX & WINEDDBLTFX_NOTEARING) if (fx->dwDDFX & WINEDDBLTFX_NOTEARING)
{ {
/* I don't think we need to do anything about this flag */ /* I don't think we need to do anything about this flag */
WARN("flags=DDBLT_DDFX nothing done for WINEDDBLTFX_NOTEARING\n"); WARN("Nothing done for WINEDDBLTFX_NOTEARING.\n");
} }
if (fx->dwDDFX & WINEDDBLTFX_ROTATE180) if (fx->dwDDFX & WINEDDBLTFX_ROTATE180)
{ {
@ -4637,10 +4638,10 @@ do { \
if (fx->dwDDFX & WINEDDBLTFX_ZBUFFERBASEDEST) if (fx->dwDDFX & WINEDDBLTFX_ZBUFFERBASEDEST)
{ {
/* I don't think we need to do anything about this flag */ /* I don't think we need to do anything about this flag */
WARN("flags=WINEDDBLT_DDFX nothing done for WINEDDBLTFX_ZBUFFERBASEDEST\n"); WARN("Nothing done for WINEDDBLTFX_ZBUFFERBASEDEST.\n");
} }
dbuf = dTopLeft; dbuf = dTopLeft;
flags &= ~(WINEDDBLT_DDFX); flags &= ~(WINED3D_BLT_FX);
} }
#define COPY_COLORKEY_FX(type) \ #define COPY_COLORKEY_FX(type) \
@ -4705,7 +4706,7 @@ do { \
} }
default: default:
FIXME("%s color-keyed blit not implemented for bpp %u!\n", FIXME("%s color-keyed blit not implemented for bpp %u!\n",
(flags & WINEDDBLT_KEYSRC) ? "Source" : "Destination", bpp * 8); (flags & WINED3D_BLT_SRC_CKEY) ? "Source" : "Destination", bpp * 8);
hr = WINED3DERR_NOTAVAILABLE; hr = WINED3DERR_NOTAVAILABLE;
goto error; goto error;
#undef COPY_COLORKEY_FX #undef COPY_COLORKEY_FX
@ -4741,7 +4742,7 @@ static HRESULT cpu_blit_color_fill(struct wined3d_device *device, struct wined3d
BltFx.dwSize = sizeof(BltFx); BltFx.dwSize = sizeof(BltFx);
BltFx.u5.dwFillColor = wined3d_format_convert_from_float(surface, color); BltFx.u5.dwFillColor = wined3d_format_convert_from_float(surface, color);
return surface_cpu_blt(surface, rect, NULL, &src_rect, return surface_cpu_blt(surface, rect, NULL, &src_rect,
WINEDDBLT_COLORFILL, &BltFx, WINED3D_TEXF_POINT); WINED3D_BLT_COLOR_FILL, &BltFx, WINED3D_TEXF_POINT);
} }
static HRESULT cpu_blit_depth_fill(struct wined3d_device *device, static HRESULT cpu_blit_depth_fill(struct wined3d_device *device,
@ -4780,14 +4781,14 @@ HRESULT wined3d_surface_blt(struct wined3d_surface *dst_surface, const RECT *dst
DWORD src_ds_flags, dst_ds_flags; DWORD src_ds_flags, dst_ds_flags;
BOOL scale, convert; BOOL scale, convert;
static const DWORD simple_blit = WINEDDBLT_ASYNC static const DWORD simple_blit = WINED3D_BLT_ASYNC
| WINEDDBLT_COLORFILL | WINED3D_BLT_COLOR_FILL
| WINEDDBLT_KEYSRC | WINED3D_BLT_SRC_CKEY
| WINEDDBLT_KEYSRCOVERRIDE | WINED3D_BLT_SRC_CKEY_OVERRIDE
| WINEDDBLT_WAIT | WINED3D_BLT_WAIT
| WINEDDBLT_DEPTHFILL | WINED3D_BLT_DEPTH_FILL
| WINEDDBLT_DONOTWAIT | WINED3D_BLT_DO_NOT_WAIT
| WINEDDBLT_ALPHATEST; | WINED3D_BLT_ALPHA_TEST;
TRACE("dst_surface %p, dst_rect %s, src_surface %p, src_rect %s, flags %#x, fx %p, filter %s.\n", TRACE("dst_surface %p, dst_rect %s, src_surface %p, src_rect %s, flags %#x, fx %p, filter %s.\n",
dst_surface, wine_dbgstr_rect(dst_rect), src_surface, wine_dbgstr_rect(src_rect), dst_surface, wine_dbgstr_rect(dst_rect), src_surface, wine_dbgstr_rect(src_rect),
@ -4855,28 +4856,28 @@ HRESULT wined3d_surface_blt(struct wined3d_surface *dst_surface, const RECT *dst
} }
if (!fx || !(fx->dwDDFX)) if (!fx || !(fx->dwDDFX))
flags &= ~WINEDDBLT_DDFX; flags &= ~WINED3D_BLT_FX;
if (flags & WINEDDBLT_WAIT) if (flags & WINED3D_BLT_WAIT)
flags &= ~WINEDDBLT_WAIT; flags &= ~WINED3D_BLT_WAIT;
if (flags & WINEDDBLT_ASYNC) if (flags & WINED3D_BLT_ASYNC)
{ {
static unsigned int once; static unsigned int once;
if (!once++) if (!once++)
FIXME("Can't handle WINEDDBLT_ASYNC flag.\n"); FIXME("Can't handle WINED3D_BLT_ASYNC flag.\n");
flags &= ~WINEDDBLT_ASYNC; flags &= ~WINED3D_BLT_ASYNC;
} }
/* WINEDDBLT_DONOTWAIT appeared in DX7. */ /* WINED3D_BLT_DO_NOT_WAIT appeared in DX7. */
if (flags & WINEDDBLT_DONOTWAIT) if (flags & WINED3D_BLT_DO_NOT_WAIT)
{ {
static unsigned int once; static unsigned int once;
if (!once++) if (!once++)
FIXME("Can't handle WINEDDBLT_DONOTWAIT flag.\n"); FIXME("Can't handle WINED3D_BLT_DO_NOT_WAIT flag.\n");
flags &= ~WINEDDBLT_DONOTWAIT; flags &= ~WINED3D_BLT_DO_NOT_WAIT;
} }
if (!device->d3d_initialized) if (!device->d3d_initialized)
@ -4935,7 +4936,7 @@ HRESULT wined3d_surface_blt(struct wined3d_surface *dst_surface, const RECT *dst
if (src_ds_flags || dst_ds_flags) if (src_ds_flags || dst_ds_flags)
{ {
if (flags & WINEDDBLT_DEPTHFILL) if (flags & WINED3D_BLT_DEPTH_FILL)
{ {
float depth; float depth;
@ -4977,7 +4978,7 @@ HRESULT wined3d_surface_blt(struct wined3d_surface *dst_surface, const RECT *dst
goto cpu; goto cpu;
} }
if (flags & WINEDDBLT_COLORFILL) if (flags & WINED3D_BLT_COLOR_FILL)
{ {
struct wined3d_color color; struct wined3d_color color;
const struct wined3d_palette *palette = dst_swapchain ? dst_swapchain->palette : NULL; const struct wined3d_palette *palette = dst_swapchain ? dst_swapchain->palette : NULL;
@ -4997,17 +4998,17 @@ HRESULT wined3d_surface_blt(struct wined3d_surface *dst_surface, const RECT *dst
const struct wined3d_color_key *color_key = NULL; const struct wined3d_color_key *color_key = NULL;
TRACE("Color blit.\n"); TRACE("Color blit.\n");
if (flags & WINEDDBLT_KEYSRCOVERRIDE) if (flags & WINED3D_BLT_SRC_CKEY_OVERRIDE)
{ {
color_key = &fx->ddckSrcColorkey; color_key = &fx->ddckSrcColorkey;
blit_op = WINED3D_BLIT_OP_COLOR_BLIT_CKEY; blit_op = WINED3D_BLIT_OP_COLOR_BLIT_CKEY;
} }
else if (flags & WINEDDBLT_KEYSRC) else if (flags & WINED3D_BLT_SRC_CKEY)
{ {
color_key = &src_surface->container->async.src_blt_color_key; color_key = &src_surface->container->async.src_blt_color_key;
blit_op = WINED3D_BLIT_OP_COLOR_BLIT_CKEY; blit_op = WINED3D_BLIT_OP_COLOR_BLIT_CKEY;
} }
else if (flags & WINEDDBLT_ALPHATEST) else if (flags & WINED3D_BLT_ALPHA_TEST)
{ {
blit_op = WINED3D_BLIT_OP_COLOR_BLIT_ALPHATEST; blit_op = WINED3D_BLIT_OP_COLOR_BLIT_ALPHATEST;
} }

View File

@ -451,8 +451,8 @@ static void swapchain_gl_present(struct wined3d_swapchain *swapchain, const RECT
RECT rect = {0, 0, src_surface->resource.width, src_surface->resource.height}; RECT rect = {0, 0, src_surface->resource.width, src_surface->resource.height};
/* Blit the logo into the upper left corner of the drawable. */ /* Blit the logo into the upper left corner of the drawable. */
wined3d_surface_blt(back_buffer, &rect, src_surface, &rect, WINEDDBLT_ALPHATEST, wined3d_surface_blt(back_buffer, &rect, src_surface, &rect,
NULL, WINED3D_TEXF_POINT); WINED3D_BLT_ALPHA_TEST, NULL, WINED3D_TEXF_POINT);
} }
if (swapchain->device->bCursorVisible && swapchain->device->cursor_texture if (swapchain->device->bCursorVisible && swapchain->device->cursor_texture
@ -480,8 +480,8 @@ static void swapchain_gl_present(struct wined3d_swapchain *swapchain, const RECT
if (swapchain->desc.windowed) if (swapchain->desc.windowed)
MapWindowPoints(NULL, swapchain->win_handle, (POINT *)&destRect, 2); MapWindowPoints(NULL, swapchain->win_handle, (POINT *)&destRect, 2);
if (wined3d_clip_blit(&clip_rect, &destRect, &src_rect)) if (wined3d_clip_blit(&clip_rect, &destRect, &src_rect))
wined3d_surface_blt(back_buffer, &destRect, cursor, &src_rect, WINEDDBLT_ALPHATEST, wined3d_surface_blt(back_buffer, &destRect, cursor, &src_rect,
NULL, WINED3D_TEXF_POINT); WINED3D_BLT_ALPHA_TEST, NULL, WINED3D_TEXF_POINT);
} }
TRACE("Presenting HDC %p.\n", context->hdc); TRACE("Presenting HDC %p.\n", context->hdc);

View File

@ -1266,34 +1266,18 @@ enum wined3d_display_rotation
/* add dwZBufferBaseDest to every source z value before compare */ /* add dwZBufferBaseDest to every source z value before compare */
#define WINEDDBLTFX_ZBUFFERBASEDEST 0x00000100 #define WINEDDBLTFX_ZBUFFERBASEDEST 0x00000100
/* dwFlags for Blt* */ #define WINED3D_BLT_ASYNC 0x00000200
#define WINEDDBLT_ALPHADEST 0x00000001 #define WINED3D_BLT_COLOR_FILL 0x00000400
#define WINEDDBLT_ALPHADESTCONSTOVERRIDE 0x00000002 #define WINED3D_BLT_FX 0x00000800
#define WINEDDBLT_ALPHADESTNEG 0x00000004 #define WINED3D_BLT_DST_CKEY 0x00002000
#define WINEDDBLT_ALPHADESTSURFACEOVERRIDE 0x00000008 #define WINED3D_BLT_DST_CKEY_OVERRIDE 0x00004000
#define WINEDDBLT_ALPHAEDGEBLEND 0x00000010 #define WINED3D_BLT_SRC_CKEY 0x00008000
#define WINEDDBLT_ALPHASRC 0x00000020 #define WINED3D_BLT_SRC_CKEY_OVERRIDE 0x00010000
#define WINEDDBLT_ALPHASRCCONSTOVERRIDE 0x00000040 #define WINED3D_BLT_WAIT 0x01000000
#define WINEDDBLT_ALPHASRCNEG 0x00000080 #define WINED3D_BLT_DEPTH_FILL 0x02000000
#define WINEDDBLT_ALPHASRCSURFACEOVERRIDE 0x00000100 #define WINED3D_BLT_DO_NOT_WAIT 0x08000000
#define WINEDDBLT_ASYNC 0x00000200 #define WINED3D_BLT_ALPHA_TEST 0x80000000
#define WINEDDBLT_COLORFILL 0x00000400 #define WINED3D_BLT_MASK 0x8b01ee00
#define WINEDDBLT_DDFX 0x00000800
#define WINEDDBLT_KEYDEST 0x00002000
#define WINEDDBLT_KEYDESTOVERRIDE 0x00004000
#define WINEDDBLT_KEYSRC 0x00008000
#define WINEDDBLT_KEYSRCOVERRIDE 0x00010000
#define WINEDDBLT_ROP 0x00020000
#define WINEDDBLT_ROTATIONANGLE 0x00040000
#define WINEDDBLT_ZBUFFER 0x00080000
#define WINEDDBLT_ZBUFFERDESTCONSTOVERRIDE 0x00100000
#define WINEDDBLT_ZBUFFERDESTOVERRIDE 0x00200000
#define WINEDDBLT_ZBUFFERSRCCONSTOVERRIDE 0x00400000
#define WINEDDBLT_ZBUFFERSRCOVERRIDE 0x00800000
#define WINEDDBLT_WAIT 0x01000000
#define WINEDDBLT_DEPTHFILL 0x02000000
#define WINEDDBLT_DONOTWAIT 0x08000000
#define WINEDDBLT_ALPHATEST 0x80000000
/* dwFlags for GetBltStatus */ /* dwFlags for GetBltStatus */
#define WINEDDGBS_CANBLT 0x00000001 #define WINEDDGBS_CANBLT 0x00000001