diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_context.h | 2 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/gen6_gs_state.c | 2 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/gen6_vs_state.c | 3 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/gen6_wm_state.c | 3 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/gen7_urb.c | 13 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/gen7_vs_state.c | 3 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/gen7_wm_state.c | 3 |
7 files changed, 24 insertions, 5 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h index a14e2b55bd6..974b76ac806 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -158,6 +158,7 @@ enum brw_state_id { BRW_STATE_UNIFORM_BUFFER, BRW_STATE_META_IN_PROGRESS, BRW_STATE_INTERPOLATION_MAP, + BRW_STATE_PUSH_CONSTANT_ALLOCATION, BRW_NUM_STATE_BITS }; @@ -194,6 +195,7 @@ enum brw_state_id { #define BRW_NEW_UNIFORM_BUFFER (1 << BRW_STATE_UNIFORM_BUFFER) #define BRW_NEW_META_IN_PROGRESS (1 << BRW_STATE_META_IN_PROGRESS) #define BRW_NEW_INTERPOLATION_MAP (1 << BRW_STATE_INTERPOLATION_MAP) +#define BRW_NEW_PUSH_CONSTANT_ALLOCATION (1 << BRW_STATE_PUSH_CONSTANT_ALLOCATION) struct brw_state_flags { /** State update flags signalled by mesa internals */ diff --git a/src/mesa/drivers/dri/i965/gen6_gs_state.c b/src/mesa/drivers/dri/i965/gen6_gs_state.c index ac7828680bf..9648fb78529 100644 --- a/src/mesa/drivers/dri/i965/gen6_gs_state.c +++ b/src/mesa/drivers/dri/i965/gen6_gs_state.c @@ -81,7 +81,7 @@ upload_gs_state(struct brw_context *brw) const struct brw_tracked_state gen6_gs_state = { .dirty = { .mesa = _NEW_TRANSFORM, - .brw = BRW_NEW_CONTEXT, + .brw = BRW_NEW_CONTEXT | BRW_NEW_PUSH_CONSTANT_ALLOCATION, .cache = CACHE_NEW_FF_GS_PROG }, .emit = upload_gs_state, diff --git a/src/mesa/drivers/dri/i965/gen6_vs_state.c b/src/mesa/drivers/dri/i965/gen6_vs_state.c index 0342a22e379..98c7aec1ec6 100644 --- a/src/mesa/drivers/dri/i965/gen6_vs_state.c +++ b/src/mesa/drivers/dri/i965/gen6_vs_state.c @@ -206,7 +206,8 @@ const struct brw_tracked_state gen6_vs_state = { .mesa = _NEW_TRANSFORM | _NEW_PROGRAM_CONSTANTS, .brw = (BRW_NEW_CONTEXT | BRW_NEW_VERTEX_PROGRAM | - BRW_NEW_BATCH), + BRW_NEW_BATCH | + BRW_NEW_PUSH_CONSTANT_ALLOCATION), .cache = CACHE_NEW_VS_PROG | CACHE_NEW_SAMPLER }, .emit = upload_vs_state, diff --git a/src/mesa/drivers/dri/i965/gen6_wm_state.c b/src/mesa/drivers/dri/i965/gen6_wm_state.c index e2867855212..672580511bd 100644 --- a/src/mesa/drivers/dri/i965/gen6_wm_state.c +++ b/src/mesa/drivers/dri/i965/gen6_wm_state.c @@ -229,7 +229,8 @@ const struct brw_tracked_state gen6_wm_state = { _NEW_POLYGON | _NEW_MULTISAMPLE), .brw = (BRW_NEW_FRAGMENT_PROGRAM | - BRW_NEW_BATCH), + BRW_NEW_BATCH | + BRW_NEW_PUSH_CONSTANT_ALLOCATION), .cache = (CACHE_NEW_SAMPLER | CACHE_NEW_WM_PROG) }, diff --git a/src/mesa/drivers/dri/i965/gen7_urb.c b/src/mesa/drivers/dri/i965/gen7_urb.c index 5a7ab473b6e..66831171b4e 100644 --- a/src/mesa/drivers/dri/i965/gen7_urb.c +++ b/src/mesa/drivers/dri/i965/gen7_urb.c @@ -81,6 +81,19 @@ gen7_allocate_push_constants(struct brw_context *brw) gen7_emit_push_constant_state(brw, multiplier * vs_size, multiplier * gs_size, multiplier * fs_size); + + /* From p115 of the Ivy Bridge PRM (3.2.1.4 3DSTATE_PUSH_CONSTANT_ALLOC_VS): + * + * Programming Restriction: + * + * The 3DSTATE_CONSTANT_VS must be reprogrammed prior to the next + * 3DPRIMITIVE command after programming the + * 3DSTATE_PUSH_CONSTANT_ALLOC_VS. + * + * Similar text exists for the other 3DSTATE_PUSH_CONSTANT_ALLOC_* + * commands. + */ + brw->state.dirty.brw |= BRW_NEW_PUSH_CONSTANT_ALLOCATION; } void diff --git a/src/mesa/drivers/dri/i965/gen7_vs_state.c b/src/mesa/drivers/dri/i965/gen7_vs_state.c index 950e2962d75..6e72e8f29b9 100644 --- a/src/mesa/drivers/dri/i965/gen7_vs_state.c +++ b/src/mesa/drivers/dri/i965/gen7_vs_state.c @@ -116,7 +116,8 @@ const struct brw_tracked_state gen7_vs_state = { .brw = (BRW_NEW_CONTEXT | BRW_NEW_VERTEX_PROGRAM | BRW_NEW_VS_BINDING_TABLE | - BRW_NEW_BATCH), + BRW_NEW_BATCH | + BRW_NEW_PUSH_CONSTANT_ALLOCATION), .cache = CACHE_NEW_VS_PROG | CACHE_NEW_SAMPLER }, .emit = upload_vs_state, diff --git a/src/mesa/drivers/dri/i965/gen7_wm_state.c b/src/mesa/drivers/dri/i965/gen7_wm_state.c index e88db78f449..e5691fbf8b1 100644 --- a/src/mesa/drivers/dri/i965/gen7_wm_state.c +++ b/src/mesa/drivers/dri/i965/gen7_wm_state.c @@ -227,7 +227,8 @@ const struct brw_tracked_state gen7_ps_state = { _NEW_COLOR), .brw = (BRW_NEW_FRAGMENT_PROGRAM | BRW_NEW_PS_BINDING_TABLE | - BRW_NEW_BATCH), + BRW_NEW_BATCH | + BRW_NEW_PUSH_CONSTANT_ALLOCATION), .cache = (CACHE_NEW_SAMPLER | CACHE_NEW_WM_PROG) }, |