wined3d: Handle depth/stencil surfaces in IWineD3DSurfaceImpl_LoadLocation().
This commit is contained in:
parent
bdc85b69f6
commit
44ab3d70f1
|
@ -4483,6 +4483,7 @@ HRESULT IWineD3DDeviceImpl_ClearSurface(IWineD3DDeviceImpl *This, IWineD3DSurfac
|
||||||
if (location == SFLAG_DS_ONSCREEN && depth_stencil != This->onscreen_depth_stencil)
|
if (location == SFLAG_DS_ONSCREEN && depth_stencil != This->onscreen_depth_stencil)
|
||||||
device_switch_onscreen_ds(This, context, depth_stencil);
|
device_switch_onscreen_ds(This, context, depth_stencil);
|
||||||
prepare_ds_clear(depth_stencil, context, location, &draw_rect, Count, clear_rect);
|
prepare_ds_clear(depth_stencil, context, location, &draw_rect, Count, clear_rect);
|
||||||
|
IWineD3DSurface_ModifyLocation((IWineD3DSurface *)depth_stencil, SFLAG_INDRAWABLE, TRUE);
|
||||||
|
|
||||||
glDepthMask(GL_TRUE);
|
glDepthMask(GL_TRUE);
|
||||||
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_RENDER(WINED3DRS_ZWRITEENABLE));
|
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_RENDER(WINED3DRS_ZWRITEENABLE));
|
||||||
|
|
|
@ -634,9 +634,12 @@ void drawPrimitive(IWineD3DDevice *iface, UINT index_count, UINT StartIdx, UINT
|
||||||
surface_load_ds_location(This->depth_stencil, context, location);
|
surface_load_ds_location(This->depth_stencil, context, location);
|
||||||
|
|
||||||
if (This->stateBlock->renderState[WINED3DRS_ZWRITEENABLE])
|
if (This->stateBlock->renderState[WINED3DRS_ZWRITEENABLE])
|
||||||
|
{
|
||||||
surface_modify_ds_location(This->depth_stencil, location,
|
surface_modify_ds_location(This->depth_stencil, location,
|
||||||
This->depth_stencil->ds_current_size.cx,
|
This->depth_stencil->ds_current_size.cx,
|
||||||
This->depth_stencil->ds_current_size.cy);
|
This->depth_stencil->ds_current_size.cy);
|
||||||
|
IWineD3DSurface_ModifyLocation((IWineD3DSurface *)This->depth_stencil, SFLAG_INDRAWABLE, TRUE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4390,6 +4390,22 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_LoadLocation(IWineD3DSurface *iface, D
|
||||||
BOOL drawable_read_ok = TRUE;
|
BOOL drawable_read_ok = TRUE;
|
||||||
BOOL in_fbo = FALSE;
|
BOOL in_fbo = FALSE;
|
||||||
|
|
||||||
|
if (This->resource.usage & WINED3DUSAGE_DEPTHSTENCIL)
|
||||||
|
{
|
||||||
|
if (flag == SFLAG_INTEXTURE)
|
||||||
|
{
|
||||||
|
struct wined3d_context *context = context_acquire(device, NULL);
|
||||||
|
surface_load_ds_location(This, context, SFLAG_DS_OFFSCREEN);
|
||||||
|
context_release(context);
|
||||||
|
return WINED3D_OK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FIXME("Unimplemented location %#x for depth/stencil buffers.\n", flag);
|
||||||
|
return WINED3DERR_INVALIDCALL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (wined3d_settings.offscreen_rendering_mode == ORM_FBO)
|
if (wined3d_settings.offscreen_rendering_mode == ORM_FBO)
|
||||||
{
|
{
|
||||||
if (surface_is_offscreen(This))
|
if (surface_is_offscreen(This))
|
||||||
|
|
Loading…
Reference in New Issue