On 17 February 2013 18:10, Matteo Bruni <mbruni(a)codeweavers.com> wrote:
> @@ -6168,18 +6172,10 @@ HRESULT surface_load_location(struct wined3d_surface *surface, DWORD location, c
>
> if (surface->resource.usage & WINED3DUSAGE_DEPTHSTENCIL)
> {
> - if (location == SFLAG_INTEXTURE)
> - {
> - struct wined3d_context *context = context_acquire(device, NULL);
> - surface_load_ds_location(surface, context, location);
> - context_release(context);
> - return WINED3D_OK;
> - }
> - else
> - {
> - FIXME("Unimplemented location %s for depth/stencil buffers.\n", debug_surflocation(location));
> - return WINED3DERR_INVALIDCALL;
> - }
> + struct wined3d_context *context = context_acquire(device, NULL);
> + surface_load_ds_location(surface, context, location);
> + context_release(context);
> + return WINED3D_OK;
> }
This is probably wrong (and the original code is probably questionable
too), surface_load_ds_location() is only really meant for onscreen <->
offscreen blits. The original code is meant for the case where
AlwaysOffscreen is disabled and a depth stencil is used as texture.
The implication there is that the only possible locations are
SFLAG_INTEXTURE and SFLAG_INDRAWABLE, it doesn't really work with
multisampling. Fortunately you can't directly texture from
multisampled depth stencil surfaces either.
In principle we could make surface_load_ds_location() the generic
function for depth / stencil location transfers, but currently it
isn't. If you're hitting it with the RESZ code it probably only works
by accident.