uint64s_per_slot += 4;
break;
case VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL: {
- uint64s_per_slot = 2 * OA_REPORT_N_UINT64; /* begin & end OA reports */
- uint64s_per_slot += 4; /* PerfCounter 1 & 2 */
- uint64s_per_slot++; /* 2 * 32bit RPSTAT register */
- uint64s_per_slot++; /* 64bit marker */
- uint64s_per_slot++; /* availability */
- uint64s_per_slot = align_u32(uint64s_per_slot, 8); /* OA reports must be aligned to 64 bytes */
+ uint64s_per_slot = 72; /* 576 bytes, see layout below */
break;
}
default:
}
/**
- * VK_INTEL_performance_query layout:
+ * VK_INTEL_performance_query layout (576 bytes) :
*
* ------------------------------
- * | end MI_RPC (256b) |
+ * | availability (8b) |
* |----------------------------|
- * | begin MI_RPC (256b) |
+ * | marker (8b) |
+ * |----------------------------|
+ * | begin RPSTAT register (4b) |
+ * |----------------------------|
+ * | end RPSTAT register (4b) |
* |----------------------------|
* | begin perfcntr 1 & 2 (16b) |
* |----------------------------|
* | end perfcntr 1 & 2 (16b) |
* |----------------------------|
- * | begin RPSTAT register (4b) |
- * |----------------------------|
- * | end RPSTAT register (4b) |
+ * | Unused (8b) |
* |----------------------------|
- * | marker (8b) |
+ * | begin MI_RPC (256b) |
* |----------------------------|
- * | availability (8b) |
+ * | end MI_RPC (256b) |
* ------------------------------
*/
static uint32_t
-intel_perf_mi_rpc_offset(bool end)
+intel_perf_marker_offset(void)
{
- return end ? 0 : 256;
+ return 8;
}
static uint32_t
-intel_perf_counter(bool end)
+intel_perf_rpstart_offset(bool end)
{
- uint32_t offset = 512;
- offset += end ? 2 * sizeof(uint64_t) : 0;
- return offset;
+ return 16 + (end ? sizeof(uint32_t) : 0);
}
static uint32_t
-intel_perf_rpstart_offset(bool end)
+intel_perf_counter(bool end)
{
- uint32_t offset = intel_perf_counter(false) +
- 4 * sizeof(uint64_t);
- offset += end ? sizeof(uint32_t) : 0;
- return offset;
+ return 24 + (end ? (2 * sizeof(uint64_t)) : 0);
}
static uint32_t
-intel_perf_marker_offset(void)
+intel_perf_mi_rpc_offset(bool end)
{
- return intel_perf_rpstart_offset(false) + sizeof(uint64_t);
+ return 64 + (end ? 256 : 0);
}
static void
static bool
query_is_available(struct anv_query_pool *pool, uint32_t query)
{
- if (pool->type == VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL) {
- return *(volatile uint64_t *)((uint8_t *)query_slot(pool, query) +
- pool->stride - 8);
- } else
- return *(volatile uint64_t *)query_slot(pool, query);
+ return *(volatile uint64_t *)query_slot(pool, query);
}
static VkResult