[Mesa-dev] [PATCH v2] st/mesa: honour sized internal formats in st_choose_format (v2)
Ilia Mirkin
imirkin at alum.mit.edu
Tue Mar 15 14:53:03 UTC 2016
On Mar 15, 2016 7:23 AM, "Nicolai Hähnle" <nhaehnle at gmail.com> wrote:
>
> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>
> The bitcasting which is possible with shader images (and texture views?)
> requires that when the user specifies a sized internal format for a
> texture, we really allocate that format. To this end:
>
> (1) find_exact_format should ignore sized internal formats and
>
> (2) some of the entries in the mapping table corresponding to sized
> internal formats are reordered to use an RGBA format instead of
> a BGRA one.
>
> This fixes arb_shader_image_load_store-bitcast in the (work in progress)
> ARB_shader_image_load_store implementation for radeonsi.
>
> v2: don't change the mapping of GL_RGB10: the change caused a regression
> because it preferred a format with an alpha channel, and GL_RGB10
> is not among the supported formats for shader images
Won't that break texture views? I.e. a view of rgb10 via rgb10a2 or vice
versa.
>
> Reviewed-by: Marek Olšák <marek.olsak at amd.com> (v1)
> ---
> src/mesa/state_tracker/st_format.c | 27 ++++++---------------------
> 1 file changed, 6 insertions(+), 21 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_format.c
b/src/mesa/state_tracker/st_format.c
> index 5392c23..161c767 100644
> --- a/src/mesa/state_tracker/st_format.c
> +++ b/src/mesa/state_tracker/st_format.c
> @@ -1114,12 +1114,12 @@ static const struct format_mapping format_map[] =
{
> },
> {
> { GL_RGB10_A2, 0 },
> - { PIPE_FORMAT_B10G10R10A2_UNORM, PIPE_FORMAT_R10G10B10A2_UNORM,
> + { PIPE_FORMAT_R10G10B10A2_UNORM, PIPE_FORMAT_B10G10R10A2_UNORM,
> DEFAULT_RGBA_FORMATS }
> },
> {
> { 4, GL_RGBA, GL_RGBA8, 0 },
> - { DEFAULT_RGBA_FORMATS }
> + { PIPE_FORMAT_R8G8B8A8_UNORM, DEFAULT_RGBA_FORMATS }
> },
> {
> { GL_BGRA, 0 },
> @@ -1127,7 +1127,7 @@ static const struct format_mapping format_map[] = {
> },
> {
> { 3, GL_RGB, GL_RGB8, 0 },
> - { DEFAULT_RGB_FORMATS }
> + { PIPE_FORMAT_R8G8B8X8_UNORM, DEFAULT_RGB_FORMATS }
> },
> {
> { GL_RGB12, GL_RGB16, 0 },
> @@ -2022,20 +2022,10 @@ static const struct exact_format_mapping
rgbx8888_tbl[] =
> { 0, 0, 0
}
> };
>
> -static const struct exact_format_mapping rgba1010102_tbl[] =
> -{
> - { GL_BGRA, GL_UNSIGNED_INT_2_10_10_10_REV,
PIPE_FORMAT_B10G10R10A2_UNORM },
> - /* No Mesa formats for these Gallium formats:
> - { GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV,
PIPE_FORMAT_R10G10B10A2_UNORM },
> - { GL_ABGR_EXT, GL_UNSIGNED_INT_10_10_10_2,
PIPE_FORMAT_R10G10B10A2_UNORM },
> - { GL_ABGR_EXT, GL_UNSIGNED_INT,
PIPE_FORMAT_R10G10B10A2_UNORM },
> - */
> - { 0, 0, 0
}
> -};
> -
> /**
> - * If there is an exact pipe_format match for {internalFormat, format,
type}
> - * return that, otherwise return PIPE_FORMAT_NONE so we can do fuzzy
matching.
> + * For unsized/base internal formats, we may choose a convenient
effective
> + * internal format for {format, type}. If one exists, return that,
otherwise
> + * return PIPE_FORMAT_NONE.
> */
> static enum pipe_format
> find_exact_format(GLint internalFormat, GLenum format, GLenum type)
> @@ -2049,17 +2039,12 @@ find_exact_format(GLint internalFormat, GLenum
format, GLenum type)
> switch (internalFormat) {
> case 4:
> case GL_RGBA:
> - case GL_RGBA8:
> tbl = rgba8888_tbl;
> break;
> case 3:
> case GL_RGB:
> - case GL_RGB8:
> tbl = rgbx8888_tbl;
> break;
> - case GL_RGB10_A2:
> - tbl = rgba1010102_tbl;
> - break;
> default:
> return PIPE_FORMAT_NONE;
> }
> --
> 2.5.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160315/16dfe0ac/attachment.html>
More information about the mesa-dev
mailing list