summaryrefslogtreecommitdiffstats
path: root/src/intel/vulkan
diff options
context:
space:
mode:
Diffstat (limited to 'src/intel/vulkan')
-rw-r--r--src/intel/vulkan/genX_query.c52
1 files changed, 20 insertions, 32 deletions
diff --git a/src/intel/vulkan/genX_query.c b/src/intel/vulkan/genX_query.c
index 10fe99d6914..4ff85f7ae66 100644
--- a/src/intel/vulkan/genX_query.c
+++ b/src/intel/vulkan/genX_query.c
@@ -94,12 +94,7 @@ VkResult genX(CreateQueryPool)(
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:
@@ -169,54 +164,51 @@ anv_query_address(struct anv_query_pool *pool, uint32_t query)
}
/**
- * 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
@@ -241,11 +233,7 @@ query_slot(struct anv_query_pool *pool, uint32_t query)
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