[Mesa-dev] [RFC 43/63] mesa/formatquery: Added queries related to texture sampling in shaders

Eduardo Lima Mitev elima at igalia.com
Tue Jan 19 08:42:23 PST 2016


From: Antia Puentes <apuentes at igalia.com>

>From the ARB_internalformat_query2 specification:

   "- VERTEX_TEXTURE: The support for using the resource as a source for
      texture sampling in a vertex shader is written to <params>.

    - TESS_CONTROL_TEXTURE: The support for using the resource as a source for
      texture sampling in a tessellation control shader is written to <params>.

    - TESS_EVALUATION_TEXTURE: The support for using the resource as a source
      for texture sampling in a tessellation evaluation shader is written to
      <params>.

    - GEOMETRY_TEXTURE: The support for using the resource as a source for
      texture sampling in a geometry shader is written to <params>.

    - FRAGMENT_TEXTURE: The support for using the resource as a source for
      texture sampling in a fragment shader is written to <params>.

    - COMPUTE_TEXTURE: The support for using the resource as a source for
      texture sampling in a compute shader is written to <params>."

For all of them,

   "Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
    If the resource or operation is not supported, NONE is returned."
---
 src/mesa/main/formatquery.c | 38 ++++++++++++++++++++++----------------
 1 file changed, 22 insertions(+), 16 deletions(-)

diff --git a/src/mesa/main/formatquery.c b/src/mesa/main/formatquery.c
index 7f24ba5..925c7af 100644
--- a/src/mesa/main/formatquery.c
+++ b/src/mesa/main/formatquery.c
@@ -599,6 +599,12 @@ _mesa_query_internal_format_default(struct gl_context *ctx, GLenum target,
    case GL_SRGB_READ:
    case GL_SRGB_WRITE:
    case GL_SRGB_DECODE_ARB:
+   case GL_VERTEX_TEXTURE:
+   case GL_TESS_CONTROL_TEXTURE:
+   case GL_TESS_EVALUATION_TEXTURE:
+   case GL_GEOMETRY_TEXTURE:
+   case GL_FRAGMENT_TEXTURE:
+   case GL_COMPUTE_TEXTURE:
       params[0] = GL_FULL_SUPPORT;
       break;
 
@@ -1121,27 +1127,27 @@ _mesa_GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname,
       break;
 
    case GL_VERTEX_TEXTURE:
-      /* @TODO */
-      break;
-
    case GL_TESS_CONTROL_TEXTURE:
-      /* @TODO */
-      break;
-
    case GL_TESS_EVALUATION_TEXTURE:
-      /* @TODO */
-      break;
-
    case GL_GEOMETRY_TEXTURE:
-      /* @TODO */
-      break;
-
    case GL_FRAGMENT_TEXTURE:
-      /* @TODO */
-      break;
-
    case GL_COMPUTE_TEXTURE:
-      /* @TODO */
+      if (target == GL_RENDERBUFFER)
+         goto end;
+
+      if ((pname == GL_TESS_CONTROL_TEXTURE ||
+           pname == GL_TESS_EVALUATION_TEXTURE) &&
+          !_mesa_has_tessellation(ctx))
+         goto end;
+
+      if (pname == GL_GEOMETRY_TEXTURE && !_mesa_has_geometry_shaders(ctx))
+         goto end;
+
+      if (pname == GL_COMPUTE_TEXTURE && !_mesa_has_compute_shaders(ctx))
+         goto end;
+
+      ctx->Driver.QueryInternalFormat(ctx, target, internalformat, pname,
+                                      buffer);
       break;
 
    case GL_TEXTURE_SHADOW:
-- 
2.5.3



More information about the mesa-dev mailing list