mesa: extend _mesa_lookup_or_create_texture to support EXT_dsa
authorPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Tue, 4 Jun 2019 13:47:05 +0000 (15:47 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Fri, 28 Jun 2019 19:41:32 +0000 (15:41 -0400)
Adds a boolean to implement EXT_dsa specifics.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
src/mesa/main/texobj.c
src/mesa/main/texobj.h

index 6dbe56fa19c9e468d1b77d163fbb3e22af26e5c7..5d49ce7924c1968ac0bdcf47f748608b14943343 100644 (file)
@@ -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;
index 3ebfa6715db4da746082b6d67a0bca9bd72f5847..54399af538196cc5c25258020044f609d8b6d668 100644 (file)
@@ -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);
 
 /*@}*/