diff options
author | marha <marha@users.sourceforge.net> | 2012-11-29 07:56:51 +0100 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2012-11-29 07:56:51 +0100 |
commit | d2d73da59e64acdc4718e4e6790a69d967bee875 (patch) | |
tree | 5c0148abbbb1473bb80ddc7da286beae9c1f2c3d /mesalib/src/mesa/main/fbobject.c | |
parent | 38eb7612c4b39dd69df4baf4450ba512e888effa (diff) | |
download | vcxsrv-d2d73da59e64acdc4718e4e6790a69d967bee875.tar.gz vcxsrv-d2d73da59e64acdc4718e4e6790a69d967bee875.tar.bz2 vcxsrv-d2d73da59e64acdc4718e4e6790a69d967bee875.zip |
fontconfig xserver mesa git update 29 nov 2012
xserver: 1712a45422a63f11b2146541279616fcfda09ec6
fontconfig: faea1cac85ac3b0fd6a983e1c0adeb68e115e06c
mesa: c1023608002c985b9d72edc64732cd666de2a206
Diffstat (limited to 'mesalib/src/mesa/main/fbobject.c')
-rw-r--r-- | mesalib/src/mesa/main/fbobject.c | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/mesalib/src/mesa/main/fbobject.c b/mesalib/src/mesa/main/fbobject.c index 223aef18d..891ec5dce 100644 --- a/mesalib/src/mesa/main/fbobject.c +++ b/mesalib/src/mesa/main/fbobject.c @@ -2799,11 +2799,41 @@ get_nongeneric_internalformat(GLenum format) } +static GLenum +get_linear_internalformat(GLenum format) +{ + switch (format) { + case GL_SRGB: + return GL_RGB; + + case GL_SRGB_ALPHA: + return GL_RGBA; + + case GL_SRGB8: + return GL_RGB8; + + case GL_SRGB8_ALPHA8: + return GL_RGBA8; + + case GL_SLUMINANCE: + return GL_LUMINANCE8; + + case GL_SLUMINANCE_ALPHA: + return GL_LUMINANCE8_ALPHA8; + + default: + return format; + } +} + + static GLboolean compatible_resolve_formats(const struct gl_renderbuffer *colorReadRb, const struct gl_renderbuffer *colorDrawRb) { - /* The simple case where we know the backing formats are the same. + GLenum readFormat, drawFormat; + + /* The simple case where we know the backing Mesa formats are the same. */ if (_mesa_get_srgb_format_linear(colorReadRb->Format) == _mesa_get_srgb_format_linear(colorDrawRb->Format)) { @@ -2817,9 +2847,15 @@ compatible_resolve_formats(const struct gl_renderbuffer *colorReadRb, * textures and get two entirely different Mesa formats like RGBA8888 and * ARGB8888. Drivers behaving like that should be able to cope with * non-matching formats by themselves, because it's not the user's fault. + * + * Blits between linear and sRGB formats are also allowed. */ - if (get_nongeneric_internalformat(colorReadRb->InternalFormat) == - get_nongeneric_internalformat(colorDrawRb->InternalFormat)) { + readFormat = get_nongeneric_internalformat(colorReadRb->InternalFormat); + drawFormat = get_nongeneric_internalformat(colorDrawRb->InternalFormat); + readFormat = get_linear_internalformat(readFormat); + drawFormat = get_linear_internalformat(drawFormat); + + if (readFormat == drawFormat) { return GL_TRUE; } |