[Mesa-dev] [PATCH] st/mesa: add fallback pipe formats for (compressed) R, RG formats
Marek Olšák
maraeo at gmail.com
Thu Jan 19 08:55:31 PST 2012
On Thu, Jan 19, 2012 at 4:54 PM, Brian Paul <brianp at vmware.com> wrote:
> If we don't find an exact PIPE_FORMAT_x for a GL_(COMPRESSED)_RED/RG format,
> try uncompressed formats. We were already doing this for the RGB(A) formats.
>
> Fixes piglit arb_texture_compression-internal-format-query test.
>
> NOTE: This is a candidate for the stable branches.
> ---
> configs/default | 4 +++-
> configs/linux-dri | 3 ++-
> src/mesa/main/context.c | 13 +++++++++++++
> src/mesa/main/texparam.c | 4 ++++
Hi Brian,
I guess you didn't want to commit changes for the files above, did you?
Anyway, I agree that GL_COMPRESSED_RED and GL_COMPRESSED_RG should be
able to fallback to a non-compressed format, but specifically adding
fallbacks for RGTC1/2, LATC1/2, and 3DC is not any useful. If a driver
doesn't expose the extensions for them, we shouldn't get them at all.
I don't have a strong opinion about this, I just don't think it's a
good idea to add fallbacks where they are not needed.
Marek
> src/mesa/state_tracker/st_format.c | 34 ++++++++++++++++++++++------------
> 5 files changed, 44 insertions(+), 14 deletions(-)
>
> diff --git a/configs/default b/configs/default
> index 2ca6fe4..5e7bc64 100644
> --- a/configs/default
> +++ b/configs/default
> @@ -119,7 +119,9 @@ GBM_BACKEND_DIRS = dri
> # Gallium directories and
> GALLIUM_DIRS = auxiliary drivers state_trackers
> GALLIUM_AUXILIARIES = $(TOP)/src/gallium/auxiliary/libgallium.a
> -GALLIUM_DRIVERS_DIRS = softpipe trace rbug noop identity galahad i915 svga r300 nvfx nv50
> +#GALLIUM_DRIVERS_DIRS = softpipe trace rbug noop identity galahad i915 svga r300 nvfx nv50
> +GALLIUM_DRIVERS_DIRS = softpipe trace rbug noop identity galahad i915 svga r300
> +
> GALLIUM_DRIVERS = $(foreach DIR,$(GALLIUM_DRIVERS_DIRS),$(TOP)/src/gallium/drivers/$(DIR)/lib$(DIR).a)
> GALLIUM_WINSYS_DIRS = sw sw/xlib
> GALLIUM_TARGET_DIRS = libgl-xlib
> diff --git a/configs/linux-dri b/configs/linux-dri
> index dde6408..6db0aca 100644
> --- a/configs/linux-dri
> +++ b/configs/linux-dri
> @@ -62,7 +62,8 @@ GALLIUM_WINSYS_DIRS = sw sw/xlib drm/vmware drm/intel svga/drm
> GALLIUM_TARGET_DIRS = dri-vmwgfx
> GALLIUM_STATE_TRACKERS_DIRS = egl dri
>
> -DRI_DIRS = i915 nouveau r200 radeon swrast
> +#DRI_DIRS = i915 i965 nouveau r200 radeon swrast
> +DRI_DIRS =
>
> INTEL_LIBS = $(shell $(PKG_CONFIG) --libs libdrm_intel)
> INTEL_CFLAGS = $(shell $(PKG_CONFIG) --cflags libdrm_intel)
> diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
> index f39cab5..5409062 100644
> --- a/src/mesa/main/context.c
> +++ b/src/mesa/main/context.c
> @@ -906,6 +906,19 @@ _mesa_initialize_context(struct gl_context *ctx,
> struct gl_shared_state *shared;
> int i;
>
> + if (1) {
> + FILE * f = fopen("/tmp/mesa.log", "a");
> + fprintf(f, "init %d\n", getpid());
> + fprintf(f, "Sleeping\n");
> + fflush(f);
> + sleep(1);
> + fprintf(f, "Done Sleeping\n");
> + fclose(f);
> + }
> +
> +#if 0
> +#endif
> +
> /*ASSERT(driverContext);*/
> assert(driverFunctions->NewTextureObject);
> assert(driverFunctions->FreeTextureImageBuffer);
> diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c
> index 0f92a5b..e179e49 100644
> --- a/src/mesa/main/texparam.c
> +++ b/src/mesa/main/texparam.c
> @@ -314,6 +314,7 @@ set_tex_parameteri(struct gl_context *ctx,
> return GL_FALSE;
> }
> incomplete(ctx, texObj);
> + printf("Set BASE LEVEL %d\n", params[0]);
> texObj->BaseLevel = params[0];
> return GL_TRUE;
>
> @@ -326,6 +327,7 @@ set_tex_parameteri(struct gl_context *ctx,
> return GL_FALSE;
> }
> incomplete(ctx, texObj);
> + printf("Set MAX LEVEL %d\n", params[0]);
> texObj->MaxLevel = params[0];
> return GL_TRUE;
>
> @@ -504,6 +506,7 @@ set_tex_parameterf(struct gl_context *ctx,
> if (texObj->Sampler.MinLod == params[0])
> return GL_FALSE;
> flush(ctx);
> + printf("Set MIN_LOD %f\n", params[0]);
> texObj->Sampler.MinLod = params[0];
> return GL_TRUE;
>
> @@ -511,6 +514,7 @@ set_tex_parameterf(struct gl_context *ctx,
> if (texObj->Sampler.MaxLod == params[0])
> return GL_FALSE;
> flush(ctx);
> + printf("Set MAX_LOD %f\n", params[0]);
> texObj->Sampler.MaxLod = params[0];
> return GL_TRUE;
>
> diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c
> index 5f9ae91..620910d 100644
> --- a/src/mesa/state_tracker/st_format.c
> +++ b/src/mesa/state_tracker/st_format.c
> @@ -839,6 +839,15 @@ struct format_mapping
> PIPE_FORMAT_S8_UINT_Z24_UNORM, \
> 0
>
> +#define DEFAULT_SNORM8_RGBA_FORMATS \
> + PIPE_FORMAT_R8G8B8A8_SNORM, \
> + 0
> +
> +#define DEFAULT_UNORM16_RGBA_FORMATS \
> + PIPE_FORMAT_R16G16B16A16_UNORM, \
> + DEFAULT_RGBA_FORMATS
> +
> +
> /**
> * This table maps OpenGL texture format enums to Gallium pipe_format enums.
> * Multiple GL enums might map to multiple pipe_formats.
> @@ -1145,54 +1154,55 @@ static const struct format_mapping format_map[] = {
> /* R, RG formats */
> {
> { GL_RED, GL_R8, 0 },
> - { PIPE_FORMAT_R8_UNORM, 0 }
> + { PIPE_FORMAT_R8_UNORM, PIPE_FORMAT_R8G8_UNORM, DEFAULT_RGBA_FORMATS }
> },
> {
> { GL_RG, GL_RG8, 0 },
> - { PIPE_FORMAT_R8G8_UNORM, 0 }
> + { PIPE_FORMAT_R8G8_UNORM, DEFAULT_RGBA_FORMATS }
> },
> {
> { GL_R16, 0 },
> - { PIPE_FORMAT_R16_UNORM, 0 }
> + { PIPE_FORMAT_R16_UNORM, PIPE_FORMAT_R16G16_UNORM,
> + DEFAULT_UNORM16_RGBA_FORMATS }
> },
> {
> { GL_RG16, 0 },
> - { PIPE_FORMAT_R16G16_UNORM, 0 }
> + { PIPE_FORMAT_R16G16_UNORM, DEFAULT_UNORM16_RGBA_FORMATS }
> },
>
> /* compressed R, RG formats */
> {
> { GL_COMPRESSED_RED, GL_COMPRESSED_RED_RGTC1, 0 },
> - { PIPE_FORMAT_RGTC1_UNORM, PIPE_FORMAT_R8_UNORM, 0 }
> + { PIPE_FORMAT_RGTC1_UNORM, PIPE_FORMAT_R8_UNORM, DEFAULT_RGBA_FORMATS }
> },
> {
> { GL_COMPRESSED_SIGNED_RED_RGTC1, 0 },
> - { PIPE_FORMAT_RGTC1_SNORM, 0 }
> + { PIPE_FORMAT_RGTC1_SNORM, DEFAULT_SNORM8_RGBA_FORMATS }
> },
> {
> { GL_COMPRESSED_RG, GL_COMPRESSED_RG_RGTC2, 0 },
> - { PIPE_FORMAT_RGTC2_UNORM, PIPE_FORMAT_R8G8_UNORM, 0 }
> + { PIPE_FORMAT_RGTC2_UNORM, PIPE_FORMAT_R8G8_UNORM, DEFAULT_RGBA_FORMATS }
> },
> {
> { GL_COMPRESSED_SIGNED_RG_RGTC2, 0 },
> - { PIPE_FORMAT_RGTC2_SNORM, 0 }
> + { PIPE_FORMAT_RGTC2_SNORM, DEFAULT_SNORM8_RGBA_FORMATS }
> },
> {
> { GL_COMPRESSED_LUMINANCE, GL_COMPRESSED_LUMINANCE_LATC1_EXT, 0 },
> - { PIPE_FORMAT_LATC1_UNORM, PIPE_FORMAT_L8_UNORM, 0 }
> + { PIPE_FORMAT_LATC1_UNORM, PIPE_FORMAT_L8_UNORM, DEFAULT_RGBA_FORMATS }
> },
> {
> { GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT, 0 },
> - { PIPE_FORMAT_LATC1_SNORM, 0 }
> + { PIPE_FORMAT_LATC1_SNORM, DEFAULT_SNORM8_RGBA_FORMATS }
> },
> {
> { GL_COMPRESSED_LUMINANCE_ALPHA, GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT,
> GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI, 0 },
> - { PIPE_FORMAT_LATC2_UNORM, PIPE_FORMAT_L8A8_UNORM, 0 }
> + { PIPE_FORMAT_LATC2_UNORM, PIPE_FORMAT_L8A8_UNORM, DEFAULT_RGBA_FORMATS }
> },
> {
> { GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT, 0 },
> - { PIPE_FORMAT_LATC2_SNORM, 0 }
> + { PIPE_FORMAT_LATC2_SNORM, DEFAULT_SNORM8_RGBA_FORMATS }
> },
>
> /* ETC1 */
> --
> 1.7.3.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list