meta: Always do GenerateMipmaps in linear colorspace.
When generating mipmaps for sRGB textures, force both decode and encode, so the filtering is done in linear colorspace, regardless of settings. Fixes a WebGL conformance test in Chrome: https://www.khronos.org/registry/webgl/sdk/tests/conformance2/textures/misc/tex-srgb-mipmap.html?webglVersion=2 Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97322 Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
This commit is contained in:
parent
ed871af91c
commit
6cf8708ce5
|
@ -221,9 +221,17 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target,
|
|||
GL_LINEAR);
|
||||
_mesa_set_sampler_wrap(ctx, mipmap->samp_obj, GL_CLAMP_TO_EDGE,
|
||||
GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE);
|
||||
}
|
||||
|
||||
/* We don't want to encode or decode sRGB values; treat them as linear. */
|
||||
_mesa_set_sampler_srgb_decode(ctx, mipmap->samp_obj, GL_SKIP_DECODE_EXT);
|
||||
if (ctx->Extensions.EXT_texture_sRGB_decode) {
|
||||
const struct gl_texture_image *baseImage =
|
||||
_mesa_select_tex_image(texObj, target, texObj->BaseLevel);
|
||||
const bool srgb =
|
||||
_mesa_get_format_color_encoding(baseImage->TexFormat) == GL_SRGB;
|
||||
|
||||
_mesa_set_sampler_srgb_decode(ctx, mipmap->samp_obj,
|
||||
srgb ? GL_DECODE_EXT : GL_SKIP_DECODE_EXT);
|
||||
_mesa_set_framebuffer_srgb(ctx, srgb);
|
||||
}
|
||||
|
||||
_mesa_bind_sampler(ctx, ctx->Texture.CurrentUnit, mipmap->samp_obj);
|
||||
|
|
Loading…
Reference in New Issue