summaryrefslogtreecommitdiffstats
path: root/src/mesa
diff options
context:
space:
mode:
authorNicolai Hähnle <[email protected]>2016-08-11 13:06:47 +0200
committerMarek Olšák <[email protected]>2016-08-25 13:21:05 +0200
commitb662c70aeab6a92751514f30719c13a6de253b40 (patch)
tree4aaef992ed94d7654398f80013aa24aa97bc5cd1 /src/mesa
parent1e3218bc5ba2b739261f0c0bacf4eb662d377236 (diff)
st/mesa: fix sRGB BlitFramebuffer regression
Broken since: 3190c7ee9727161d627f107c2e7f8ec3a11941c1 Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97285 Tested-by: Edmondo Tommasina <[email protected]> Signed-off-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r--src/mesa/state_tracker/st_cb_blit.c34
1 files changed, 18 insertions, 16 deletions
diff --git a/src/mesa/state_tracker/st_cb_blit.c b/src/mesa/state_tracker/st_cb_blit.c
index cfcf3f7aae0..8aa849b3fc0 100644
--- a/src/mesa/state_tracker/st_cb_blit.c
+++ b/src/mesa/state_tracker/st_cb_blit.c
@@ -45,15 +45,6 @@
#include "util/u_format.h"
static void
-st_adjust_blit_for_srgb(struct pipe_blit_info *blit, bool framebuffer_srgb)
-{
- if (!framebuffer_srgb) {
- blit->dst.format = util_format_linear(blit->dst.format);
- blit->src.format = util_format_linear(blit->src.format);
- }
-}
-
-static void
st_BlitFramebuffer(struct gl_context *ctx,
struct gl_framebuffer *readFB,
struct gl_framebuffer *drawFB,
@@ -199,7 +190,11 @@ st_BlitFramebuffer(struct gl_context *ctx,
st_renderbuffer(drawFB->_ColorDrawBuffers[i]);
if (dstRb) {
- struct pipe_surface *dstSurf = dstRb->surface;
+ struct pipe_surface *dstSurf;
+
+ st_update_renderbuffer_surface(st, dstRb);
+
+ dstSurf = dstRb->surface;
if (dstSurf) {
blit.dst.resource = dstSurf->texture;
@@ -212,7 +207,8 @@ st_BlitFramebuffer(struct gl_context *ctx,
blit.src.box.z = srcAtt->Zoffset + srcAtt->CubeMapFace;
blit.src.format = srcObj->pt->format;
- st_adjust_blit_for_srgb(&blit, ctx->Color.sRGBEnabled);
+ if (!ctx->Color.sRGBEnabled)
+ blit.src.format = util_format_linear(blit.src.format);
st->pipe->blit(st->pipe, &blit);
dstRb->defined = true; /* front buffer tracking */
@@ -226,9 +222,13 @@ st_BlitFramebuffer(struct gl_context *ctx,
struct pipe_surface *srcSurf;
GLuint i;
- if (!srcRb || !srcRb->surface) {
+ if (!srcRb)
+ return;
+
+ st_update_renderbuffer_surface(st, srcRb);
+
+ if (!srcRb->surface)
return;
- }
srcSurf = srcRb->surface;
@@ -237,7 +237,11 @@ st_BlitFramebuffer(struct gl_context *ctx,
st_renderbuffer(drawFB->_ColorDrawBuffers[i]);
if (dstRb) {
- struct pipe_surface *dstSurf = dstRb->surface;
+ struct pipe_surface *dstSurf;
+
+ st_update_renderbuffer_surface(st, dstRb);
+
+ dstSurf = dstRb->surface;
if (dstSurf) {
blit.dst.resource = dstSurf->texture;
@@ -250,8 +254,6 @@ st_BlitFramebuffer(struct gl_context *ctx,
blit.src.box.z = srcSurf->u.tex.first_layer;
blit.src.format = srcSurf->format;
- st_adjust_blit_for_srgb(&blit, ctx->Color.sRGBEnabled);
-
st->pipe->blit(st->pipe, &blit);
dstRb->defined = true; /* front buffer tracking */
}