[Mesa-dev] i965: Support for gen8/9 blorp

Topi Pohjolainen topi.pohjolainen at intel.com
Sat Apr 16 13:42:28 UTC 2016


This series adds blorp pipeline upload support for gen8 and gen9,
switches over to blorp blits (except for 2X and 16X msaa which don't
have support in blorp yet) and finally re-introduces blorp clears
for gen6-9. This makes it possible to close bug 94181 preventing
single sample compression getting enabled.

First two patches are not mandatory, they are just something I wrote
during debugging. There are quite a few patches that simply make
either core i965 pipeline upload logic or meta fast clear utilities
available for blorp to re-use. Most important is the texture surface
setup for gen8/9 - blorp specific logic is only introduced for render
target setup. I already have follow-up plans for this also where the
aim is to drop all blorp specific surface setup logic by re-using
core i965 upload instead. Among other things this provides easy
switch to layered clears using instance identifier.

Re-introduction of blorp clears is slightly modified as the original
didn't integrate with the current driver. I also chose to drop some
logic and re-use gen9 aware counterparts from i965-meta.

Patches 34-39 are optimizations reducing state trashing. These are
needed to avoid performance regressions in a few synthetic
benchmarks. A few synthetic cases were improved even without.

This series doesn't remove any meta logic yet. Simple reverts of

  i965/blorp: Enable blits on gen8
  i965/blorp: Enable for normal color clears
  i965/blorp: Enable for buffer resolves

allow us to move back to meta if needs be.

Big thanks to Ken for helping in debugging!!

Topi Pohjolainen (40):
  i965/gen9: Use correct size for DS_STATE
  i965/gen8: Document inst buffer size modify enabling bit
  i965/gen8: Expose surface state helpers
  i965/gen8: Expose state base address setup
  i965/blorp: Let compiler calculate the vertex buffer size
  i965/blorp/gen7: Prepare re-using for gen8
  i965/blorp: Use 8k chunk size for urb allocation
  i965/blorp/gen7: Expose state setup applicable to gen8
  i965/blorp/gen6: Prepare vertex buffer setup logic for gen8
  i965/blorp: Prepare render target write for gen8
  i965/blorp: Prepare sampling for gen9
  i965: Allow texture surface state setup to be used by blorp
  i965/blorp: Pipeline upload support for gen8
  i965/blorp: Add support for source swizzle
  i965/blorp: Add support for sampling 3D textures
  i965/blorp: Add check for supported sample numbers
  i965/blorp: Prepare stencil sampling for gen8
  i965/blorp: Enable blits on gen8
  i965/blorp: Add support for setting fast clear operation
  i965/blorp: Add support for disabling color blending
  i965/blorp: Reduce scope for generator and its inputs
  i965/blorp: Switch the order of render and texture targets
  i965: Declare input to mcs alignment calculation constant
  i965/meta: Expose fast clear rectangle calculation
  i965/meta: Expose resolve clear rectangle calculation
  i965/meta: Expose non-fast clear rectangle calculation
  i965/meta: Expose fast clear value setup
  i965/meta: Expose check for fast clear compatibility
  i965/meta: Move check for srgb into is_color_fast_clear_compatible()
  i965/blorp: Re-introduce clear programs
  i965/blorp: Skip uploading state/options not needed for clears
  i965/blorp/gen7: Prepare blorp being the very first renderer
  i965/blorp: Prepare to switch from compute pipeline
  i965/blorp: Skip re-emitting urb config whenever possible
  i965/blorp: Do not tricker urb re-configuration unnecessarily
  i965/blorp: Reconfigure base state address only if needed
  i965/blorp: Leave new batch signaling to batch buffer logic
  i965/blorp: Use more fine grained state trashing than new context
  i965/blorp: Enable for normal color clears
  i965/blorp: Enable for buffer resolves

 src/mesa/drivers/dri/i965/Makefile.sources        |   2 +
 src/mesa/drivers/dri/i965/brw_blorp.cpp           |  30 +-
 src/mesa/drivers/dri/i965/brw_blorp.h             |  72 ++-
 src/mesa/drivers/dri/i965/brw_blorp_blit.cpp      |  92 ++-
 src/mesa/drivers/dri/i965/brw_blorp_blit_eu.cpp   |  29 +-
 src/mesa/drivers/dri/i965/brw_blorp_blit_eu.h     |   8 +-
 src/mesa/drivers/dri/i965/brw_blorp_clear.cpp     | 460 ++++++++++++++
 src/mesa/drivers/dri/i965/brw_clear.c             |   9 +
 src/mesa/drivers/dri/i965/brw_context.h           |   5 +-
 src/mesa/drivers/dri/i965/brw_fs.h                |   2 +-
 src/mesa/drivers/dri/i965/brw_fs_generator.cpp    |  11 +-
 src/mesa/drivers/dri/i965/brw_meta_fast_clear.c   | 160 ++---
 src/mesa/drivers/dri/i965/brw_meta_util.h         |  29 +
 src/mesa/drivers/dri/i965/brw_state.h             |  18 +
 src/mesa/drivers/dri/i965/brw_wm_surface_state.c  |   3 +-
 src/mesa/drivers/dri/i965/gen6_blorp.cpp          |  84 ++-
 src/mesa/drivers/dri/i965/gen7_blorp.cpp          |  89 ++-
 src/mesa/drivers/dri/i965/gen7_wm_surface_state.c |   7 +-
 src/mesa/drivers/dri/i965/gen8_blorp.cpp          | 715 ++++++++++++++++++++++
 src/mesa/drivers/dri/i965/gen8_ds_state.c         |  22 +-
 src/mesa/drivers/dri/i965/gen8_misc_state.c       |   6 +-
 src/mesa/drivers/dri/i965/gen8_surface_state.c    |  58 +-
 src/mesa/drivers/dri/i965/intel_mipmap_tree.c     |  17 +-
 src/mesa/drivers/dri/i965/intel_mipmap_tree.h     |   2 +-
 24 files changed, 1695 insertions(+), 235 deletions(-)
 create mode 100644 src/mesa/drivers/dri/i965/brw_blorp_clear.cpp
 create mode 100644 src/mesa/drivers/dri/i965/gen8_blorp.cpp

-- 
2.5.5



More information about the mesa-dev mailing list