On Mar 15, 2016 7:23 AM, "Nicolai Hähnle" <[email protected]> wrote: > > From: Nicolai Hähnle <[email protected]> > > 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 <[email protected]> (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 > [email protected] > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
