mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-21 20:10:14 +01:00
tu/a7xx: Fix occlusion query
Signed-off-by: Danylo Piliaiev <dpiliaiev@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23217>
This commit is contained in:
parent
9eaf8ab8a0
commit
720480943d
3 changed files with 30 additions and 14 deletions
|
|
@ -2573,7 +2573,7 @@ to upconvert to 32b float internally?
|
|||
</reg32>
|
||||
</array>
|
||||
<!-- 0x891b-0x8926 invalid -->
|
||||
<reg64 offset="0x8927" name="RB_SAMPLE_COUNT_ADDR" type="waddress" align="16" usage="cmd"/>
|
||||
<reg64 offset="0x8927" name="RB_SAMPLE_COUNT_ADDR" type="waddress" align="16" variants="A6XX" usage="cmd"/>
|
||||
<!-- 0x8929-0x89ff invalid -->
|
||||
|
||||
<!-- TODO: there are some registers in the 0x8a00-0x8bff range -->
|
||||
|
|
|
|||
|
|
@ -650,7 +650,7 @@ tu_autotune_begin_renderpass(struct tu_cmd_buffer *cmd,
|
|||
tu_cs_emit_regs(cs, A6XX_RB_SAMPLE_COUNT_CONTROL(.copy = true));
|
||||
|
||||
tu_cs_emit_regs(cs, A6XX_RB_SAMPLE_COUNT_ADDR(.qword = result_iova));
|
||||
|
||||
/* A7XX TODO: Fixup ZPASS_DONE */
|
||||
tu_cs_emit_pkt7(cs, CP_EVENT_WRITE, 1);
|
||||
tu_cs_emit(cs, ZPASS_DONE);
|
||||
}
|
||||
|
|
@ -672,6 +672,7 @@ void tu_autotune_end_renderpass(struct tu_cmd_buffer *cmd,
|
|||
|
||||
tu_cs_emit_regs(cs, A6XX_RB_SAMPLE_COUNT_ADDR(.qword = result_iova));
|
||||
|
||||
/* A7XX TODO: Fixup ZPASS_DONE */
|
||||
tu_cs_emit_pkt7(cs, CP_EVENT_WRITE, 1);
|
||||
tu_cs_emit(cs, ZPASS_DONE);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -821,6 +821,7 @@ tu_ResetQueryPool(VkDevice device,
|
|||
}
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static void
|
||||
emit_begin_occlusion_query(struct tu_cmd_buffer *cmdbuf,
|
||||
struct tu_query_pool *pool,
|
||||
|
|
@ -846,11 +847,17 @@ emit_begin_occlusion_query(struct tu_cmd_buffer *cmdbuf,
|
|||
tu_cs_emit_regs(cs,
|
||||
A6XX_RB_SAMPLE_COUNT_CONTROL(.copy = true));
|
||||
|
||||
if (CHIP == A6XX) {
|
||||
tu_cs_emit_regs(cs,
|
||||
A6XX_RB_SAMPLE_COUNT_ADDR(.qword = begin_iova));
|
||||
|
||||
tu_cs_emit_pkt7(cs, CP_EVENT_WRITE, 1);
|
||||
tu_cs_emit(cs, ZPASS_DONE);
|
||||
} else {
|
||||
tu_cs_emit_pkt7(cs, CP_EVENT_WRITE7, 3);
|
||||
tu_cs_emit(cs, CP_EVENT_WRITE7_0(.event = ZPASS_DONE,
|
||||
.write_sample_count = true).value);
|
||||
tu_cs_emit_qw(cs, begin_iova);
|
||||
}
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
|
|
@ -1064,7 +1071,7 @@ tu_CmdBeginQuery(VkCommandBuffer commandBuffer,
|
|||
* GL_SAMPLES_PASSED and GL_ANY_SAMPLES_PASSED, so we can similarly
|
||||
* ignore the VK_QUERY_CONTROL_PRECISE_BIT flag here.
|
||||
*/
|
||||
emit_begin_occlusion_query(cmdbuf, pool, query);
|
||||
emit_begin_occlusion_query<CHIP>(cmdbuf, pool, query);
|
||||
break;
|
||||
case VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT:
|
||||
emit_begin_xfb_query<CHIP>(cmdbuf, pool, query, 0);
|
||||
|
|
@ -1111,6 +1118,7 @@ tu_CmdBeginQueryIndexedEXT(VkCommandBuffer commandBuffer,
|
|||
}
|
||||
TU_GENX(tu_CmdBeginQueryIndexedEXT);
|
||||
|
||||
template <chip CHIP>
|
||||
static void
|
||||
emit_end_occlusion_query(struct tu_cmd_buffer *cmdbuf,
|
||||
struct tu_query_pool *pool,
|
||||
|
|
@ -1146,11 +1154,18 @@ emit_end_occlusion_query(struct tu_cmd_buffer *cmdbuf,
|
|||
tu_cs_emit_regs(cs,
|
||||
A6XX_RB_SAMPLE_COUNT_CONTROL(.copy = true));
|
||||
|
||||
if (CHIP == A6XX) {
|
||||
tu_cs_emit_regs(cs,
|
||||
A6XX_RB_SAMPLE_COUNT_ADDR(.qword = end_iova));
|
||||
|
||||
tu_cs_emit_pkt7(cs, CP_EVENT_WRITE, 1);
|
||||
tu_cs_emit(cs, ZPASS_DONE);
|
||||
} else {
|
||||
/* A7XX TODO: Calculate (end - begin) via ZPASS_DONE. */
|
||||
tu_cs_emit_pkt7(cs, CP_EVENT_WRITE, 3);
|
||||
tu_cs_emit(cs, CP_EVENT_WRITE7_0(.event = ZPASS_DONE,
|
||||
.write_sample_count = true).value);
|
||||
tu_cs_emit_qw(cs, end_iova);
|
||||
}
|
||||
|
||||
tu_cs_emit_pkt7(cs, CP_WAIT_REG_MEM, 6);
|
||||
tu_cs_emit(cs, CP_WAIT_REG_MEM_0_FUNCTION(WRITE_NE) |
|
||||
|
|
@ -1534,7 +1549,7 @@ tu_CmdEndQuery(VkCommandBuffer commandBuffer,
|
|||
|
||||
switch (pool->type) {
|
||||
case VK_QUERY_TYPE_OCCLUSION:
|
||||
emit_end_occlusion_query(cmdbuf, pool, query);
|
||||
emit_end_occlusion_query<CHIP>(cmdbuf, pool, query);
|
||||
break;
|
||||
case VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT:
|
||||
emit_end_xfb_query<CHIP>(cmdbuf, pool, query, 0);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue