On Tuesday, 2018-02-06 09:59:32 -0700, Brian Paul wrote: > Instead of testing for formats==NULL everywhere, just point formats at > a dummy array which will be discarded. > --- > src/mesa/main/texcompress.c | 200 > ++++++++++++++++++-------------------------- > 1 file changed, 83 insertions(+), 117 deletions(-) > > diff --git a/src/mesa/main/texcompress.c b/src/mesa/main/texcompress.c > index 15970a7..1cc13a5 100644 > --- a/src/mesa/main/texcompress.c > +++ b/src/mesa/main/texcompress.c > @@ -263,27 +263,23 @@ _mesa_gl_compressed_format_base_format(GLenum format) > GLuint > _mesa_get_compressed_formats(struct gl_context *ctx, GLint *formats) > { > + GLint discard_formats[100];
Current max size is 75, so that's big enough. > GLuint n = 0; > + > + if (!formats) { > + formats = discard_formats; > + } > + > if (_mesa_is_desktop_gl(ctx) && > ctx->Extensions.TDFX_texture_compression_FXT1) { > - if (formats) { > - formats[n++] = GL_COMPRESSED_RGB_FXT1_3DFX; > - formats[n++] = GL_COMPRESSED_RGBA_FXT1_3DFX; > - } > - else { > - n += 2; > - } > + formats[n++] = GL_COMPRESSED_RGB_FXT1_3DFX; > + formats[n++] = GL_COMPRESSED_RGBA_FXT1_3DFX; > } > > if (ctx->Extensions.EXT_texture_compression_s3tc) { > - if (formats) { > - formats[n++] = GL_COMPRESSED_RGB_S3TC_DXT1_EXT; > - formats[n++] = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT; > - formats[n++] = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; > - } > - else { > - n += 3; > - } > + formats[n++] = GL_COMPRESSED_RGB_S3TC_DXT1_EXT; > + formats[n++] = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT; > + formats[n++] = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; > > /* The ES and desktop GL specs diverge here. > * > @@ -315,11 +311,7 @@ _mesa_get_compressed_formats(struct gl_context *ctx, > GLint *formats) > * Note that the addition is only to the OpenGL ES specification! > */ > if (_mesa_is_gles(ctx)) { > - if (formats) { > - formats[n++] = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT; > - } else { > - n += 1; > - } > + formats[n++] = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT; > } > } > > @@ -332,54 +324,36 @@ _mesa_get_compressed_formats(struct gl_context *ctx, > GLint *formats) > */ > if (_mesa_is_gles(ctx) > && ctx->Extensions.OES_compressed_ETC1_RGB8_texture) { > - if (formats) { > - formats[n++] = GL_ETC1_RGB8_OES; > - } > - else { > - n += 1; > - } > + formats[n++] = GL_ETC1_RGB8_OES; > } > > if (ctx->API == API_OPENGLES) { > - if (formats) { > - formats[n++] = GL_PALETTE4_RGB8_OES; > - formats[n++] = GL_PALETTE4_RGBA8_OES; > - formats[n++] = GL_PALETTE4_R5_G6_B5_OES; > - formats[n++] = GL_PALETTE4_RGBA4_OES; > - formats[n++] = GL_PALETTE4_RGB5_A1_OES; > - formats[n++] = GL_PALETTE8_RGB8_OES; > - formats[n++] = GL_PALETTE8_RGBA8_OES; > - formats[n++] = GL_PALETTE8_R5_G6_B5_OES; > - formats[n++] = GL_PALETTE8_RGBA4_OES; > - formats[n++] = GL_PALETTE8_RGB5_A1_OES; > - } > - else { > - n += 10; > - } > + formats[n++] = GL_PALETTE4_RGB8_OES; > + formats[n++] = GL_PALETTE4_RGBA8_OES; > + formats[n++] = GL_PALETTE4_R5_G6_B5_OES; > + formats[n++] = GL_PALETTE4_RGBA4_OES; > + formats[n++] = GL_PALETTE4_RGB5_A1_OES; > + formats[n++] = GL_PALETTE8_RGB8_OES; > + formats[n++] = GL_PALETTE8_RGBA8_OES; > + formats[n++] = GL_PALETTE8_R5_G6_B5_OES; > + formats[n++] = GL_PALETTE8_RGBA4_OES; > + formats[n++] = GL_PALETTE8_RGB5_A1_OES; > } > > if (_mesa_is_gles3(ctx) || ctx->Extensions.ARB_ES3_compatibility) { > - if (formats) { > - formats[n++] = GL_COMPRESSED_RGB8_ETC2; > - formats[n++] = GL_COMPRESSED_RGBA8_ETC2_EAC; > - formats[n++] = GL_COMPRESSED_R11_EAC; > - formats[n++] = GL_COMPRESSED_RG11_EAC; > - formats[n++] = GL_COMPRESSED_SIGNED_R11_EAC; > - formats[n++] = GL_COMPRESSED_SIGNED_RG11_EAC; > - formats[n++] = GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2; > - } else { > - n += 7; > - } > + formats[n++] = GL_COMPRESSED_RGB8_ETC2; > + formats[n++] = GL_COMPRESSED_RGBA8_ETC2_EAC; > + formats[n++] = GL_COMPRESSED_R11_EAC; > + formats[n++] = GL_COMPRESSED_RG11_EAC; > + formats[n++] = GL_COMPRESSED_SIGNED_R11_EAC; > + formats[n++] = GL_COMPRESSED_SIGNED_RG11_EAC; > + formats[n++] = GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2; > } > > if (_mesa_is_gles3(ctx)) { > - if (formats) { > - formats[n++] = GL_COMPRESSED_SRGB8_ETC2; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC; > - formats[n++] = GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2; > - } else { > - n += 3; > - } > + formats[n++] = GL_COMPRESSED_SRGB8_ETC2; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC; > + formats[n++] = GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2; > } > > /* The KHR_texture_compression_astc_hdr spec says: > @@ -409,70 +383,62 @@ _mesa_get_compressed_formats(struct gl_context *ctx, > GLint *formats) > */ > if (ctx->API == API_OPENGLES2 && > ctx->Extensions.KHR_texture_compression_astc_ldr) { > - if (formats) { > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_4x4_KHR; > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_5x4_KHR; > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_5x5_KHR; > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_6x5_KHR; > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_6x6_KHR; > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_8x5_KHR; > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_8x6_KHR; > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_8x8_KHR; > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_10x5_KHR; > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_10x6_KHR; > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_10x8_KHR; > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_10x10_KHR; > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_12x10_KHR; > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_12x12_KHR; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR; > - } > - else { > - n += 28; > - } > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_4x4_KHR; > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_5x4_KHR; > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_5x5_KHR; > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_6x5_KHR; > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_6x6_KHR; > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_8x5_KHR; > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_8x6_KHR; > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_8x8_KHR; > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_10x5_KHR; > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_10x6_KHR; > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_10x8_KHR; > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_10x10_KHR; > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_12x10_KHR; > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_12x12_KHR; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR; > } > > if (_mesa_is_gles3(ctx) && > ctx->Extensions.OES_texture_compression_astc) { > - if (formats) { > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_3x3x3_OES; > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_4x3x3_OES; > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_4x4x3_OES; > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_4x4x4_OES; > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_5x4x4_OES; > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_5x5x4_OES; > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_5x5x5_OES; > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_6x5x5_OES; > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_6x6x5_OES; > - formats[n++] = GL_COMPRESSED_RGBA_ASTC_6x6x6_OES; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x3x3_OES; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x3_OES; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x4_OES; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4x4_OES; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x4_OES; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x5_OES; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5x5_OES; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES; > - formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES; > - } > - else { > - n += 20; > - } > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_3x3x3_OES; > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_4x3x3_OES; > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_4x4x3_OES; > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_4x4x4_OES; > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_5x4x4_OES; > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_5x5x4_OES; > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_5x5x5_OES; > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_6x5x5_OES; > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_6x6x5_OES; > + formats[n++] = GL_COMPRESSED_RGBA_ASTC_6x6x6_OES; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x3x3_OES; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x3_OES; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x4_OES; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4x4_OES; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x4_OES; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x5_OES; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5x5_OES; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES; > + formats[n++] = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES; > } > > + assert(n <= ARRAY_SIZE(discard_formats)); I got thrown off by this and thought it should be `n < ARRAY_SIZE()`, but `n` is post-incremented, which means it will be one above what's actually used by the time it's checked here, so it's all fine :) Series is Reviewed-by: Eric Engestrom <eric.engest...@imgtec.com> > + > return n; > } > > -- > 2.7.4 > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev