mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 02:28:10 +02:00
i965: Check actual tile offsets in Gen4 miptree workaround.
The purpose of the (irb->draw_offset & 4095) != 0 check was to ensure that we don't have XYy offsets into a tile, since Gen4 hardware doesn't support that. However, it's insufficient: there are cases where draw_offset & 4095 is 0 but we still have a Y-offset. This leads to an assertion failure in brw_update_renderbuffer_surface with tile_y != 0. Instead, simply call intel_renderbuffer_tile_offsets to compute the actual X/Y offsets and check if either are non-zero. This makes both the workaround and the assertion check the same things. Fixes piglit test fbo-generatemipmap-formats, and should also fix bugs #34009 and #39487. NOTE: This is a candidate for stable release branches. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=34009 Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=39487 Reviewed-by: Eric Anholt <eric@anholt.net> Reviewed-by: Chad Versace <chad@chad-versace.us> Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
3e1fd13f60
commit
15c0bc5eef
1 changed files with 17 additions and 2 deletions
|
|
@ -647,6 +647,22 @@ intel_renderbuffer_tile_offsets(struct intel_renderbuffer *irb,
|
|||
}
|
||||
}
|
||||
|
||||
#ifndef I915
|
||||
static bool
|
||||
need_tile_offset_workaround(struct brw_context *brw,
|
||||
struct intel_renderbuffer *irb)
|
||||
{
|
||||
uint32_t tile_x, tile_y;
|
||||
|
||||
if (brw->has_surface_tile_offset)
|
||||
return false;
|
||||
|
||||
intel_renderbuffer_tile_offsets(irb, &tile_x, &tile_y);
|
||||
|
||||
return tile_x != 0 || tile_y != 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Called by glFramebufferTexture[123]DEXT() (and other places) to
|
||||
* prepare for rendering into texture memory. This might be called
|
||||
|
|
@ -700,8 +716,7 @@ intel_render_texture(struct gl_context * ctx,
|
|||
intel_image->used_as_render_target = GL_TRUE;
|
||||
|
||||
#ifndef I915
|
||||
if (!brw_context(ctx)->has_surface_tile_offset &&
|
||||
(irb->draw_offset & 4095) != 0) {
|
||||
if (need_tile_offset_workaround(brw_context(ctx), irb)) {
|
||||
/* Original gen4 hardware couldn't draw to a non-tile-aligned
|
||||
* destination in a miptree unless you actually setup your
|
||||
* renderbuffer as a miptree and used the fragile
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue