summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri/i965/intel_screen.h
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2014-03-17 13:53:44 -0700
committerKenneth Graunke <kenneth@whitecape.org>2014-03-18 10:35:53 -0700
commit7a0fd3ca1d436591117d451ecee209a4cdb65aef (patch)
tree5aa3329ade2cf11cff4637db62a85d7fdf090d39 /src/mesa/drivers/dri/i965/intel_screen.h
parentb3e4b769dd318936abc38acbbbdec61ae2539e84 (diff)
downloadexternal_mesa3d-7a0fd3ca1d436591117d451ecee209a4cdb65aef.zip
external_mesa3d-7a0fd3ca1d436591117d451ecee209a4cdb65aef.tar.gz
external_mesa3d-7a0fd3ca1d436591117d451ecee209a4cdb65aef.tar.bz2
i965: Allocate register sets at screen creation, not context creation.
Register sets depend on the particular hardware generation, but don't depend on anything in the actual OpenGL context. Computing them is fairly expensive, and they take up a large amount of memory. Putting them in the screen allows us to compute/allocate them once for all contexts, saving both time and space. Improves the performance of a context creation/destruction microbenchmark by about 3x on my Haswell i7-4750HQ. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Eric Anholt <eric@anholt.net>
Diffstat (limited to 'src/mesa/drivers/dri/i965/intel_screen.h')
-rw-r--r--src/mesa/drivers/dri/i965/intel_screen.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/intel_screen.h b/src/mesa/drivers/dri/i965/intel_screen.h
index b08cb68..0969021 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.h
+++ b/src/mesa/drivers/dri/i965/intel_screen.h
@@ -62,6 +62,44 @@ struct intel_screen
*/
unsigned program_id;
+ struct {
+ struct ra_regs *regs;
+
+ /**
+ * Array of the ra classes for the unaligned contiguous register
+ * block sizes used.
+ */
+ int *classes;
+
+ /**
+ * Mapping for register-allocated objects in *regs to the first
+ * GRF for that object.
+ */
+ uint8_t *ra_reg_to_grf;
+ } vec4_reg_set;
+
+ struct {
+ struct ra_regs *regs;
+
+ /**
+ * Array of the ra classes for the unaligned contiguous register
+ * block sizes used, indexed by register size.
+ */
+ int classes[16];
+
+ /**
+ * Mapping for register-allocated objects in *regs to the first
+ * GRF for that object.
+ */
+ uint8_t *ra_reg_to_grf;
+
+ /**
+ * ra class for the aligned pairs we use for PLN, which doesn't
+ * appear in *classes.
+ */
+ int aligned_pairs_class;
+ } wm_reg_sets[2];
+
/**
* Configuration cache with default values for all contexts
*/