Mesa and gallium don't have a complete set of matching 3-component texture formats. For example, 8-bit sRGB unorm. To fully support the GL_ARB_copy_image extension we need to have support for all of these formats: RGB8_UNORM, RGB8_SNORM, RGB8_SRGB, RGB8_UINT, and RGB8_SINT using the same component order. Since we don't have that, disable the 3-component formats for now. --- src/gallium/drivers/softpipe/sp_screen.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)
diff --git a/src/gallium/drivers/softpipe/sp_screen.c b/src/gallium/drivers/softpipe/sp_screen.c index aeef8e6..24d79f1 100644 --- a/src/gallium/drivers/softpipe/sp_screen.c +++ b/src/gallium/drivers/softpipe/sp_screen.c @@ -360,6 +360,31 @@ softpipe_is_format_supported( struct pipe_screen *screen, return FALSE; } + if ((bind & (PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW)) && + ((bind & PIPE_BIND_DISPLAY_TARGET) == 0)) { + if (format == PIPE_FORMAT_R8G8B8_UINT || + format == PIPE_FORMAT_R8G8B8_SINT || + format == PIPE_FORMAT_R8G8B8_UNORM || + format == PIPE_FORMAT_R16G16B16_UINT || + format == PIPE_FORMAT_R16G16B16_SINT || + format == PIPE_FORMAT_R16G16B16_UNORM || + format == PIPE_FORMAT_R16G16B16_FLOAT || + format == PIPE_FORMAT_R32G32B32_UINT || + format == PIPE_FORMAT_R32G32B32_SINT || + format == PIPE_FORMAT_R32G32B32_UNORM || + format == PIPE_FORMAT_R32G32B32_FLOAT) { + /* Don't support any 3-component formats for rendering/texturing + * since we don't support the corresponding 8-bit 3 channel UNORM + * formats. This allows us to support GL_ARB_copy_image between + * GL_RGB8 and GL_RGB8UI, for example. Otherwise, we may be asked to + * do a resource copy between PIPE_FORMAT_R8G8B8_UINT and + * PIPE_FORMAT_R8G8B8X8_UNORM, for example, which will not work + * (different bpp). + */ + return FALSE; + } + } + if (format_desc->layout == UTIL_FORMAT_LAYOUT_ETC && format != PIPE_FORMAT_ETC1_RGB8) return FALSE; -- 1.9.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev