i965: Introduce state flag for blorp
In the past, BLORP has clobbered all BRW_NEW_* state flags, to trigger re-emission of the entire 3D pipeline on the next draw. However, there are some packets BLORP simply leaves alone, so there's no need to re-emit them. Trying to reduce the set of dirty bits flagged after BLORP runs is tricky. Instead, we introduce a BRW_NEW_BLORP flag. This should be set on any atom which emits a packet that BLORP also emits. When BLORP runs, it will flag BRW_NEW_BLORP, causing those packets to get re-emitted. This also makes it easy to avoid re-emitting specific atoms - we can simply drop the BRW_NEW_BLORP flag on those. To start, we assume that all packets need to be re-emitted. This is the safest approach and closest to the existing code's behavior. Many of these are obviously not required, and can be dropped in subsequent patches. Signed-off-by: Topi Pohjolainen <topi.pohjolainen@intel.com> Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
@@ -222,6 +222,7 @@ enum brw_state_id {
|
||||
BRW_STATE_CS_WORK_GROUPS,
|
||||
BRW_STATE_URB_SIZE,
|
||||
BRW_STATE_CC_STATE,
|
||||
BRW_STATE_BLORP,
|
||||
BRW_NUM_STATE_BITS
|
||||
};
|
||||
|
||||
@@ -311,6 +312,7 @@ enum brw_state_id {
|
||||
#define BRW_NEW_CS_WORK_GROUPS (1ull << BRW_STATE_CS_WORK_GROUPS)
|
||||
#define BRW_NEW_URB_SIZE (1ull << BRW_STATE_URB_SIZE)
|
||||
#define BRW_NEW_CC_STATE (1ull << BRW_STATE_CC_STATE)
|
||||
#define BRW_NEW_BLORP (1ull << BRW_STATE_BLORP)
|
||||
|
||||
struct brw_state_flags {
|
||||
/** State update flags signalled by mesa internals */
|
||||
|
||||
@@ -667,6 +667,7 @@ static struct dirty_bit_map brw_bits[] = {
|
||||
DEFINE_BIT(BRW_NEW_CS_WORK_GROUPS),
|
||||
DEFINE_BIT(BRW_NEW_URB_SIZE),
|
||||
DEFINE_BIT(BRW_NEW_CC_STATE),
|
||||
DEFINE_BIT(BRW_NEW_BLORP),
|
||||
{0, 0, 0}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user