iris: Create smaller program keys without legacy features
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 9 Dec 2019 04:25:42 +0000 (20:25 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 11 Dec 2019 06:25:41 +0000 (22:25 -0800)
commit2e654db27a19a38676e85fd1b37d9ec550783555
tree7a99f173c19cc631a1c46cc28c0e5eda68347b34
parent8ccd3f48a00b48e9b6e2e089806d62a021f24ade
iris: Create smaller program keys without legacy features

A lot of the brw_*_prog_key fields are for emulating features on legacy
hardware that iris doesn't support.  In particular, all of the texture
swizzle fields take up a lot of space.  These dead fields make hashing
the shader keys more expensive than it ought to be.

We introduce iris-specific keys with only the information we need, and
translate them to brw keys when actually compiling new variants.  This
way, key comparisons can use the small keys.  The size reductions are:

   VS:  328 bytes ->  8 bytes
   TCS: 312 bytes -> 24 bytes
   TES: 304 bytes -> 24 bytes
   GS:  284 bytes ->  8 bytes
   FS:  304 bytes -> 16 bytes
   CS:  280 bytes ->  4 bytes

Scores for the Piglit drawoverhead microbenchmark case with a shader
program change improve by roughly 30%.

Reviewed-by: Eric Anholt <eric@anholt.net>
src/gallium/drivers/iris/iris_context.h
src/gallium/drivers/iris/iris_program.c
src/gallium/drivers/iris/iris_state.c