From c87d09d7f09fe2e734e97e72baabd7c54f7614a9 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Tue, 8 Jul 2014 19:03:52 -0700 Subject: glsl: Don't allocate a name for ir_var_temporary variables Valgrind massif results for a trimmed apitrace of dota2: n time(i) total(B) useful-heap(B) extra-heap(B) stacks(B) Before (32-bit): 74 40,578,719,715 67,762,208 62,263,404 5,498,804 0 After (32-bit): 52 40,565,579,466 66,359,800 61,187,818 5,171,982 0 Before (64-bit): 74 37,129,541,061 95,195,160 87,369,671 7,825,489 0 After (64-bit): 76 37,134,691,404 93,271,352 85,900,223 7,371,129 0 A real savings of 1.0MiB on 32-bit and 1.4MiB on 64-bit. Signed-off-by: Ian Romanick Reviewed-by: Matt Turner --- src/glsl/ir.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/glsl/ir.h') diff --git a/src/glsl/ir.h b/src/glsl/ir.h index 3c947412f40..90c443c3d45 100644 --- a/src/glsl/ir.h +++ b/src/glsl/ir.h @@ -896,6 +896,25 @@ private: * Name used for anonymous compiler temporaries */ static const char tmp_name[]; + +public: + /** + * Should the construct keep names for ir_var_temporary variables? + * + * When this global is false, names passed to the constructor for + * \c ir_var_temporary variables will be dropped. Instead, the variable will + * be named "compiler_temp". This name will be in static storage. + * + * \warning + * \b NEVER change the mode of an \c ir_var_temporary. + * + * \warning + * This variable is \b not thread-safe. It is global, \b not + * per-context. It begins life false. A context can, at some point, make + * it true. From that point on, it will be true forever. This should be + * okay since it will only be set true while debugging. + */ + static bool temporaries_allocate_names; }; /** -- cgit v1.2.3