diff options
author | Pierre-Eric Pelloux-Prayer <[email protected]> | 2019-06-04 15:47:05 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2019-06-28 15:41:32 -0400 |
commit | 29194648a6afc2cd681e3f5d1643ca49220b7975 (patch) | |
tree | c7ad1137fb7553ed27c882f0043edb596c3ad605 | |
parent | 274104ec381ebb1505e0e078959f94724b51ec58 (diff) |
mesa: extend _mesa_lookup_or_create_texture to support EXT_dsa
Adds a boolean to implement EXT_dsa specifics.
Reviewed-by: Marek Olšák <[email protected]>
Signed-off-by: Marek Olšák <[email protected]>
-rw-r--r-- | src/mesa/main/texobj.c | 20 | ||||
-rw-r--r-- | src/mesa/main/texobj.h | 2 |
2 files changed, 19 insertions, 3 deletions
diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c index 6dbe56fa19c..5d49ce7924c 100644 --- a/src/mesa/main/texobj.c +++ b/src/mesa/main/texobj.c @@ -1705,12 +1705,28 @@ _mesa_bind_texture(struct gl_context *ctx, GLenum target, struct gl_texture_object * _mesa_lookup_or_create_texture(struct gl_context *ctx, GLenum target, - GLuint texName, bool no_error, + GLuint texName, bool no_error, bool is_ext_dsa, const char *caller) { struct gl_texture_object *newTexObj = NULL; int targetIndex; + if (is_ext_dsa) { + if (_mesa_is_proxy_texture(target)) { + /* EXT_dsa allows proxy targets only when texName is 0 */ + if (texName != 0) { + _mesa_error(ctx, GL_INVALID_OPERATION, "%s(target = %s)", caller, + _mesa_enum_to_string(target)); + return NULL; + } + return _mesa_get_current_tex_object(ctx, target); + } + if (GL_TEXTURE_CUBE_MAP_POSITIVE_X <= target && + target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z) { + target = GL_TEXTURE_CUBE_MAP; + } + } + targetIndex = _mesa_tex_target_to_index(ctx, target); if (!no_error && targetIndex < 0) { _mesa_error(ctx, GL_INVALID_ENUM, "%s(target = %s)", caller, @@ -1780,7 +1796,7 @@ bind_texture(struct gl_context *ctx, GLenum target, GLuint texName, GLenum texunit, bool no_error, const char *caller) { struct gl_texture_object *newTexObj = - _mesa_lookup_or_create_texture(ctx, target, texName, no_error, + _mesa_lookup_or_create_texture(ctx, target, texName, no_error, false, "glBindTexture"); if (!newTexObj) return; diff --git a/src/mesa/main/texobj.h b/src/mesa/main/texobj.h index 3ebfa6715db..54399af5381 100644 --- a/src/mesa/main/texobj.h +++ b/src/mesa/main/texobj.h @@ -179,7 +179,7 @@ _mesa_bind_texture(struct gl_context *ctx, GLenum target, extern struct gl_texture_object * _mesa_lookup_or_create_texture(struct gl_context *ctx, GLenum target, - GLuint texName, bool no_error, + GLuint texName, bool no_error, bool is_ext_dsa, const char *name); /*@}*/ |