i965: Reuse existing program data when a new compiled program matches.
authorEric Anholt <eric@anholt.net>
Sat, 26 Feb 2011 10:01:37 +0000 (02:01 -0800)
committerEric Anholt <eric@anholt.net>
Fri, 24 Jun 2011 17:36:49 +0000 (10:36 -0700)
commit18d4a44bdc2ed91ec9511d816acddc4a0bd7f9be
tree0c5108ce84f72f3aba6b45f6c2dd5b9fe14a9171
parentd91dc4a356e5509116572770b89d0a7520a55bfc
i965: Reuse existing program data when a new compiled program matches.

It's common in applications just before the advent of
EXT_separate_shader_objects to have multiple linked shaders with the
same VS or FS.  While we aren't detecting those at the Mesa level, we
can detect when our compiled output happens to match an existing
compiled program.

This patch was created after noting the incredible amount of compiled
program data generated by Heroes of Newerth.  It reduces the program
data in use at the start menu (replayed by apitrace) from 828kb to
632kb, and reduces CACHE_NEW_WM_PROG state flagging by 3/4.  It
doesn't impact our rate of hardware state changes yet, because things
depending on CACHE_NEW_WM_PROG also depend on BRW_NEW_FRAGMENT_PROGRAM
which is still being flagged.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/mesa/drivers/dri/i965/brw_context.h
src/mesa/drivers/dri/i965/brw_state_cache.c