mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-10 16:50:13 +01:00
mesa: properly return GetTexLevelParameter queries for buffer textures
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@alum.mit.edu> Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
parent
4ed4a2af86
commit
659beca666
1 changed files with 52 additions and 2 deletions
|
|
@ -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 */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue