i965: Move hiz resolve to after renderbuffer resizing (v2)
authorChad Versace <chad.versace@linux.intel.com>
Tue, 14 Aug 2012 18:23:21 +0000 (11:23 -0700)
committerChad Versace <chad.versace@linux.intel.com>
Mon, 27 Aug 2012 14:48:28 +0000 (07:48 -0700)
Do all pre-draw hiz resolves *after* the renderbuffers are resized by
intel_prepare_render. Otherwise, we may resolve buffers that are
immediately discarded afterwards.

Fixes the assertion failure below when resizing windows in KDE and under
some unknown circumstance in Chrome OS:
    intel_resolve_map.c:46: intel_resolve_map_set: Assertion
    `(*tail)->need == need' failed.

Also, remove the comment that "resolves must occur [...] before setting up
any hardware state". That was true when resolves were implemented with
meta-ops, but no longer with blorp.

v2:
  - Keep brw_predraw_resolve_buffers in its current position, which is
    before any brw_context bits are modified. Instead, move the call to
    intel_prepare_render.

Note: This is a candiate for the 8.0 branch.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=52252
Reported-by: Lu Hua <huax.lu@intel.com>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
src/mesa/drivers/dri/i965/brw_draw.c

index 7ae3f6fc28a3fed9c7e7d251021527fd21d98ea4..b335e9616f6ea8fc89dad2c0e0802cbb70bfe239 100644 (file)
@@ -432,8 +432,11 @@ static bool brw_try_draw_prims( struct gl_context *ctx,
     */
    brw_validate_textures( brw );
 
-   /* Resolves must occur after updating state and finalizing textures but
-    * before setting up any hardware state for this draw call.
+   intel_prepare_render(intel);
+
+   /* Resolves must occur after updating renderbuffers, updating context state,
+    * and finalizing textures but before setting up any hardware state for
+    * this draw call.
     */
    brw_predraw_resolve_buffers(brw);
 
@@ -455,8 +458,6 @@ static bool brw_try_draw_prims( struct gl_context *ctx,
     * so can't access it earlier.
     */
 
-   intel_prepare_render(intel);
-
    for (i = 0; i < nr_prims; i++) {
       int estimated_max_prim_size;