On Thu, Nov 20, 2014 at 12:29 AM, Iago Toral <ito...@igalia.com> wrote:
> It is explained here: > https://bugs.freedesktop.org/show_bug.cgi?id=84566#c35 > > So one example of this was a glReadPixels where we want to store the > pixel data as RGBA UINT, but the render buffer format we read from is > MESA_FORMAT_B8G8R8A8_UNORM. There are piglit tests that hit this case. > I'm still not seeing how this is allowed. From the 4.2 core spec: "If format is one of RED , GREEN , BLUE , RG , RGB , RGBA , BGR , or BGRA , then red, green, blue, and alpha values are obtained from the selected buffer at each pixel location. If format is an integer format and the color buffer is not an integer format, or if the color buffer is an integer format and format is not an integer format, an INVALID_OPERATION error is generated." I also checked the 3.3 compatibility spec and it says the same thing. This seems to indicate that that combination should result in GL_INVALID_OPERATION. > > Iago > > On Wed, 2014-11-19 at 12:04 -0800, Jason Ekstrand wrote: > > Can you remind me again as to what formats hit these paths? I > > remember you hitting them, but I'm still not really seeing how it > > happens. > > > > --Jason > > > > > > On Tue, Nov 18, 2014 at 1:23 AM, Iago Toral Quiroga > > <ito...@igalia.com> wrote: > > We can have conversions from non-integer types to integer > > types, so remove > > the assertions for these in the pack/unpack fast paths. It > > could be that > > we do not have all the necessary pack/unpack functions in > > these cases though, > > so protect these paths with conditionals and let > > _mesa_format_convert use > > other paths to resolve these kind of conversions if necessary. > > --- > > src/mesa/main/format_utils.c | 16 ++++++++-------- > > 1 file changed, 8 insertions(+), 8 deletions(-) > > > > diff --git a/src/mesa/main/format_utils.c > > b/src/mesa/main/format_utils.c > > index 1d65f2b..56a3b8d 100644 > > --- a/src/mesa/main/format_utils.c > > +++ b/src/mesa/main/format_utils.c > > @@ -143,8 +143,8 @@ _mesa_format_convert(void *void_dst, > > uint32_t dst_format, size_t dst_stride, > > dst += dst_stride; > > } > > return; > > - } else if (dst_array_format.as_uint == > > RGBA8888_UBYTE.as_uint) { > > - assert(!_mesa_is_format_integer_color(src_format)); > > + } else if (dst_array_format.as_uint == > > RGBA8888_UBYTE.as_uint && > > + !_mesa_is_format_integer_color(src_format)) > > { > > for (row = 0; row < height; ++row) { > > _mesa_unpack_ubyte_rgba_row(src_format, width, > > src, (uint8_t > > (*)[4])dst); > > @@ -152,8 +152,8 @@ _mesa_format_convert(void *void_dst, > > uint32_t dst_format, size_t dst_stride, > > dst += dst_stride; > > } > > return; > > - } else if (dst_array_format.as_uint == > > RGBA8888_UINT.as_uint) { > > - assert(_mesa_is_format_integer_color(src_format)); > > + } else if (dst_array_format.as_uint == > > RGBA8888_UINT.as_uint && > > + _mesa_is_format_integer_color(src_format)) { > > for (row = 0; row < height; ++row) { > > _mesa_unpack_uint_rgba_row(src_format, width, > > src, (uint32_t > > (*)[4])dst); > > @@ -174,8 +174,8 @@ _mesa_format_convert(void *void_dst, > > uint32_t dst_format, size_t dst_stride, > > dst += dst_stride; > > } > > return; > > - } else if (src_array_format.as_uint == > > RGBA8888_UBYTE.as_uint) { > > - assert(!_mesa_is_format_integer_color(dst_format)); > > + } else if (src_array_format.as_uint == > > RGBA8888_UBYTE.as_uint && > > + !_mesa_is_format_integer_color(dst_format)) > > { > > for (row = 0; row < height; ++row) { > > _mesa_pack_ubyte_rgba_row(dst_format, width, > > (const uint8_t > > (*)[4])src, dst); > > @@ -183,8 +183,8 @@ _mesa_format_convert(void *void_dst, > > uint32_t dst_format, size_t dst_stride, > > dst += dst_stride; > > } > > return; > > - } else if (src_array_format.as_uint == > > RGBA8888_UINT.as_uint) { > > - assert(_mesa_is_format_integer_color(dst_format)); > > + } else if (src_array_format.as_uint == > > RGBA8888_UINT.as_uint && > > + _mesa_is_format_integer_color(dst_format)) { > > for (row = 0; row < height; ++row) { > > _mesa_pack_uint_rgba_row(dst_format, width, > > (const uint32_t > > (*)[4])src, dst); > > -- > > 1.9.1 > > > > _______________________________________________ > > mesa-dev mailing list > > mesa-dev@lists.freedesktop.org > > http://lists.freedesktop.org/mailman/listinfo/mesa-dev > > > > > > >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev