i965: Emit invariant state once at startup on Gen6+.

Now that we have hardware contexts, we can safely initialize our GPU
state once at startup, rather than needing a state atom with the
BRW_NEW_CONTEXT flag set.

This removes a tiny bit of code from our drawing loop.

Reviewed-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Kenneth Graunke
2013-06-08 09:55:36 -07:00
parent 33b90804ee
commit d671eb140f
3 changed files with 20 additions and 4 deletions

View File

@@ -978,7 +978,8 @@ const struct brw_tracked_state brw_line_stipple = {
* Misc invariant state packets
*/
static void upload_invariant_state( struct brw_context *brw )
void
brw_upload_invariant_state(struct brw_context *brw)
{
struct intel_context *intel = &brw->intel;
@@ -1016,7 +1017,7 @@ const struct brw_tracked_state brw_invariant_state = {
.brw = BRW_NEW_CONTEXT,
.cache = 0
},
.emit = upload_invariant_state
.emit = brw_upload_invariant_state
};
/**

View File

@@ -125,6 +125,7 @@ extern const struct brw_tracked_state gen7_wm_state;
extern const struct brw_tracked_state haswell_cut_index;
/* brw_misc_state.c */
void brw_upload_invariant_state(struct brw_context *brw);
uint32_t
brw_depthbuffer_format(struct brw_context *brw);

View File

@@ -111,7 +111,6 @@ static const struct brw_tracked_state *gen6_atoms[] =
&gen6_sf_vp,
/* Command packets: */
&brw_invariant_state,
/* must do before binding table pointers, cc state ptrs */
&brw_state_base_address,
@@ -177,7 +176,6 @@ static const struct brw_tracked_state *gen7_atoms[] =
&brw_wm_prog,
/* Command packets: */
&brw_invariant_state,
&gen7_push_constant_alloc,
/* must do before binding table pointers, cc state ptrs */
@@ -241,6 +239,20 @@ static const struct brw_tracked_state *gen7_atoms[] =
&haswell_cut_index,
};
static void
brw_upload_initial_gpu_state(struct brw_context *brw)
{
struct intel_context *intel = &brw->intel;
/* On platforms with hardware contexts, we can set our initial GPU state
* right away rather than doing it via state atoms. This saves a small
* amount of overhead on every draw call.
*/
if (!intel->hw_ctx)
return;
brw_upload_invariant_state(brw);
}
void brw_init_state( struct brw_context *brw )
{
@@ -270,6 +282,8 @@ void brw_init_state( struct brw_context *brw )
assert((*atoms)->emit);
atoms++;
}
brw_upload_initial_gpu_state(brw);
}