mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 21:40:08 +01:00
svga: fix format for screen target
This patch revises the fix in commit 606f13afa31c9f041a68eb22cc32112ce813f944
to properly translate the surface format for screen target.
Instead of changing the svga format for PIPE_FORMAT_B5G6R5_UNORM
to SVGA3D_R5G6B5 for all texture surfaces, this patch only restricts
SVGA3D_R5G6B5 for screen target surfaces. This avoids rendering
failures when specify a non-vgpu10 format in a vgpu10 context with
software renderer.
Fixes piglit failures spec@!opengl 1.1@draw-pixels,
spec@!opengl 1.1@teximage-colors gl_r3_g3_b2
spec@!opengl 1.1@texwrap formats
Tested Xorg with 16bits depth.
Also tested with MTT piglit, MTT glretrace.
Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
parent
3626112214
commit
5bd5ec6a0f
1 changed files with 26 additions and 0 deletions
|
|
@ -376,6 +376,29 @@ svga_translate_vertex_format_vgpu10(enum pipe_format format,
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Translate a gallium scanout format to a svga format valid
|
||||
* for screen target surface.
|
||||
*/
|
||||
static SVGA3dSurfaceFormat
|
||||
svga_translate_screen_target_format_vgpu10(enum pipe_format format)
|
||||
{
|
||||
switch (format) {
|
||||
case PIPE_FORMAT_B8G8R8A8_UNORM:
|
||||
return SVGA3D_B8G8R8A8_UNORM;
|
||||
case PIPE_FORMAT_B8G8R8X8_UNORM:
|
||||
return SVGA3D_B8G8R8X8_UNORM;
|
||||
case PIPE_FORMAT_B5G6R5_UNORM:
|
||||
return SVGA3D_R5G6B5;
|
||||
case PIPE_FORMAT_B5G5R5A1_UNORM:
|
||||
return SVGA3D_A1R5G5B5;
|
||||
default:
|
||||
debug_printf("Invalid format %s specified for screen target\n",
|
||||
svga_format_name(format));
|
||||
return SVGA3D_FORMAT_INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Translate from gallium format to SVGA3D format.
|
||||
*/
|
||||
|
|
@ -388,6 +411,9 @@ svga_translate_format(const struct svga_screen *ss,
|
|||
if (bind & (PIPE_BIND_VERTEX_BUFFER | PIPE_BIND_INDEX_BUFFER)) {
|
||||
return format_conversion_table[format].vertex_format;
|
||||
}
|
||||
else if (bind & PIPE_BIND_SCANOUT) {
|
||||
return svga_translate_screen_target_format_vgpu10(format);
|
||||
}
|
||||
else {
|
||||
return format_conversion_table[format].pixel_format;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue