mesa/st: enable GL_EXT_framebuffer_sRGB
If the formats don't match we need to update the surface with the new format. if we can render to SRGB formats, enable the extension Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
3b8bb7b449
commit
21b0996dfc
|
@ -39,7 +39,7 @@
|
|||
#include "cso_cache/cso_context.h"
|
||||
#include "util/u_math.h"
|
||||
#include "util/u_inlines.h"
|
||||
|
||||
#include "util/u_format.h"
|
||||
|
||||
|
||||
/**
|
||||
|
@ -55,8 +55,10 @@ update_renderbuffer_surface(struct st_context *st,
|
|||
struct pipe_resource *resource = strb->rtt->pt;
|
||||
int rtt_width = strb->Base.Width;
|
||||
int rtt_height = strb->Base.Height;
|
||||
enum pipe_format format = st->ctx->Color.sRGBEnabled ? resource->format : util_format_linear(resource->format);
|
||||
|
||||
if (!strb->surface ||
|
||||
strb->surface->format != format ||
|
||||
strb->surface->texture != resource ||
|
||||
strb->surface->width != rtt_width ||
|
||||
strb->surface->height != rtt_height) {
|
||||
|
@ -67,7 +69,7 @@ update_renderbuffer_surface(struct st_context *st,
|
|||
u_minify(resource->height0, level) == rtt_height) {
|
||||
struct pipe_surface surf_tmpl;
|
||||
memset(&surf_tmpl, 0, sizeof(surf_tmpl));
|
||||
surf_tmpl.format = resource->format;
|
||||
surf_tmpl.format = format;
|
||||
surf_tmpl.usage = PIPE_BIND_RENDER_TARGET;
|
||||
surf_tmpl.u.tex.level = level;
|
||||
surf_tmpl.u.tex.first_layer = strb->rtt_face + strb->rtt_slice;
|
||||
|
|
|
@ -390,7 +390,7 @@ st_render_texture(struct gl_context *ctx,
|
|||
|
||||
/* new surface for rendering into the texture */
|
||||
memset(&surf_tmpl, 0, sizeof(surf_tmpl));
|
||||
surf_tmpl.format = util_format_linear(strb->texture->format);
|
||||
surf_tmpl.format = ctx->Color.sRGBEnabled ? strb->texture->format : util_format_linear(strb->texture->format);
|
||||
surf_tmpl.usage = PIPE_BIND_RENDER_TARGET;
|
||||
surf_tmpl.u.tex.level = strb->rtt_level;
|
||||
surf_tmpl.u.tex.first_layer = strb->rtt_face + strb->rtt_slice;
|
||||
|
|
|
@ -390,6 +390,15 @@ void st_init_extensions(struct st_context *st)
|
|||
PIPE_BIND_SAMPLER_VIEW, 0)) {
|
||||
ctx->Extensions.EXT_texture_sRGB = GL_TRUE;
|
||||
ctx->Extensions.EXT_texture_sRGB_decode = GL_TRUE;
|
||||
if (screen->is_format_supported(screen, PIPE_FORMAT_A8B8G8R8_SRGB,
|
||||
PIPE_TEXTURE_2D, 0,
|
||||
PIPE_BIND_RENDER_TARGET, 0) ||
|
||||
screen->is_format_supported(screen, PIPE_FORMAT_B8G8R8A8_SRGB,
|
||||
PIPE_TEXTURE_2D, 0,
|
||||
PIPE_BIND_RENDER_TARGET, 0)) {
|
||||
ctx->Extensions.EXT_framebuffer_sRGB = GL_TRUE;
|
||||
ctx->Const.sRGBCapable = GL_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (screen->is_format_supported(screen, PIPE_FORMAT_R8G8_UNORM,
|
||||
|
|
Loading…
Reference in New Issue