[Mesa-stable] [Mesa-dev] [PATCH 1/3] mesa: Generate pname-based errors from glGetTexLevelParameter first
Emil Velikov
emil.l.velikov at gmail.com
Tue Aug 26 14:23:15 PDT 2014
On 17/06/14 14:41, Brian Paul wrote:
> On 06/16/2014 07:34 PM, Ian Romanick wrote:
>> From: Ian Romanick <ian.d.romanick at intel.com>
>>
>> Previously, calling
>>
>> glGenTextures(1, &t);
>> glBindTexture(GL_TEXTURE_2D, t);
>> glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, 0xDEADBEEF, &value);
>>
>> would not generate an error.
>>
Hi Ian,
This patch has been nominated for stable for a couple of months but is jet to
land in master. Has it been super-seeded by another patch or is there anything
else stopping it from going forward ?
Thanks
Emil
>> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
>> Cc: "10.2" <mesa-stable at lists.freedesktop.org>
>> ---
>> src/mesa/main/texparam.c | 63
>> +++++++++++++++++++++++++++++++++++++++---------
>> 1 file changed, 52 insertions(+), 11 deletions(-)
>>
>> diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c
>> index dc17ea5..565c1d6 100644
>> --- a/src/mesa/main/texparam.c
>> +++ b/src/mesa/main/texparam.c
>> @@ -1053,6 +1053,58 @@ get_tex_level_parameter_image(struct gl_context *ctx,
>> const struct gl_texture_image *img = NULL;
>> mesa_format texFormat;
>>
>> + /* Generate pname errors now. OpenGL 4.0 requires special behavior if the
>> + * image is undefined, but that does not supersede pname-based errors.
>> + */
>> + switch (pname) {
>> + case GL_TEXTURE_WIDTH:
>> + case GL_TEXTURE_HEIGHT:
>> + case GL_TEXTURE_DEPTH:
>> + case GL_TEXTURE_INTERNAL_FORMAT:
>> + case GL_TEXTURE_BORDER:
>> + case GL_TEXTURE_RED_SIZE:
>> + case GL_TEXTURE_GREEN_SIZE:
>> + case GL_TEXTURE_BLUE_SIZE:
>> + case GL_TEXTURE_ALPHA_SIZE:
>> + case GL_TEXTURE_INTENSITY_SIZE:
>> + case GL_TEXTURE_LUMINANCE_SIZE:
>> + break;
>> + case GL_TEXTURE_DEPTH_SIZE_ARB:
>> + if (!ctx->Extensions.ARB_depth_texture)
>> + goto invalid_pname;
>> + break;
>> + case GL_TEXTURE_STENCIL_SIZE:
>> + break;
>> + case GL_TEXTURE_SHARED_SIZE:
>> + if (ctx->Version < 30 &&
>> + !ctx->Extensions.EXT_texture_shared_exponent)
>> + goto invalid_pname;
>> + break;
>> + case GL_TEXTURE_COMPRESSED_IMAGE_SIZE:
>> + case GL_TEXTURE_COMPRESSED:
>> + break;
>> + case GL_TEXTURE_RED_TYPE_ARB:
>> + case GL_TEXTURE_GREEN_TYPE_ARB:
>> + case GL_TEXTURE_BLUE_TYPE_ARB:
>> + case GL_TEXTURE_ALPHA_TYPE_ARB:
>> + case GL_TEXTURE_LUMINANCE_TYPE_ARB:
>> + case GL_TEXTURE_INTENSITY_TYPE_ARB:
>> + case GL_TEXTURE_DEPTH_TYPE_ARB:
>> + if (!ctx->Extensions.ARB_texture_float)
>> + goto invalid_pname;
>> + break;
>> + case GL_TEXTURE_SAMPLES:
>> + if (!ctx->Extensions.ARB_texture_multisample)
>> + goto invalid_pname;
>> + break;
>> + case GL_TEXTURE_FIXED_SAMPLE_LOCATIONS:
>> + if (!ctx->Extensions.ARB_texture_multisample)
>> + goto invalid_pname;
>> + break;
>> + default:
>> + goto invalid_pname;
>> + }
>> +
>> img = _mesa_select_tex_image(ctx, texObj, target, level);
>> if (!img || img->TexFormat == MESA_FORMAT_NONE) {
>> /* In case of undefined texture image return the default values.
>> @@ -1135,17 +1187,12 @@ get_tex_level_parameter_image(struct gl_context *ctx,
>> }
>> break;
>> case GL_TEXTURE_DEPTH_SIZE_ARB:
>> - if (!ctx->Extensions.ARB_depth_texture)
>> - goto invalid_pname;
>> *params = _mesa_get_format_bits(texFormat, pname);
>> break;
>> case GL_TEXTURE_STENCIL_SIZE:
>> *params = _mesa_get_format_bits(texFormat, pname);
>> break;
>> case GL_TEXTURE_SHARED_SIZE:
>> - if (ctx->Version < 30 &&
>> - !ctx->Extensions.EXT_texture_shared_exponent)
>> - goto invalid_pname;
>> *params = texFormat == MESA_FORMAT_R9G9B9E5_FLOAT ? 5 : 0;
>> break;
>>
>> @@ -1173,8 +1220,6 @@ get_tex_level_parameter_image(struct gl_context *ctx,
>> case GL_TEXTURE_LUMINANCE_TYPE_ARB:
>> case GL_TEXTURE_INTENSITY_TYPE_ARB:
>> case GL_TEXTURE_DEPTH_TYPE_ARB:
>> - if (!ctx->Extensions.ARB_texture_float)
>> - goto invalid_pname;
>> if (_mesa_base_format_has_channel(img->_BaseFormat, pname))
>> *params = _mesa_get_format_datatype(texFormat);
>> else
>> @@ -1183,14 +1228,10 @@ get_tex_level_parameter_image(struct gl_context *ctx,
>>
>> /* GL_ARB_texture_multisample */
>> case GL_TEXTURE_SAMPLES:
>> - if (!ctx->Extensions.ARB_texture_multisample)
>> - goto invalid_pname;
>> *params = img->NumSamples;
>> break;
>>
>> case GL_TEXTURE_FIXED_SAMPLE_LOCATIONS:
>> - if (!ctx->Extensions.ARB_texture_multisample)
>> - goto invalid_pname;
>> *params = img->FixedSampleLocations;
>> break;
>>
>>
>
> I think another way of handling this might be to define/use a dummy
> gl_texture_image to use when img would have been null. The dummy
> gl_texture_image would be initialized with suitable defaults for all the
> query-able fields (but mostly zeros).
>
> That would save us the extra switch and might be less work if new queries are
> added in the future.
>
> -Brian
>
>
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-stable
mailing list