Tested-By: Gert Wollny <[email protected]>
Am Montag, den 14.05.2018, 15:14 +0200 schrieb Tomeu Vizoso: > 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 <[email protected]> > --- > 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: _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
