diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index 01048fd..22d140d 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -4139,7 +4139,8 @@ static BOOL wined3d_check_pixel_format_depth(const struct wined3d_gl_info *gl_in /* Float formats need FBOs. If FBOs are used this function isn't called */ if (format->flags & WINED3DFMT_FLAG_FLOAT) return FALSE; - if ((format->id == WINED3DFMT_D16_LOCKABLE) || (format->id == WINED3DFMT_D32_FLOAT)) + if ((format->id == WINED3DFMT_D16_LOCKABLE) || (format->id == WINED3DFMT_D32_FLOAT) || + (format->id == WINED3DFMT_D32_LOCKABLE) || (format->id == WINED3DFMT_S8_LOCKABLE)) lockable = TRUE; /* On some modern cards like the Geforce8/9 GLX doesn't offer some dephthstencil formats which D3D9 reports. diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index 5094af3..1630f2e 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -5474,7 +5474,8 @@ static HRESULT surface_init(struct wined3d_surface *surface, struct wined3d_text /* Flags */ if (flags & WINED3D_SURFACE_DISCARD) surface->flags |= SFLAG_DISCARD; - if (lockable || desc->format == WINED3DFMT_D16_LOCKABLE) + if (lockable || desc->format == WINED3DFMT_D16_LOCKABLE || + desc->format == WINED3DFMT_D32_LOCKABLE || desc->format == WINED3DFMT_S8_LOCKABLE) surface->resource.access_flags |= WINED3D_RESOURCE_ACCESS_CPU; surface->texture_target = target; diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index 2f21b29..f56c7cd 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -112,7 +112,9 @@ static const struct wined3d_format_channels formats[] = {WINED3DFMT_R10G11B11_SNORM, 10, 11, 11, 0, 0, 10, 21, 0, 4, 0, 0}, {WINED3DFMT_R10G10B10_SNORM_A2_UNORM, 10, 10, 10, 2, 0, 10, 20, 30, 4, 0, 0}, /* Depth stencil formats */ + {WINED3DFMT_D32_LOCKABLE, 0, 0, 0, 0, 0, 0, 0, 0, 4, 32, 0}, {WINED3DFMT_D16_LOCKABLE, 0, 0, 0, 0, 0, 0, 0, 0, 2, 16, 0}, + {WINED3DFMT_S8_LOCKABLE, 0, 0, 0, 0, 0, 0, 0, 0, 1, 8, 0}, {WINED3DFMT_D32_UNORM, 0, 0, 0, 0, 0, 0, 0, 0, 4, 32, 0}, {WINED3DFMT_S1_UINT_D15_UNORM, 0, 0, 0, 0, 0, 0, 0, 0, 2, 15, 1}, {WINED3DFMT_D24_UNORM_S8_UINT, 0, 0, 0, 0, 0, 0, 0, 0, 4, 24, 8}, @@ -1169,14 +1171,26 @@ static const struct wined3d_format_texture_info format_texture_info[] = | WINED3DFMT_FLAG_BUMPMAP, EXT_TEXTURE_SNORM, NULL}, /* Depth stencil formats */ - {WINED3DFMT_D16_LOCKABLE, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, 0, + {WINED3DFMT_D32_LOCKABLE, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, 0, + GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, 0, + WINED3DFMT_FLAG_DEPTH, + WINED3D_GL_EXT_NONE, NULL}, + {WINED3DFMT_D32_LOCKABLE, GL_DEPTH_COMPONENT32_ARB, GL_DEPTH_COMPONENT32_ARB, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, 0, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_SHADOW, + ARB_DEPTH_TEXTURE, NULL}, + {WINED3DFMT_D16_LOCKABLE, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, 0, + GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, 0, WINED3DFMT_FLAG_DEPTH, WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_D16_LOCKABLE, GL_DEPTH_COMPONENT24_ARB, GL_DEPTH_COMPONENT24_ARB, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, 0, WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_SHADOW, ARB_DEPTH_TEXTURE, NULL}, + {WINED3DFMT_S8_LOCKABLE, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, 0, + GL_DEPTH_COMPONENT, GL_BYTE, 0, + WINED3DFMT_FLAG_DEPTH, + WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_D32_UNORM, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, 0, WINED3DFMT_FLAG_DEPTH, @@ -2374,6 +2388,8 @@ const char *debug_d3dformat(enum wined3d_format_id format_id) FMT_TO_STR(WINED3DFMT_G8R8_G8B8); FMT_TO_STR(WINED3DFMT_R8G8_B8G8); FMT_TO_STR(WINED3DFMT_D16_LOCKABLE); + FMT_TO_STR(WINED3DFMT_D32_LOCKABLE); + FMT_TO_STR(WINED3DFMT_S8_LOCKABLE); FMT_TO_STR(WINED3DFMT_D32_UNORM); FMT_TO_STR(WINED3DFMT_S1_UINT_D15_UNORM); FMT_TO_STR(WINED3DFMT_X8D24_UNORM); @@ -3425,6 +3441,8 @@ BOOL getDepthStencilBits(const struct wined3d_format *format, BYTE *depthSize, B switch (format->id) { case WINED3DFMT_D16_LOCKABLE: + case WINED3DFMT_D32_LOCKABLE: + case WINED3DFMT_S8_LOCKABLE: case WINED3DFMT_D16_UNORM: case WINED3DFMT_S1_UINT_D15_UNORM: case WINED3DFMT_X8D24_UNORM: diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index 8bc4c25..996e20d 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -135,7 +135,9 @@ enum wined3d_format_id WINED3DFMT_R8G8_SNORM_L8X8_UNORM, WINED3DFMT_R10G11B11_SNORM, WINED3DFMT_R10G10B10_SNORM_A2_UNORM, + WINED3DFMT_D32_LOCKABLE, WINED3DFMT_D16_LOCKABLE, + WINED3DFMT_S8_LOCKABLE, WINED3DFMT_D32_UNORM, WINED3DFMT_S1_UINT_D15_UNORM, WINED3DFMT_X8D24_UNORM,