[Mesa-dev] [PATCH 1/4] mesa: properly return GetTexLevelParameter queries for buffer textures

Ilia Mirkin imirkin at alum.mit.edu
Sun Mar 27 15:19:54 UTC 2016


1-month ping

dEQP has a number of tests both for texture buffers, as well as image
buffers. would be nice to have access to those.

  -ilia

On Sat, Feb 27, 2016 at 4:29 PM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
> This fixes all failures with dEQP tests in this area. While
> ARB_texture_buffer_object explicitly says that GetTexLevelParameter & co
> should not be supported, GL 3.1 reverses this decision and allows all of
> these queries there.
>
> Conversely, there is no text that forbids the buffer-specific queries
> from being used with non-buffer images.
>
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> ---
>  src/mesa/main/texparam.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++--
>  1 file changed, 52 insertions(+), 2 deletions(-)
>
> diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c
> index 3b769f4..9d94636 100644
> --- a/src/mesa/main/texparam.c
> +++ b/src/mesa/main/texparam.c
> @@ -1447,6 +1447,29 @@ get_tex_level_parameter_image(struct gl_context *ctx,
>           *params = img->FixedSampleLocations;
>           break;
>
> +      /* There is never a buffer data store here, but these pnames still have
> +       * to work.
> +       */
> +
> +      /* GL_ARB_texture_buffer_object */
> +      case GL_TEXTURE_BUFFER_DATA_STORE_BINDING:
> +         if (!ctx->Extensions.ARB_texture_buffer_object)
> +            goto invalid_pname;
> +         *params = 0;
> +         break;
> +
> +      /* GL_ARB_texture_buffer_range */
> +      case GL_TEXTURE_BUFFER_OFFSET:
> +         if (!ctx->Extensions.ARB_texture_buffer_range)
> +            goto invalid_pname;
> +         *params = 0;
> +         break;
> +      case GL_TEXTURE_BUFFER_SIZE:
> +         if (!ctx->Extensions.ARB_texture_buffer_range)
> +            goto invalid_pname;
> +         *params = 0;
> +         break;
> +
>        default:
>           goto invalid_pname;
>     }
> @@ -1468,13 +1491,24 @@ get_tex_level_parameter_buffer(struct gl_context *ctx,
>  {
>     const struct gl_buffer_object *bo = texObj->BufferObject;
>     mesa_format texFormat = texObj->_BufferObjectFormat;
> +   int bytes = MAX2(1, _mesa_get_format_bytes(texFormat));
>     GLenum internalFormat = texObj->BufferObjectFormat;
>     GLenum baseFormat = _mesa_get_format_base_format(texFormat);
>     const char *suffix = dsa ? "ture" : "";
>
>     if (!bo) {
>        /* undefined texture buffer object */
> -      *params = pname == GL_TEXTURE_COMPONENTS ? 1 : 0;
> +      switch (pname) {
> +      case GL_TEXTURE_FIXED_SAMPLE_LOCATIONS:
> +         *params = GL_TRUE;
> +         break;
> +      case GL_TEXTURE_INTERNAL_FORMAT:
> +         *params = internalFormat;
> +         break;
> +      default:
> +         *params = 0;
> +         break;
> +      }
>        return;
>     }
>
> @@ -1483,10 +1517,13 @@ get_tex_level_parameter_buffer(struct gl_context *ctx,
>           *params = bo->Name;
>           break;
>        case GL_TEXTURE_WIDTH:
> -         *params = bo->Size;
> +         *params = ((texObj->BufferSize == -1) ? bo->Size : texObj->BufferSize)
> +            / bytes;
>           break;
>        case GL_TEXTURE_HEIGHT:
>        case GL_TEXTURE_DEPTH:
> +         *params = 1;
> +         break;
>        case GL_TEXTURE_BORDER:
>        case GL_TEXTURE_SHARED_SIZE:
>        case GL_TEXTURE_COMPRESSED:
> @@ -1536,6 +1573,19 @@ get_tex_level_parameter_buffer(struct gl_context *ctx,
>           *params = (texObj->BufferSize == -1) ? bo->Size : texObj->BufferSize;
>           break;
>
> +      /* GL_ARB_texture_multisample */
> +      case GL_TEXTURE_SAMPLES:
> +         if (!ctx->Extensions.ARB_texture_multisample)
> +            goto invalid_pname;
> +         *params = 0;
> +         break;
> +
> +      case GL_TEXTURE_FIXED_SAMPLE_LOCATIONS:
> +         if (!ctx->Extensions.ARB_texture_multisample)
> +            goto invalid_pname;
> +         *params = GL_TRUE;
> +         break;
> +
>        /* GL_ARB_texture_compression */
>        case GL_TEXTURE_COMPRESSED_IMAGE_SIZE:
>           /* Always illegal for GL_TEXTURE_BUFFER */
> --
> 2.4.10
>


More information about the mesa-dev mailing list