[PATCH 3/5] wined3d: Validate required OpenGL extensions in wined3d_texture_gl_init() instead of wined3d_texture_init().
Henri Verbeet
hverbeet at codeweavers.com
Tue Oct 30 04:48:45 CDT 2018
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
dlls/wined3d/texture.c | 34 +++++++++++++++-------------------
1 file changed, 15 insertions(+), 19 deletions(-)
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index 9b9e825f4fb..907ede7010f 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -2881,26 +2881,10 @@ static HRESULT wined3d_texture_init(struct wined3d_texture *texture, const struc
if (!desc->width || !desc->height || !desc->depth)
return WINED3DERR_INVALIDCALL;
- if (desc->resource_type == WINED3D_RTYPE_TEXTURE_3D)
+ if (desc->resource_type == WINED3D_RTYPE_TEXTURE_3D && layer_count != 1)
{
- if (layer_count != 1)
- {
- ERR("Invalid layer count for volume texture.\n");
- return E_INVALIDARG;
- }
-
- if (!gl_info->supported[EXT_TEXTURE3D])
- {
- WARN("OpenGL implementation does not support 3D textures.\n");
- return WINED3DERR_INVALIDCALL;
- }
- }
-
- if (!(desc->usage & WINED3DUSAGE_LEGACY_CUBEMAP) && layer_count > 1
- && !gl_info->supported[EXT_TEXTURE_ARRAY])
- {
- WARN("OpenGL implementation does not support array textures.\n");
- return WINED3DERR_INVALIDCALL;
+ ERR("Invalid layer count for volume texture.\n");
+ return E_INVALIDARG;
}
texture->sub_resources = sub_resources;
@@ -3562,6 +3546,13 @@ static HRESULT wined3d_texture_gl_init(struct wined3d_texture_gl *texture_gl, st
texture_gl, device, desc, layer_count, level_count,
flags, parent, parent_ops, sub_resources);
+ if (!(desc->usage & WINED3DUSAGE_LEGACY_CUBEMAP) && layer_count > 1
+ && !gl_info->supported[EXT_TEXTURE_ARRAY])
+ {
+ WARN("OpenGL implementation does not support array textures.\n");
+ return WINED3DERR_INVALIDCALL;
+ }
+
switch (desc->resource_type)
{
case WINED3D_RTYPE_TEXTURE_1D:
@@ -3595,6 +3586,11 @@ static HRESULT wined3d_texture_gl_init(struct wined3d_texture_gl *texture_gl, st
break;
case WINED3D_RTYPE_TEXTURE_3D:
+ if (!gl_info->supported[EXT_TEXTURE3D])
+ {
+ WARN("OpenGL implementation does not support 3D textures.\n");
+ return WINED3DERR_INVALIDCALL;
+ }
texture_ops = &texture3d_ops;
texture_gl->target = GL_TEXTURE_3D;
break;
--
2.11.0
More information about the wine-devel
mailing list