Skip to content
Snippets Groups Projects
  1. Feb 17, 2012
  2. Feb 16, 2012
  3. Feb 15, 2012
  4. Feb 14, 2012
    • Lina Versace's avatar
      i965: Remove file i965/junk, accidentally added in 7b36c68b · c1dd6ddf
      Lina Versace authored
      (cherry picked from commit b44c459c)
      c1dd6ddf
    • Emma Anholt's avatar
      i965: Fix HiZ change compiler warning. · 3d3bd0e9
      Emma Anholt authored and Lina Versace's avatar Lina Versace committed
      (cherry picked from commit 94866ffb)
      3d3bd0e9
    • Lina Versace's avatar
      i965: Rewrite the HiZ op · e1f9820b
      Lina Versace authored
      
      This is a combination of 4 commits. The first commit rewrites the HiZ op,
      and remaining three fix bugs introduced by the rewrite.
      
      ======== commit 1 ========
      
      i965: Rewrite the HiZ op
      
      The HiZ op was implemented as a meta-op. This patch reimplements it by
      emitting a special HiZ batch. This fixes several known bugs, and likely
      a lot of undiscovered ones too.
      
      ==== Why the HiZ meta-op needed to die ====
      
      The HiZ op was implemented as a meta-op, which caused lots of trouble. All
      other meta-ops occur as a result of some GL call (for example, glClear and
      glGenerateMipmap), but the HiZ meta-op was special. It was called in
      places that Mesa (in particular, the vbo and swrast modules) did not
      expect---and were not prepared for---state changes to occur (for example:
      glDraw; glCallList; within glBegin/End blocks; and within
      swrast_prepare_render as a result of intel_miptree_map).
      
      In an attempt to work around these unexpected state changes, I added two
      hooks in i965:
        - A hook for glDraw, located in brw_predraw_resolve_buffers (which is
          called in the glDraw path). This hook detected if a predraw resolve
          meta-op had occurred, and would hackishly repropagate some GL state
          if necessary. This ensured that the meta-op state changes would not
          intefere with the vbo module's subsequent execution of glDraw.
        - A hook for glBegin, implemented by brwPrepareExecBegin. This hook
          resolved all buffers before entering
          a glBegin/End block, thus preventing an infinitely recurring call to
          vbo_exec_FlushVertices. The vbo module calls vbo_exec_FlushVertices to
          flush its vertex queue in response to GL state changes.
      
      Unfortunately, these hooks were not sufficient. The meta-op state changes
      still interacted badly with glPopAttrib (as discovered in bug 44927) and
      with swrast rendering (as discovered by debugging gen6's swrast fallback
      for glBitmap). I expect there are more undiscovered bugs. Rather than play
      whack-a-mole in a minefield, the sane approach is to replace the HiZ
      meta-op with something safer.
      
      ==== How it was killed ====
      
      This patch consists of several logical components:
        1. Rewrite the HiZ op by replacing function gen6_resolve_slice with
           gen6_hiz_exec and gen7_hiz_exec. The new functions do not call
           a meta-op, but instead manually construct and emit a batch to "draw"
           the HiZ op's rectangle primitive. The new functions alter no GL
           state.
        2. Add fields to brw_context::hiz for the new HiZ op.
        3. Emit a workaround flush when toggling 3DSTATE_VS.VsFunctionEnable.
        4. Kill all dead HiZ code:
           - the function gen6_resolve_slice
           - the dirty flag BRW_NEW_HIZ
           - the dead fields in brw_context::hiz
           - the state packet manipulation triggered by the now removed
             brw_context::hiz::op
           - the meta-op workaround in brw_predraw_resolve_buffers (discussed
             above)
           - the meta-op workaround brwPrepareExecBegin (discussed above)
      
      Note: This is a candidate for the 8.0 branch.
      Reviewed-by: default avatarEric Anholt <eric@anholt.net>
      Reviewed-by: Kenneth Graunke's avatarKenneth Graunke <kenneth@whitecape.org>
      Acked-by: default avatarPaul Berry <stereotype441@gmail.com>
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=43327
      
      
      Reported-by: default avatar <xunx.fang@intel.com>
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=44927
      
      
      Reported-by: default avatar <chao.a.chen@intel.com>
      Signed-off-by: default avatarChad Versace <chad.versace@linux.intel.com>
      (cherry picked from commit 7b36c68b)
      
      ======== commit 2 ========
      
      i965/gen7: Fix GPU hangs from the HiZ op.
      
      The wm max threads is in the same dword as the dispatch enable.  The
      hardware gets super angry if you set max threads to 0, even if you
      aren't dispatching threads.
      (cherry picked from commit e5b225af)
      
      ======== commit 3 ========
      
      i965/gen7: Fix the length of the DS state packet in the HiZ op.
      
      Reviewed-by: Kenneth Graunke's avatarKenneth Graunke <kenneth@whitecape.org>
      Reviewed-by: default avatarChad Versace <chad.versace@linux.intel.com>
      (cherry picked from commit cdcfaa64)
      
      ======== commit 4 ========
      
      i965/gen7: Fix the length of the MULTISAMPLE state packet in the HiZ op.
      
      Reviewed-by: Kenneth Graunke's avatarKenneth Graunke <kenneth@whitecape.org>
      Reviewed-by: default avatarChad Versace <chad.versace@linux.intel.com>
      (cherry picked from commit a7750c9f)
      e1f9820b
  5. Feb 10, 2012
  6. Feb 09, 2012
  7. Feb 08, 2012
  8. Feb 07, 2012
Loading