[Mesa-dev] [PATCH] mesa: fix up some texture error checks
Roland Scheidegger
sroland at vmware.com
Fri Jul 17 08:09:59 PDT 2015
Am 17.07.2015 um 16:18 schrieb Brian Paul:
> On 07/16/2015 03:15 PM, sroland at vmware.com wrote:
>> From: Roland Scheidegger <sroland at vmware.com>
>>
>> In particular, we were incorrectly accepting s3tc (and lots of others)
>> for CompressedTexSubImage3D (but not CompressedTexImage3D) calls with 3d
>> targets. At this time, the only allowed formats for these calls are the
>> bptc ones, since none of the specific extensions allow it (astc hdr
>> would).
>> Also, fix up a bug in _mesa_target_can_be_compressed - 3d target needs to
>> be allowed for bptc formats.
>> ---
>> src/mesa/main/teximage.c | 41
>> ++++++++++++++++++++---------------------
>> src/mesa/main/texstorage.c | 1 +
>> 2 files changed, 21 insertions(+), 21 deletions(-)
>>
>> diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
>> index 3d85615..4389082 100644
>> --- a/src/mesa/main/teximage.c
>> +++ b/src/mesa/main/teximage.c
>> @@ -1793,8 +1793,6 @@ GLboolean
>> _mesa_target_can_be_compressed(const struct gl_context *ctx, GLenum
>> target,
>> GLenum intFormat)
>> {
>> - (void) intFormat; /* not used yet */
>> -
>> switch (target) {
>> case GL_TEXTURE_2D:
>> case GL_PROXY_TEXTURE_2D:
>> @@ -1814,6 +1812,16 @@ _mesa_target_can_be_compressed(const struct
>> gl_context *ctx, GLenum target,
>> case GL_PROXY_TEXTURE_CUBE_MAP_ARRAY:
>> case GL_TEXTURE_CUBE_MAP_ARRAY:
>> return ctx->Extensions.ARB_texture_cube_map_array;
>> + case GL_TEXTURE_3D:
>> + switch (intFormat) {
>> + case GL_COMPRESSED_RGBA_BPTC_UNORM:
>> + case GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM:
>> + case GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT:
>> + case GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT:
>> + return TRUE;
>> + default:
>> + return FALSE;
>
> I had given my R-b, but those should be GL_TRUE/GL_FALSE to match the rest.
Right, I'll fix that. Thanks!
Roland
>
> -Brian
>
>
>> + }
>> default:
>> return GL_FALSE;
>> }
>> @@ -4575,32 +4583,23 @@ compressed_subtexture_target_check(struct
>> gl_context *ctx, GLenum target,
>> * one of the EAC, ETC2, or RGTC formats and either border is
>> * non-zero, or the effective target for the texture is not
>> * TEXTURE_2D_ARRAY."
>> + * Instead of listing all these, just list those which are
>> allowed,
>> + * which is (at this time) only bptc. Otherwise we'd say s3tc
>> (and more)
>> + * are valid here, which they are not, but of course not
>> mentioned by
>> + * core spec.
>> */
>> if (target != GL_TEXTURE_2D_ARRAY) {
>> bool invalidformat;
>> switch (format) {
>> /* These came from _mesa_is_compressed_format in
>> glformats.c. */
>> - /* EAC formats */
>> - case GL_COMPRESSED_RGBA8_ETC2_EAC:
>> - case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
>> - case GL_COMPRESSED_R11_EAC:
>> - case GL_COMPRESSED_RG11_EAC:
>> - case GL_COMPRESSED_SIGNED_R11_EAC:
>> - case GL_COMPRESSED_SIGNED_RG11_EAC:
>> - /* ETC2 formats */
>> - case GL_COMPRESSED_RGB8_ETC2:
>> - case GL_COMPRESSED_SRGB8_ETC2:
>> - case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
>> - case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
>> - /* RGTC formats */
>> - case GL_COMPRESSED_RED_RGTC1:
>> - case GL_COMPRESSED_SIGNED_RED_RGTC1:
>> - case GL_COMPRESSED_RG_RGTC2:
>> - case GL_COMPRESSED_SIGNED_RG_RGTC2:
>> - invalidformat = true;
>> + case GL_COMPRESSED_RGBA_BPTC_UNORM:
>> + case GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM:
>> + case GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT:
>> + case GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT:
>> + invalidformat = false;
>> break;
>> default:
>> - invalidformat = false;
>> + invalidformat = true;
>> }
>> if (invalidformat) {
>> _mesa_error(ctx, GL_INVALID_OPERATION,
>> diff --git a/src/mesa/main/texstorage.c b/src/mesa/main/texstorage.c
>> index 53cb2c0..aa8fa3e 100644
>> --- a/src/mesa/main/texstorage.c
>> +++ b/src/mesa/main/texstorage.c
>> @@ -309,6 +309,7 @@ tex_storage_error_check(struct gl_context *ctx,
>> GL_INVALID_ENUM : GL_INVALID_OPERATION,
>> "glTex%sStorage%dD(internalformat = %s)", suffix,
>> dims,
>> _mesa_lookup_enum_by_nr(internalformat));
>> + return GL_TRUE;
>> }
>>
>> /* levels check */
>>
>
More information about the mesa-dev
mailing list