Commit 00275acc authored by Henri Verbeet's avatar Henri Verbeet Committed by Alexandre Julliard

wined3d: Validate format capabilities against the bind flags instead of the…

wined3d: Validate format capabilities against the bind flags instead of the usage flags in resource_init(). Note that buffer resources don't have an inherent format, so validating bind flags against WINED3DFMT_UNKNOWN doesn't make a lot of sense. This wasn't an issue previously because d3d11 doesn't set the usage flags corresponding to the bind flags for buffer resources, and earlier versions of D3D didn't allow buffers to be used as e.g. shader resources. Signed-off-by: 's avatarHenri Verbeet <hverbeet@codeweavers.com> Signed-off-by: 's avatarAlexandre Julliard <julliard@winehq.org>
parent 7d83ebee
...@@ -107,28 +107,33 @@ HRESULT resource_init(struct wined3d_resource *resource, struct wined3d_device * ...@@ -107,28 +107,33 @@ HRESULT resource_init(struct wined3d_resource *resource, struct wined3d_device *
if (base_type == WINED3D_GL_RES_TYPE_COUNT) if (base_type == WINED3D_GL_RES_TYPE_COUNT)
base_type = gl_type; base_type = gl_type;
if ((usage & WINED3DUSAGE_RENDERTARGET) && !(format->flags[gl_type] & WINED3DFMT_FLAG_RENDERTARGET)) if (type != WINED3D_RTYPE_BUFFER)
{ {
WARN("Format %s cannot be used for render targets.\n", debug_d3dformat(format->id)); if ((bind_flags & WINED3D_BIND_RENDER_TARGET)
continue; && !(format->flags[gl_type] & WINED3DFMT_FLAG_RENDERTARGET))
} {
if ((usage & WINED3DUSAGE_DEPTHSTENCIL) WARN("Format %s cannot be used for render targets.\n", debug_d3dformat(format->id));
&& !(format->flags[gl_type] & (WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL))) continue;
{ }
WARN("Format %s cannot be used for depth/stencil buffers.\n", debug_d3dformat(format->id)); if ((bind_flags & WINED3D_BIND_DEPTH_STENCIL)
continue; && !(format->flags[gl_type] & (WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL)))
} {
if (wined3d_settings.offscreen_rendering_mode == ORM_FBO WARN("Format %s cannot be used for depth/stencil buffers.\n", debug_d3dformat(format->id));
&& usage & (WINED3DUSAGE_RENDERTARGET | WINED3DUSAGE_DEPTHSTENCIL) continue;
&& !(format->flags[gl_type] & WINED3DFMT_FLAG_FBO_ATTACHABLE)) }
{ if (wined3d_settings.offscreen_rendering_mode == ORM_FBO
WARN("Render target or depth stencil is not FBO attachable.\n"); && bind_flags & (WINED3D_BIND_RENDER_TARGET | WINED3D_BIND_DEPTH_STENCIL)
continue; && !(format->flags[gl_type] & WINED3DFMT_FLAG_FBO_ATTACHABLE))
} {
if ((usage & WINED3DUSAGE_TEXTURE) && !(format->flags[gl_type] & WINED3DFMT_FLAG_TEXTURE)) WARN("Render target or depth stencil is not FBO attachable.\n");
{ continue;
WARN("Format %s cannot be used for texturing.\n", debug_d3dformat(format->id)); }
continue; if ((bind_flags & WINED3D_BIND_SHADER_RESOURCE)
&& !(format->flags[gl_type] & WINED3DFMT_FLAG_TEXTURE))
{
WARN("Format %s cannot be used for texturing.\n", debug_d3dformat(format->id));
continue;
}
} }
if (((width & (width - 1)) || (height & (height - 1))) if (((width & (width - 1)) || (height & (height - 1)))
&& !d3d_info->texture_npot && !d3d_info->texture_npot
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment