mesa: add KHR_no_error support for CompressedTex*SubImage1D()
authorTimothy Arceri <tarceri@itsqueeze.com>
Wed, 10 May 2017 07:20:10 +0000 (17:20 +1000)
committerTimothy Arceri <tarceri@itsqueeze.com>
Wed, 17 May 2017 00:12:03 +0000 (10:12 +1000)
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/mapi/glapi/gen/ARB_direct_state_access.xml
src/mapi/glapi/gen/gl_API.xml
src/mesa/main/teximage.c
src/mesa/main/teximage.h

index 2f2ba20b7d47779f463416a61b55aaf373d9c483..4597d3b6d38a89ee769035f0b00f7b2208b8153d 100644 (file)
       <param name="pixels" type="const GLvoid *" />
    </function>
 
-   <function name="CompressedTextureSubImage1D">
+   <function name="CompressedTextureSubImage1D" no_error="true">
       <param name="texture" type="GLuint" />
       <param name="level" type="GLint" />
       <param name="xoffset" type="GLint" />
index 50d60f53da6bcee3982fab8928f280b6eea1e045..026f74c2a049dc4ec311522a2ce9397b33e75d99 100644 (file)
         <glx rop="218" handcode="client"/>
     </function>
 
-    <function name="CompressedTexSubImage1D" marshal="sync">
+    <function name="CompressedTexSubImage1D" marshal="sync" no_error="true">
         <param name="target" type="GLenum"/>
         <param name="level" type="GLint"/>
         <param name="xoffset" type="GLint"/>
index c95e9e276cf416fe4093642cbb4d157091f2b2eb..722d8809d393255da93def88b19fd2451a9477b2 100644 (file)
@@ -4533,7 +4533,7 @@ static ALWAYS_INLINE void
 compressed_tex_sub_image(unsigned dim, GLenum target, GLuint texture,
                          GLint level, GLint xoffset, GLsizei width,
                          GLenum format, GLsizei imageSize, const GLvoid *data,
-                         bool dsa, const char *caller)
+                         bool dsa, bool no_error, const char *caller)
 {
    struct gl_texture_object *texObj;
    struct gl_texture_image *texImage;
@@ -4541,25 +4541,31 @@ compressed_tex_sub_image(unsigned dim, GLenum target, GLuint texture,
    GET_CURRENT_CONTEXT(ctx);
 
    if (dsa) {
-      texObj = _mesa_lookup_texture_err(ctx, texture, caller);
-      if (!texObj)
-         return;
+      if (no_error) {
+         texObj = _mesa_lookup_texture(ctx, texture);
+      } else {
+         texObj = _mesa_lookup_texture_err(ctx, texture, caller);
+         if (!texObj)
+            return;
+      }
 
       target = texObj->Target;
    }
 
-   if (compressed_subtexture_target_check(ctx, target, dim, format, dsa,
+   if (!no_error &&
+       compressed_subtexture_target_check(ctx, target, dim, format, dsa,
                                           caller)) {
       return;
    }
 
    if (!dsa) {
       texObj = _mesa_get_current_tex_object(ctx, target);
-         if (!texObj)
+         if (!no_error && !texObj)
             return;
    }
 
-   if (compressed_subtexture_error_check(ctx, dim, texObj, target, level,
+   if (!no_error &&
+       compressed_subtexture_error_check(ctx, dim, texObj, target, level,
                                          xoffset, 0, 0, width, 1, 1, format,
                                          imageSize, data, caller)) {
       return;
@@ -4574,23 +4580,48 @@ compressed_tex_sub_image(unsigned dim, GLenum target, GLuint texture,
 }
 
 
+void GLAPIENTRY
+_mesa_CompressedTexSubImage1D_no_error(GLenum target, GLint level,
+                                       GLint xoffset, GLsizei width,
+                                       GLenum format, GLsizei imageSize,
+                                       const GLvoid *data)
+{
+   compressed_tex_sub_image(1, target, 0, level, xoffset, width, format,
+                            imageSize, data, false, true,
+                            "glCompressedTexSubImage1D");
+}
+
+
 void GLAPIENTRY
 _mesa_CompressedTexSubImage1D(GLenum target, GLint level, GLint xoffset,
                               GLsizei width, GLenum format,
                               GLsizei imageSize, const GLvoid *data)
 {
    compressed_tex_sub_image(1, target, 0, level, xoffset, width, format,
-                            imageSize, data, false,
+                            imageSize, data, false, false,
                             "glCompressedTexSubImage1D");
 }
 
+
+void GLAPIENTRY
+_mesa_CompressedTextureSubImage1D_no_error(GLuint texture, GLint level,
+                                           GLint xoffset, GLsizei width,
+                                           GLenum format, GLsizei imageSize,
+                                           const GLvoid *data)
+{
+   compressed_tex_sub_image(1, 0, texture, level, xoffset, width,
+                            format, imageSize, data, true, true,
+                            "glCompressedTextureSubImage1D");
+}
+
+
 void GLAPIENTRY
 _mesa_CompressedTextureSubImage1D(GLuint texture, GLint level, GLint xoffset,
                                   GLsizei width, GLenum format,
                                   GLsizei imageSize, const GLvoid *data)
 {
    compressed_tex_sub_image(1, 0, texture, level, xoffset, width,
-                            format, imageSize, data, true,
+                            format, imageSize, data, true, false,
                             "glCompressedTextureSubImage1D");
 }
 
index 5becd2934443f1a04da600cd67e272552cb8c278..08e01c6641dffb1dde4e0e042f2454e1f51fcd64 100644 (file)
@@ -386,12 +386,23 @@ _mesa_CompressedTexImage3D(GLenum target, GLint level,
                               GLsizei height, GLsizei depth, GLint border,
                               GLsizei imageSize, const GLvoid *data);
 
+
+extern void GLAPIENTRY
+_mesa_CompressedTexSubImage1D_no_error(GLenum target, GLint level,
+                                       GLint xoffset, GLsizei width,
+                                       GLenum format, GLsizei imageSize,
+                                       const GLvoid *data);
 extern void GLAPIENTRY
 _mesa_CompressedTexSubImage1D(GLenum target, GLint level, GLint xoffset,
                                  GLsizei width, GLenum format,
                                  GLsizei imageSize, const GLvoid *data);
 
 extern void GLAPIENTRY
+_mesa_CompressedTextureSubImage1D_no_error(GLuint texture, GLint level,
+                                           GLint xoffset, GLsizei width,
+                                           GLenum format, GLsizei imageSize,
+                                           const GLvoid *data);
+extern void GLAPIENTRY
 _mesa_CompressedTextureSubImage1D(GLuint texture, GLint level, GLint xoffset,
                                   GLsizei width, GLenum format,
                                   GLsizei imageSize, const GLvoid *data);