summaryrefslogtreecommitdiffstats
path: root/src/mesa
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2017-10-16 15:30:47 -0700
committerKenneth Graunke <[email protected]>2017-10-16 16:02:53 -0700
commit9e779e59b20ea9510801a4484613d33d8a8e4c3e (patch)
tree6633fd5dc2669359ae5ed0bed0b8ceda1188cb66 /src/mesa
parentc6e584f194ea0d475e0fe1564c5491a2a535146a (diff)
Revert "i965/tex_image: Reference the renderbuffer miptree in setTexBuffer2"
This reverts commit d80cbbeaff9329fdc78ae3d97097c1e65dfcdd61. It turns out that formats do matter - the framebuffer's miptree has an sRGB format, and the one we created did not. This broke rendering when using KWin compositing, GNOME Terminal Fedora (with a transparent background), and Qt menu rendering in general, to name a few. It's been a month and this hasn't been fixed, and I'm sick of reverting this patch or applying NAK'd hacks and restarting various programs at random times every day, multiple times a day, to keep my desktop environment functional. The only benefit of this patch was to prepare the way for modifiers, which AFAIK aren't finished yet anyway, so there's really no downside to reverting it. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102924
Diffstat (limited to 'src/mesa')
-rw-r--r--src/mesa/drivers/dri/i965/intel_tex_image.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/src/mesa/drivers/dri/i965/intel_tex_image.c b/src/mesa/drivers/dri/i965/intel_tex_image.c
index 5396e0a43bc..37c8e24f032 100644
--- a/src/mesa/drivers/dri/i965/intel_tex_image.c
+++ b/src/mesa/drivers/dri/i965/intel_tex_image.c
@@ -441,6 +441,8 @@ intelSetTexBuffer2(__DRIcontext *pDRICtx, GLint target,
struct intel_renderbuffer *rb;
struct gl_texture_object *texObj;
struct gl_texture_image *texImage;
+ mesa_format texFormat = MESA_FORMAT_NONE;
+ struct intel_mipmap_tree *mt;
GLenum internal_format = 0;
texObj = _mesa_get_current_tex_object(ctx, target);
@@ -460,20 +462,33 @@ intelSetTexBuffer2(__DRIcontext *pDRICtx, GLint target,
return;
if (rb->mt->cpp == 4) {
- if (texture_format == __DRI_TEXTURE_FORMAT_RGB)
+ if (texture_format == __DRI_TEXTURE_FORMAT_RGB) {
internal_format = GL_RGB;
- else
+ texFormat = MESA_FORMAT_B8G8R8X8_UNORM;
+ }
+ else {
internal_format = GL_RGBA;
+ texFormat = MESA_FORMAT_B8G8R8A8_UNORM;
+ }
} else if (rb->mt->cpp == 2) {
- /* This is 565 */
internal_format = GL_RGB;
+ texFormat = MESA_FORMAT_B5G6R5_UNORM;
}
- intel_miptree_prepare_external(brw, rb->mt);
+ intel_miptree_make_shareable(brw, rb->mt);
+ mt = intel_miptree_create_for_bo(brw, rb->mt->bo, texFormat, 0,
+ rb->Base.Base.Width,
+ rb->Base.Base.Height,
+ 1, rb->mt->surf.row_pitch,
+ MIPTREE_CREATE_DEFAULT);
+ if (mt == NULL)
+ return;
+ mt->target = target;
_mesa_lock_texture(&brw->ctx, texObj);
texImage = _mesa_get_tex_image(ctx, texObj, target, 0);
- intel_set_texture_image_mt(brw, texImage, internal_format, rb->mt);
+ intel_set_texture_image_mt(brw, texImage, internal_format, mt);
+ intel_miptree_release(&mt);
_mesa_unlock_texture(&brw->ctx, texObj);
}