[Mesa-dev] [PATCH 7/9] softpipe: don't use 3-component formats

Ilia Mirkin imirkin at alum.mit.edu
Mon Aug 24 16:08:22 PDT 2015


On Mon, Aug 24, 2015 at 7:04 PM, Brian Paul <brianp at vmware.com> wrote:
> Mesa and gallium don't have a complete set of matching 3-component
> texture formats.  For example, 8-bit sRGB unorm.  To fully support
> the GL_ARB_copy_image extension we need to have support for all of
> these formats: RGB8_UNORM, RGB8_SNORM, RGB8_SRGB, RGB8_UINT, and
> RGB8_SINT using the same component order.  Since we don't have that,
> disable the 3-component formats for now.
> ---
>  src/gallium/drivers/softpipe/sp_screen.c | 25 +++++++++++++++++++++++++
>  1 file changed, 25 insertions(+)
>
> diff --git a/src/gallium/drivers/softpipe/sp_screen.c b/src/gallium/drivers/softpipe/sp_screen.c
> index aeef8e6..24d79f1 100644
> --- a/src/gallium/drivers/softpipe/sp_screen.c
> +++ b/src/gallium/drivers/softpipe/sp_screen.c
> @@ -360,6 +360,31 @@ softpipe_is_format_supported( struct pipe_screen *screen,
>        return FALSE;
>     }
>
> +   if ((bind & (PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW)) &&
> +       ((bind & PIPE_BIND_DISPLAY_TARGET) == 0)) {
> +      if (format == PIPE_FORMAT_R8G8B8_UINT ||
> +          format == PIPE_FORMAT_R8G8B8_SINT ||
> +          format == PIPE_FORMAT_R8G8B8_UNORM ||
> +          format == PIPE_FORMAT_R16G16B16_UINT ||
> +          format == PIPE_FORMAT_R16G16B16_SINT ||
> +          format == PIPE_FORMAT_R16G16B16_UNORM ||
> +          format == PIPE_FORMAT_R16G16B16_FLOAT ||
> +          format == PIPE_FORMAT_R32G32B32_UINT ||
> +          format == PIPE_FORMAT_R32G32B32_SINT ||
> +          format == PIPE_FORMAT_R32G32B32_UNORM ||
> +          format == PIPE_FORMAT_R32G32B32_FLOAT) {

Won't this lose you ARB_texture_buffer_object_rgb32 support?

   static const struct st_extension_format_mapping tbo_rgb32[] = {
      { {o(ARB_texture_buffer_object_rgb32) },
        { PIPE_FORMAT_R32G32B32_FLOAT,
          PIPE_FORMAT_R32G32B32_UINT,
          PIPE_FORMAT_R32G32B32_SINT,
        } },

      init_format_extensions(screen, extensions, tbo_rgb32,
                             ARRAY_SIZE(tbo_rgb32), PIPE_BUFFER,
                             PIPE_BIND_SAMPLER_VIEW);



> +         /* Don't support any 3-component formats for rendering/texturing
> +          * since we don't support the corresponding 8-bit 3 channel UNORM
> +          * formats.  This allows us to support GL_ARB_copy_image between
> +          * GL_RGB8 and GL_RGB8UI, for example.  Otherwise, we may be asked to
> +          * do a resource copy between PIPE_FORMAT_R8G8B8_UINT and
> +          * PIPE_FORMAT_R8G8B8X8_UNORM, for example, which will not work
> +          * (different bpp).
> +          */
> +         return FALSE;
> +      }
> +   }
> +
>     if (format_desc->layout == UTIL_FORMAT_LAYOUT_ETC &&
>         format != PIPE_FORMAT_ETC1_RGB8)
>        return FALSE;
> --
> 1.9.1
>
> _______________________________________________
> 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