tu: Add helper for CP_COND_REG_EXEC
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3713>
This commit is contained in:
parent
6a0c4008bf
commit
07e07daeae
|
@ -207,6 +207,46 @@ tu_cs_emit_call(struct tu_cs *cs, const struct tu_cs *target)
|
||||||
tu_cs_emit_ib(cs, target->entries + i);
|
tu_cs_emit_ib(cs, target->entries + i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Helpers for bracketing a large sequence of commands of unknown size inside
|
||||||
|
* a CP_COND_REG_EXEC packet.
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct tu_cond_exec_state {
|
||||||
|
uint32_t *dword_ptr;
|
||||||
|
uint32_t max_dwords;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline VkResult
|
||||||
|
tu_cond_exec_start(struct tu_device *dev, struct tu_cs *cs,
|
||||||
|
struct tu_cond_exec_state *state,
|
||||||
|
uint32_t condition, uint32_t max_dwords)
|
||||||
|
{
|
||||||
|
/* Reserve enough space so that both the condition packet and the actual
|
||||||
|
* condition will fit in the same IB.
|
||||||
|
*/
|
||||||
|
VkResult result = tu_cs_reserve_space(dev, cs, max_dwords + 3);
|
||||||
|
if (result != VK_SUCCESS)
|
||||||
|
return result;
|
||||||
|
|
||||||
|
state->max_dwords = max_dwords;
|
||||||
|
tu_cs_emit_pkt7(cs, CP_COND_REG_EXEC, 2);
|
||||||
|
tu_cs_emit(cs, condition);
|
||||||
|
state->dword_ptr = cs->cur;
|
||||||
|
/* Emit dummy DWORD field here */
|
||||||
|
tu_cs_emit(cs, CP_COND_REG_EXEC_1_DWORDS(0));
|
||||||
|
|
||||||
|
return VK_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
tu_cond_exec_end(struct tu_cs *cs, struct tu_cond_exec_state *state)
|
||||||
|
{
|
||||||
|
/* Subtract one here to account for the DWORD field itself. */
|
||||||
|
uint32_t actual_dwords = cs->cur - state->dword_ptr - 1;
|
||||||
|
assert(actual_dwords <= state->max_dwords);
|
||||||
|
*state->dword_ptr = actual_dwords;
|
||||||
|
}
|
||||||
|
|
||||||
#define fd_reg_pair tu_reg_value
|
#define fd_reg_pair tu_reg_value
|
||||||
#define __bo_type struct tu_bo *
|
#define __bo_type struct tu_bo *
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue