i965/vs: Allocate register set once at context creation.
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 21 Aug 2013 23:27:11 +0000 (16:27 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 26 Aug 2013 18:21:10 +0000 (11:21 -0700)
Now that we use a fixed set of register classes, we can set up the
register set and conflict graphs once, at context creation, rather than
on every VS compile.  This is obviously less expensive, and also what
we already do in the FS backend.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
src/mesa/drivers/dri/i965/brw_context.c
src/mesa/drivers/dri/i965/brw_context.h
src/mesa/drivers/dri/i965/brw_vec4_reg_allocate.cpp

index 6308446cca9dbd7a76dd67b41292e59cd7079d77..23210761d4312da960586dd9644fc5d1a1f87eff 100644 (file)
@@ -476,6 +476,7 @@ brwCreateContext(int api,
    }
 
    brw_fs_alloc_reg_sets(brw);
+   brw_vec4_alloc_reg_set(brw);
 
    if (INTEL_DEBUG & DEBUG_SHADER_TIME)
       brw_init_shader_time(brw);
index 98a59fda261a0f6b2d7407ca48e1a65cd17e14a5..c456e611e047dda484bed84cef2937edcaf425b3 100644 (file)
@@ -1413,6 +1413,9 @@ void brw_upload_cs_urb_state(struct brw_context *brw);
  */
 void brw_fs_alloc_reg_sets(struct brw_context *brw);
 
+/* brw_vec4_reg_allocate.cpp */
+void brw_vec4_alloc_reg_set(struct brw_context *brw);
+
 /* brw_disasm.c */
 int brw_disasm (FILE *file, struct brw_instruction *inst, int gen);
 
index fbd79d03a6a4a2d03c01518305d173066062c45a..798420373cc9a8fc5cb3aa628613fc99c443bc73 100644 (file)
@@ -96,8 +96,8 @@ vec4_visitor::reg_allocate_trivial()
    return true;
 }
 
-static void
-brw_alloc_reg_set(struct brw_context *brw)
+extern "C" void
+brw_vec4_alloc_reg_set(struct brw_context *brw)
 {
    int base_reg_count = brw->gen >= 7 ? GEN7_MRF_HACK_START : BRW_MAX_GRF;
 
@@ -188,8 +188,6 @@ vec4_visitor::reg_allocate()
 
    calculate_live_intervals();
 
-   brw_alloc_reg_set(brw);
-
    int node_count = virtual_grf_count;
    int first_payload_node = node_count;
    node_count += payload_reg_count;