intel/compiler: Record whether any pull constant loads occur
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 10 Sep 2019 05:21:17 +0000 (22:21 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 18 Sep 2019 22:44:22 +0000 (15:44 -0700)
commit0e4a75f9171398261ab8bbdc974dafbcaac0161c
tree46bef2d4be77c549c1271299a909a6ce340f5f62
parentdd83ef0d1a14b144c562129b5572f9ebdbe56042
intel/compiler: Record whether any pull constant loads occur

I would like for iris to be able to avoid setting up SURFACE_STATE
for UBOs in the common case where all constants are pushed.

Unfortunately, we don't know up front whether everything will be
pushed: the backend is allowed to demote pushed UBOs to pull loads
fairly late in the process.  This is probably desirable though, as
we'd like the backend to be able to re-pull pushed data to break up
long live ranges in response to register pressure.

Here we simply add a "are there any pull loads at all" boolean to
prog_data, which is a bit crude but at least allows us to skip work
in the common "everything pushed" case.  We could skip more work by
tracking exactly which UBO surfaces are pulled in a bitmask, but I
wanted to avoid bringing back the old mark_surface_used() mechanism.

Finer-grained tracking could allow us to skip a bit more work when
multiple UBOs are in use and /some/ are 100% pushed, but others are
accessed via pulls.  However, I'm not sure how common this is and
it would save at most 4 pull descriptors, so we defer that for now.

Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
src/intel/compiler/brw_compiler.h
src/intel/compiler/brw_fs.cpp
src/intel/compiler/brw_fs_nir.cpp