intel/compiler: Do image load/store lowering to NIR
authorJason Ekstrand <jason.ekstrand@intel.com>
Sat, 27 Jan 2018 21:19:57 +0000 (13:19 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 29 Aug 2018 19:04:02 +0000 (14:04 -0500)
commit37f7983bcca1afd4d570bc654b927a92308d1c68
tree7cb87742e416068af5811bf4752d2d569a6021a6
parentb217705dec60ef8335e4ff304605f26e9038b632
intel/compiler: Do image load/store lowering to NIR

This commit moves our storage image format conversion codegen into NIR
instead of doing it in the back-end.  This has the advantage of letting
us run it through NIR's optimizer which is pretty effective at shrinking
things down.  In the common case of rgba8, the number of instructions
emitted after NIR is done with it is half of what it was with the
lowering happening in the back-end.  On the downside, the back-end's
lowering is able to directly use predicates and the NIR lowering has to
use IFs.

Shader-db results on Kaby Lake:

    total instructions in shared programs: 15166910 -> 15166872 (<.01%)
    instructions in affected programs: 5895 -> 5857 (-0.64%)
    helped: 15
    HURT: 0

Clearly, we don't have that much image_load_store happening in the
shaders in shader-db....

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/compiler/nir/nir_intrinsics.py
src/intel/Makefile.sources
src/intel/compiler/brw_fs_nir.cpp
src/intel/compiler/brw_fs_surface_builder.cpp
src/intel/compiler/brw_fs_surface_builder.h
src/intel/compiler/brw_nir.h
src/intel/compiler/brw_nir_lower_image_load_store.c [new file with mode: 0644]
src/intel/compiler/meson.build
src/intel/vulkan/anv_pipeline.c
src/mesa/drivers/dri/i965/brw_program.c