wined3d: Support loading renderbuffers in surface_load_location.
Signed-off-by: Stefan Dösinger <stefan@codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
a2c6a2beb6
commit
61ad9284d0
|
@ -4084,16 +4084,23 @@ static HRESULT surface_load_texture(struct wined3d_surface *surface,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Context activation is done by the caller. */
|
/* Context activation is done by the caller. */
|
||||||
static void surface_multisample_resolve(struct wined3d_surface *surface, struct wined3d_context *context)
|
static void surface_load_renderbuffer(struct wined3d_surface *surface, struct wined3d_context *context,
|
||||||
|
DWORD dst_location)
|
||||||
{
|
{
|
||||||
RECT rect = {0, 0, surface->resource.width, surface->resource.height};
|
const RECT rect = {0, 0, surface->resource.width, surface->resource.height};
|
||||||
|
DWORD src_location;
|
||||||
|
|
||||||
if (!(surface->locations & WINED3D_LOCATION_RB_MULTISAMPLE))
|
if (surface->locations & WINED3D_LOCATION_RB_MULTISAMPLE)
|
||||||
ERR("Trying to resolve multisampled surface %p, but location WINED3D_LOCATION_RB_MULTISAMPLE not current.\n",
|
src_location = WINED3D_LOCATION_RB_MULTISAMPLE;
|
||||||
surface);
|
else if (surface->locations & WINED3D_LOCATION_RB_RESOLVED)
|
||||||
|
src_location = WINED3D_LOCATION_RB_RESOLVED;
|
||||||
|
else if (surface->locations & WINED3D_LOCATION_TEXTURE_SRGB)
|
||||||
|
src_location = WINED3D_LOCATION_TEXTURE_SRGB;
|
||||||
|
else /* surface_blt_fbo will load the source location if necessary. */
|
||||||
|
src_location = WINED3D_LOCATION_TEXTURE_RGB;
|
||||||
|
|
||||||
surface_blt_fbo(surface->resource.device, context, WINED3D_TEXF_POINT,
|
surface_blt_fbo(surface->resource.device, context, WINED3D_TEXF_POINT,
|
||||||
surface, WINED3D_LOCATION_RB_MULTISAMPLE, &rect, surface, WINED3D_LOCATION_RB_RESOLVED, &rect);
|
surface, src_location, &rect, surface, dst_location, &rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Context activation is done by the caller. Context may be NULL in ddraw-only mode. */
|
/* Context activation is done by the caller. Context may be NULL in ddraw-only mode. */
|
||||||
|
@ -4161,7 +4168,8 @@ HRESULT surface_load_location(struct wined3d_surface *surface, struct wined3d_co
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WINED3D_LOCATION_RB_RESOLVED:
|
case WINED3D_LOCATION_RB_RESOLVED:
|
||||||
surface_multisample_resolve(surface, context);
|
case WINED3D_LOCATION_RB_MULTISAMPLE:
|
||||||
|
surface_load_renderbuffer(surface, context, location);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WINED3D_LOCATION_TEXTURE_RGB:
|
case WINED3D_LOCATION_TEXTURE_RGB:
|
||||||
|
|
Loading…
Reference in New Issue