[Mesa-dev] [PATCH 14/65] mesa/formatquery: Added a func to check if the <target> is supported

Eduardo Lima Mitev elima at igalia.com
Wed Feb 3 15:44:59 UTC 2016


From: Antia Puentes <apuentes at igalia.com>

>From the ARB_internalformat_query2 spec:

  "If the particular <target> and <internalformat> combination do not make
   sense, or if a particular type of <target> is not supported by the
   implementation the "unsupported" answer should be given. This is not an
   error."

This function checks if the <target> is supported by the implementation.
---
 src/mesa/main/formatquery.c | 69 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 69 insertions(+)

diff --git a/src/mesa/main/formatquery.c b/src/mesa/main/formatquery.c
index 9c1f28a..56db0b5 100644
--- a/src/mesa/main/formatquery.c
+++ b/src/mesa/main/formatquery.c
@@ -28,6 +28,7 @@
 #include "enums.h"
 #include "fbobject.h"
 #include "formatquery.h"
+#include "teximage.h"
 
 /* Handles the cases where either ARB_internalformat_query or
  * ARB_internalformat_query2 have to return an error.
@@ -362,6 +363,74 @@ _set_default_response(GLenum pname, GLint buffer[16])
    }
 }
 
+static bool
+_is_target_supported(struct gl_context *ctx, GLenum target)
+{
+   /* The ARB_internalformat_query2 spec says:
+    *
+    *     "if a particular type of <target> is not supported by the
+    *     implementation the "unsupported" answer should be given.
+    *     This is not an error."
+    */
+   switch(target){
+   case GL_TEXTURE_2D:
+   case GL_TEXTURE_3D:
+      break;
+
+   case GL_TEXTURE_1D:
+      if (!_mesa_is_desktop_gl(ctx))
+         return false;
+      break;
+
+   case GL_TEXTURE_1D_ARRAY:
+      if (!_mesa_has_EXT_texture_array(ctx))
+         return false;
+      break;
+
+   case GL_TEXTURE_2D_ARRAY:
+      if (!(_mesa_has_EXT_texture_array(ctx) || _mesa_is_gles3(ctx)))
+         return false;
+      break;
+
+   case GL_TEXTURE_CUBE_MAP:
+      if (!_mesa_has_ARB_texture_cube_map(ctx))
+         return false;
+      break;
+
+   case GL_TEXTURE_CUBE_MAP_ARRAY:
+      if (!_mesa_has_ARB_texture_cube_map_array(ctx))
+         return false;
+      break;
+
+   case GL_TEXTURE_RECTANGLE:
+      if (!_mesa_has_NV_texture_rectangle(ctx))
+          return false;
+      break;
+
+   case GL_TEXTURE_BUFFER:
+      if (!_mesa_has_ARB_texture_buffer_object(ctx))
+         return false;
+      break;
+
+   case GL_RENDERBUFFER:
+      if (!_mesa_has_ARB_framebuffer_object(ctx))
+         return false;
+      break;
+
+   case GL_TEXTURE_2D_MULTISAMPLE:
+   case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
+      if (!(_mesa_has_ARB_texture_multisample(ctx) ||
+            _mesa_is_gles31(ctx)))
+         return false;
+      break;
+
+   default:
+      unreachable("invalid target");
+   }
+
+   return true;
+}
+
 /* default implementation of QueryInternalFormat driverfunc, for
  * drivers not implementing ARB_internalformat_query2.
  */
-- 
2.5.3



More information about the mesa-dev mailing list