From: Elizabeth Figura zfigura@codeweavers.com
WINED3D_FORMAT_ATTR_SHADOW, as we use it, only describes whether a format should use shadow sampling or not. It does not describe a renderer-specific capability; this is covered by FORMAT_CAP_TEXTURE and FORMAT_CAP_DEPTH_STENCIL. --- dlls/wined3d/cs.c | 6 ++---- dlls/wined3d/shader.c | 2 +- dlls/wined3d/stateblock.c | 2 +- dlls/wined3d/utils.c | 20 +++++++++++--------- dlls/wined3d/wined3d_private.h | 2 +- 5 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index 21ed1264971..add8f8f174e 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -1578,7 +1578,7 @@ void wined3d_device_context_emit_set_constant_buffers(struct wined3d_device_cont static bool texture_binding_might_invalidate_ps(struct wined3d_shader_resource_view *view, struct wined3d_shader_resource_view *prev, const struct wined3d_d3d_info *d3d_info) { - unsigned int old_usage, new_usage, old_caps, new_caps; + unsigned int old_usage, new_usage; const struct wined3d_format *old_format, *new_format;
if (!prev) @@ -1593,9 +1593,7 @@ static bool texture_binding_might_invalidate_ps(struct wined3d_shader_resource_v
old_format = prev->resource->format; new_format = view->resource->format; - old_caps = prev->resource->format_caps; - new_caps = view->resource->format_caps; - if ((old_caps & WINED3D_FORMAT_CAP_SHADOW) != (new_caps & WINED3D_FORMAT_CAP_SHADOW)) + if ((old_format->attrs & WINED3D_FORMAT_ATTR_SHADOW) != (new_format->attrs & WINED3D_FORMAT_ATTR_SHADOW)) return true;
if (is_same_fixup(old_format->color_fixup, new_format->color_fixup)) diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c index 3d7d546b9de..3e974931ab5 100644 --- a/dlls/wined3d/shader.c +++ b/dlls/wined3d/shader.c @@ -2990,7 +2990,7 @@ void find_ps_compile_args(const struct wined3d_state *state, const struct wined3 else args->color_fixup[i] = texture->resource.format->color_fixup;
- if (texture->resource.format_caps & WINED3D_FORMAT_CAP_SHADOW) + if (texture->resource.format_attrs & WINED3D_FORMAT_ATTR_SHADOW) args->shadow |= 1u << i; } } diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c index c9ffe7c4a04..af192cff669 100644 --- a/dlls/wined3d/stateblock.c +++ b/dlls/wined3d/stateblock.c @@ -2889,7 +2889,7 @@ static void sampler_desc_from_sampler_states(struct wined3d_sampler_desc *desc, && sampler_states[WINED3D_SAMP_MIP_FILTER] != WINED3D_TEXF_ANISOTROPIC) || (texture->flags & WINED3D_TEXTURE_COND_NP2)) desc->max_anisotropy = 1; - desc->compare = texture->resource.format_caps & WINED3D_FORMAT_CAP_SHADOW; + desc->compare = texture->resource.format_attrs & WINED3D_FORMAT_ATTR_SHADOW; desc->comparison_func = WINED3D_CMP_LESSEQUAL;
/* Only use the LSB of the WINED3D_SAMP_SRGB_TEXTURE value. This matches diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index 8c25973a403..6091f6bd820 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -1703,17 +1703,17 @@ static const struct wined3d_format_texture_info format_texture_info[] = WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_D16_LOCKABLE, GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT16, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, 0, - WINED3D_FORMAT_CAP_TEXTURE | WINED3D_FORMAT_CAP_DEPTH_STENCIL | WINED3D_FORMAT_CAP_SHADOW, + WINED3D_FORMAT_CAP_TEXTURE | WINED3D_FORMAT_CAP_DEPTH_STENCIL, ARB_DEPTH_TEXTURE, NULL}, {WINED3DFMT_D24_UNORM_S8_UINT, GL_DEPTH_COMPONENT24_ARB, GL_DEPTH_COMPONENT24_ARB, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, 0, WINED3D_FORMAT_CAP_TEXTURE | WINED3D_FORMAT_CAP_POSTPIXELSHADER_BLENDING | WINED3D_FORMAT_CAP_FILTERING - | WINED3D_FORMAT_CAP_DEPTH_STENCIL | WINED3D_FORMAT_CAP_SHADOW, + | WINED3D_FORMAT_CAP_DEPTH_STENCIL, ARB_DEPTH_TEXTURE, NULL}, {WINED3DFMT_D24_UNORM_S8_UINT, GL_DEPTH24_STENCIL8, GL_DEPTH24_STENCIL8, 0, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, 0, WINED3D_FORMAT_CAP_TEXTURE | WINED3D_FORMAT_CAP_POSTPIXELSHADER_BLENDING | WINED3D_FORMAT_CAP_FILTERING - | WINED3D_FORMAT_CAP_DEPTH_STENCIL | WINED3D_FORMAT_CAP_SHADOW, + | WINED3D_FORMAT_CAP_DEPTH_STENCIL, EXT_PACKED_DEPTH_STENCIL, NULL}, {WINED3DFMT_X8D24_UNORM, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, 4, @@ -1722,7 +1722,7 @@ static const struct wined3d_format_texture_info format_texture_info[] = {WINED3DFMT_X8D24_UNORM, GL_DEPTH_COMPONENT24_ARB, GL_DEPTH_COMPONENT24_ARB, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, 4, WINED3D_FORMAT_CAP_TEXTURE | WINED3D_FORMAT_CAP_POSTPIXELSHADER_BLENDING | WINED3D_FORMAT_CAP_FILTERING - | WINED3D_FORMAT_CAP_DEPTH_STENCIL | WINED3D_FORMAT_CAP_SHADOW, + | WINED3D_FORMAT_CAP_DEPTH_STENCIL, ARB_DEPTH_TEXTURE, x8_d24_unorm_upload, x8_d24_unorm_download}, {WINED3DFMT_D16_UNORM, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, 0, @@ -1731,19 +1731,19 @@ static const struct wined3d_format_texture_info format_texture_info[] = {WINED3DFMT_D16_UNORM, GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT16, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, 0, WINED3D_FORMAT_CAP_TEXTURE | WINED3D_FORMAT_CAP_POSTPIXELSHADER_BLENDING | WINED3D_FORMAT_CAP_FILTERING - | WINED3D_FORMAT_CAP_DEPTH_STENCIL | WINED3D_FORMAT_CAP_SHADOW, + | WINED3D_FORMAT_CAP_DEPTH_STENCIL, ARB_DEPTH_TEXTURE, NULL}, {WINED3DFMT_D32_FLOAT, GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT32F, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0, - WINED3D_FORMAT_CAP_TEXTURE | WINED3D_FORMAT_CAP_DEPTH_STENCIL | WINED3D_FORMAT_CAP_SHADOW, + WINED3D_FORMAT_CAP_TEXTURE | WINED3D_FORMAT_CAP_DEPTH_STENCIL, ARB_DEPTH_BUFFER_FLOAT, NULL}, {WINED3DFMT_D32_FLOAT_S8X24_UINT, GL_DEPTH32F_STENCIL8, GL_DEPTH32F_STENCIL8, 0, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, 0, - WINED3D_FORMAT_CAP_TEXTURE | WINED3D_FORMAT_CAP_DEPTH_STENCIL | WINED3D_FORMAT_CAP_SHADOW, + WINED3D_FORMAT_CAP_TEXTURE | WINED3D_FORMAT_CAP_DEPTH_STENCIL, ARB_DEPTH_BUFFER_FLOAT, NULL}, {WINED3DFMT_S8_UINT_D24_FLOAT, GL_DEPTH32F_STENCIL8, GL_DEPTH32F_STENCIL8, 0, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, 8, - WINED3D_FORMAT_CAP_TEXTURE | WINED3D_FORMAT_CAP_DEPTH_STENCIL | WINED3D_FORMAT_CAP_SHADOW, + WINED3D_FORMAT_CAP_TEXTURE | WINED3D_FORMAT_CAP_DEPTH_STENCIL, ARB_DEPTH_BUFFER_FLOAT, convert_s8_uint_d24_float}, {WINED3DFMT_R32G32B32A32_UINT, GL_RGBA32UI, GL_RGBA32UI, 0, GL_RGBA_INTEGER, GL_UNSIGNED_INT, 0, @@ -1930,6 +1930,8 @@ static void parse_channel_desc(struct wined3d_format *format, const char *channe attrs |= WINED3D_FORMAT_ATTR_INTEGER; if (channel_type == WINED3D_CHANNEL_TYPE_FLOAT) attrs |= WINED3D_FORMAT_ATTR_FLOAT; + if (channel_type == WINED3D_CHANNEL_TYPE_DEPTH) + attrs |= WINED3D_FORMAT_ATTR_SHADOW; if (channel_type != WINED3D_CHANNEL_TYPE_UNUSED) ++component_count;
@@ -3105,7 +3107,7 @@ static BOOL init_format_texture_info(struct wined3d_adapter *adapter, struct win format_clear_caps(&format->f, WINED3D_FORMAT_CAP_SRGB_READ | WINED3D_FORMAT_CAP_SRGB_WRITE); }
- if (!gl_info->supported[ARB_SHADOW] && (format->f.caps[WINED3D_GL_RES_TYPE_TEX_2D] & WINED3D_FORMAT_CAP_SHADOW)) + if (!gl_info->supported[ARB_SHADOW] && (format->f.attrs & WINED3D_FORMAT_ATTR_SHADOW)) format_clear_caps(&format->f, WINED3D_FORMAT_CAP_TEXTURE);
query_internal_format(adapter, format, &format_texture_info[i], gl_info, FALSE); diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 2716645fea0..7b955d798f8 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -4544,6 +4544,7 @@ extern enum wined3d_format_id pixelformat_for_depth(DWORD depth); #define WINED3D_FORMAT_ATTR_MAPPABLE 0x00000400 #define WINED3D_FORMAT_ATTR_CAST_TO_BLOCK 0x00000800 #define WINED3D_FORMAT_ATTR_PLANAR 0x00001000 +#define WINED3D_FORMAT_ATTR_SHADOW 0x00002000
/* Pixel format capabilities */ #define WINED3D_FORMAT_CAP_POSTPIXELSHADER_BLENDING 0x00000001 @@ -4557,7 +4558,6 @@ extern enum wined3d_format_id pixelformat_for_depth(DWORD depth); #define WINED3D_FORMAT_CAP_SRGB_READ 0x00000100 #define WINED3D_FORMAT_CAP_SRGB_WRITE 0x00000200 #define WINED3D_FORMAT_CAP_VTF 0x00000400 -#define WINED3D_FORMAT_CAP_SHADOW 0x00000800 #define WINED3D_FORMAT_CAP_TEXTURE 0x00001000 #define WINED3D_FORMAT_CAP_GEN_MIPMAP 0x00002000 #define WINED3D_FORMAT_CAP_VERTEX_ATTRIBUTE 0x00004000