Tested-by: Jakob Bornecrantz <ja...@collabora.com>
On Mon, May 14, 2018 at 3:14 PM, Tomeu Vizoso <tomeu.viz...@collabora.com> wrote: > Virgl could save a lot of work converting buffers in the host side > between formats if Mesa supported a bunch of other formats when reading > pixels. > > This commit adds cases to handle specific formats so that the values > reported by the two calls match more closely the underlying native > formats. > > In GLES is important that IMPLEMENTATION_COLOR_READ_* return the native > format and data type because the spec only allows reading with those, > besides GL_RGBA or GL_RGBA_INTEGER. > > Additionally, because virgl currently doesn't implement such conversions, > this commit fixes several tests in > dEQP-GLES3.functional.fbo.color.clear.*, when using virgl in the guest > side. > > Signed-off-by: Tomeu Vizoso <tomeu.viz...@collabora.com> > --- > src/mesa/main/framebuffer.c | 73 ++++++++++++++++++++++++++++++++----- > 1 file changed, 64 insertions(+), 9 deletions(-) > > diff --git a/src/mesa/main/framebuffer.c b/src/mesa/main/framebuffer.c > index 8e751b453b75..a22c66b349f2 100644 > --- a/src/mesa/main/framebuffer.c > +++ b/src/mesa/main/framebuffer.c > @@ -836,15 +836,43 @@ _mesa_get_color_read_format(struct gl_context *ctx, > const mesa_format format = fb->_ColorReadBuffer->Format; > const GLenum data_type = _mesa_get_format_datatype(format); > > - if (format == MESA_FORMAT_B8G8R8A8_UNORM) > + switch(format) { > + case MESA_FORMAT_B8G8R8A8_UNORM: > return GL_BGRA; > - else if (format == MESA_FORMAT_B5G6R5_UNORM) > + case MESA_FORMAT_R10G10B10A2_UINT: > + return GL_BGRA_INTEGER; > + case MESA_FORMAT_B5G6R5_UNORM: > + case MESA_FORMAT_R11G11B10_FLOAT: > return GL_RGB; > - else if (format == MESA_FORMAT_R_UNORM8) > + case MESA_FORMAT_RG_FLOAT32: > + case MESA_FORMAT_RG_FLOAT16: > + case MESA_FORMAT_R8G8_UNORM: > + return GL_RG; > + case MESA_FORMAT_RG_SINT32: > + case MESA_FORMAT_RG_UINT32: > + case MESA_FORMAT_RG_SINT16: > + case MESA_FORMAT_RG_UINT16: > + case MESA_FORMAT_RG_SINT8: > + case MESA_FORMAT_RG_UINT8: > + return GL_RG_INTEGER; > + case MESA_FORMAT_R_FLOAT32: > + case MESA_FORMAT_R_FLOAT16: > + case MESA_FORMAT_R_UNORM8: > return GL_RED; > + case MESA_FORMAT_R_SINT32: > + case MESA_FORMAT_R_UINT32: > + case MESA_FORMAT_R_SINT16: > + case MESA_FORMAT_R_UINT16: > + case MESA_FORMAT_R_SINT8: > + case MESA_FORMAT_R_UINT8: > + return GL_RED_INTEGER; > + default: > + break; > + } > > switch (data_type) { > case GL_UNSIGNED_INT: > + case GL_UNSIGNED_BYTE: > case GL_INT: > return GL_RGBA_INTEGER; > default: > @@ -885,14 +913,41 @@ _mesa_get_color_read_type(struct gl_context *ctx, > const GLenum format = fb->_ColorReadBuffer->Format; > const GLenum data_type = _mesa_get_format_datatype(format); > > - if (format == MESA_FORMAT_B5G6R5_UNORM) > + switch(format) { > + case MESA_FORMAT_B5G6R5_UNORM: > return GL_UNSIGNED_SHORT_5_6_5; > - > - if (format == MESA_FORMAT_B10G10R10A2_UNORM || > - format == MESA_FORMAT_B10G10R10X2_UNORM || > - format == MESA_FORMAT_R10G10B10A2_UNORM || > - format == MESA_FORMAT_R10G10B10X2_UNORM) > + case MESA_FORMAT_B10G10R10A2_UNORM: > + case MESA_FORMAT_B10G10R10X2_UNORM: > + case MESA_FORMAT_R10G10B10A2_UNORM: > + case MESA_FORMAT_R10G10B10X2_UNORM: > + case MESA_FORMAT_B10G10R10A2_UINT: > + case MESA_FORMAT_R10G10B10A2_UINT: > return GL_UNSIGNED_INT_2_10_10_10_REV; > + case MESA_FORMAT_R11G11B10_FLOAT: > + return GL_UNSIGNED_INT_10F_11F_11F_REV; > + case MESA_FORMAT_RGBA_FLOAT16: > + case MESA_FORMAT_RG_FLOAT16: > + case MESA_FORMAT_R_FLOAT16: > + return GL_HALF_FLOAT; > + case MESA_FORMAT_RGBA_SINT16: > + case MESA_FORMAT_RG_SINT16: > + case MESA_FORMAT_R_SINT16: > + return GL_SHORT; > + case MESA_FORMAT_RGBA_UINT16: > + case MESA_FORMAT_RG_UINT16: > + case MESA_FORMAT_R_UINT16: > + return GL_UNSIGNED_SHORT; > + case MESA_FORMAT_RGBA_SINT8: > + case MESA_FORMAT_RG_SINT8: > + case MESA_FORMAT_R_SINT8: > + return GL_BYTE; > + case MESA_FORMAT_RG_UINT8: > + case MESA_FORMAT_RGBA_UINT8: > + case MESA_FORMAT_R_UINT8: > + return GL_UNSIGNED_BYTE; > + default: > + break; > + } > > switch (data_type) { > case GL_SIGNED_NORMALIZED: > -- > 2.17.0 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev