turnip: use dirty bits for dynamic viewport/scissor state
CmdClearAttachments shader path will overwrite this state, so it needs to be re-emitted with dirty bits in that case. Signed-off-by: Jonathan Marek <jonathan@marek.ca> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3783>
This commit is contained in:
parent
ed83281f0c
commit
009082dcff
|
@ -2310,12 +2310,10 @@ tu_CmdSetViewport(VkCommandBuffer commandBuffer,
|
||||||
const VkViewport *pViewports)
|
const VkViewport *pViewports)
|
||||||
{
|
{
|
||||||
TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
|
TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
|
||||||
struct tu_cs *draw_cs = &cmd->draw_cs;
|
|
||||||
|
|
||||||
assert(firstViewport == 0 && viewportCount == 1);
|
assert(firstViewport == 0 && viewportCount == 1);
|
||||||
tu6_emit_viewport(draw_cs, pViewports);
|
cmd->state.dynamic.viewport.viewports[0] = pViewports[0];
|
||||||
|
cmd->state.dirty |= TU_CMD_DIRTY_DYNAMIC_VIEWPORT;
|
||||||
tu_cs_sanity_check(draw_cs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -2325,12 +2323,10 @@ tu_CmdSetScissor(VkCommandBuffer commandBuffer,
|
||||||
const VkRect2D *pScissors)
|
const VkRect2D *pScissors)
|
||||||
{
|
{
|
||||||
TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
|
TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
|
||||||
struct tu_cs *draw_cs = &cmd->draw_cs;
|
|
||||||
|
|
||||||
assert(firstScissor == 0 && scissorCount == 1);
|
assert(firstScissor == 0 && scissorCount == 1);
|
||||||
tu6_emit_scissor(draw_cs, pScissors);
|
cmd->state.dynamic.scissor.scissors[0] = pScissors[0];
|
||||||
|
cmd->state.dirty |= TU_CMD_DIRTY_DYNAMIC_SCISSOR;
|
||||||
tu_cs_sanity_check(draw_cs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -3431,6 +3427,16 @@ tu6_bind_draw_states(struct tu_cmd_buffer *cmd,
|
||||||
dynamic->stencil_reference.back);
|
dynamic->stencil_reference.back);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((cmd->state.dirty & TU_CMD_DIRTY_DYNAMIC_VIEWPORT) &&
|
||||||
|
(pipeline->dynamic_state.mask & TU_DYNAMIC_VIEWPORT)) {
|
||||||
|
tu6_emit_viewport(cs, &cmd->state.dynamic.viewport.viewports[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((cmd->state.dirty & TU_CMD_DIRTY_DYNAMIC_SCISSOR) &&
|
||||||
|
(pipeline->dynamic_state.mask & TU_DYNAMIC_SCISSOR)) {
|
||||||
|
tu6_emit_scissor(cs, &cmd->state.dynamic.scissor.scissors[0]);
|
||||||
|
}
|
||||||
|
|
||||||
if (cmd->state.dirty &
|
if (cmd->state.dirty &
|
||||||
(TU_CMD_DIRTY_PIPELINE | TU_CMD_DIRTY_VERTEX_BUFFERS)) {
|
(TU_CMD_DIRTY_PIPELINE | TU_CMD_DIRTY_VERTEX_BUFFERS)) {
|
||||||
for (uint32_t i = 0; i < pipeline->vi.count; i++) {
|
for (uint32_t i = 0; i < pipeline->vi.count; i++) {
|
||||||
|
|
|
@ -850,6 +850,8 @@ enum tu_cmd_dirty_bits
|
||||||
TU_CMD_DIRTY_DYNAMIC_STENCIL_COMPARE_MASK = 1 << 17,
|
TU_CMD_DIRTY_DYNAMIC_STENCIL_COMPARE_MASK = 1 << 17,
|
||||||
TU_CMD_DIRTY_DYNAMIC_STENCIL_WRITE_MASK = 1 << 18,
|
TU_CMD_DIRTY_DYNAMIC_STENCIL_WRITE_MASK = 1 << 18,
|
||||||
TU_CMD_DIRTY_DYNAMIC_STENCIL_REFERENCE = 1 << 19,
|
TU_CMD_DIRTY_DYNAMIC_STENCIL_REFERENCE = 1 << 19,
|
||||||
|
TU_CMD_DIRTY_DYNAMIC_VIEWPORT = 1 << 20,
|
||||||
|
TU_CMD_DIRTY_DYNAMIC_SCISSOR = 1 << 21,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct tu_streamout_state {
|
struct tu_streamout_state {
|
||||||
|
|
Loading…
Reference in New Issue