Lines Matching defs:pool
432 /* Load data from the query pool. */
552 /* Load data from the query pool. */
666 /* Load data from the query pool. */
1059 struct radv_query_pool *pool)
1061 if (pool->type == VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR)
1062 radv_pc_deinit_query_pool((struct radv_pc_query_pool *)pool);
1064 if (pool->bo)
1065 device->ws->buffer_destroy(device->ws, pool->bo);
1066 vk_object_base_finish(&pool->base);
1067 vk_free2(&device->vk.alloc, pAllocator, pool);
1080 struct radv_query_pool *pool = vk_alloc2(&device->vk.alloc, pAllocator, pool_struct_size, 8,
1083 if (!pool)
1086 vk_object_base_init(&device->vk, &pool->base, VK_OBJECT_TYPE_QUERY_POOL);
1088 pool->type = pCreateInfo->queryType;
1089 pool->pipeline_stats_mask = pCreateInfo->pipelineStatistics;
1095 pool->uses_gds = device->physical_device->use_ngg &&
1096 ((pool->pipeline_stats_mask & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT) ||
1101 pool->stride = 16 * device->physical_device->rad_info.max_render_backends;
1104 pool->stride = pipelinestat_block_size * 2;
1105 if (pool->uses_gds) {
1106 /* When the query pool needs GDS (for counting the number of primitives generated by a
1109 pool->stride += 8 * 2;
1117 pool->stride = 8;
1121 pool->stride = 32;
1122 if (pool->uses_gds) {
1123 /* When the query pool needs GDS, allocate 4x64-bit values for begin/end of NGG GS and
1126 pool->stride += 8 * 4;
1131 (struct radv_pc_query_pool *)pool);
1134 radv_destroy_query_pool(device, pAllocator, pool);
1143 pool->availability_offset = pool->stride * pCreateInfo->queryCount;
1144 pool->size = pool->availability_offset;
1146 pool->size += 4 * pCreateInfo->queryCount;
1148 result = device->ws->buffer_create(device->ws, pool->size, 64, RADEON_DOMAIN_GTT,
1150 RADV_BO_PRIORITY_QUERY_POOL, 0, &pool->bo);
1152 radv_destroy_query_pool(device, pAllocator, pool);
1156 pool->ptr = device->ws->buffer_map(pool->bo);
1157 if (!pool->ptr) {
1158 radv_destroy_query_pool(device, pAllocator, pool);
1162 *pQueryPool = radv_query_pool_to_handle(pool);
1170 RADV_FROM_HANDLE(radv_query_pool, pool, _pool);
1172 if (!pool)
1175 radv_destroy_query_pool(device, pAllocator, pool);
1184 RADV_FROM_HANDLE(radv_query_pool, pool, queryPool);
1194 char *src = pool->ptr + query * pool->stride;
1197 switch (pool->type) {
1268 (const uint32_t *)(pool->ptr + pool->availability_offset + 4 * query);
1278 if (pool->uses_gds) {
1290 dest += util_bitcount(pool->pipeline_stats_mask) * 8;
1292 if (pool->pipeline_stats_mask & (1u << i)) {
1297 if (pool->uses_gds &&
1308 dest += util_bitcount(pool->pipeline_stats_mask) * 4;
1310 if (pool->pipeline_stats_mask & (1u << i)) {
1315 if (pool->uses_gds &&
1387 if (pool->uses_gds) {
1407 struct radv_pc_query_pool *pc_pool = (struct radv_pc_query_pool *)pool;
1413 if (!p_atomic_read(src64 + pool->stride / 8 - i - 1))
1440 emit_query_flush(struct radv_cmd_buffer *cmd_buffer, struct radv_query_pool *pool)
1443 if (pool->size >= RADV_BUFFER_OPS_CS_THRESHOLD) {
1444 /* Only need to flush caches if the query pool size is
1455 radv_query_result_size(const struct radv_query_pool *pool, VkQueryResultFlags flags)
1458 switch (pool->type) {
1468 values += util_bitcount(pool->pipeline_stats_mask);
1488 RADV_FROM_HANDLE(radv_query_pool, pool, queryPool);
1491 uint64_t va = radv_buffer_get_va(pool->bo);
1493 size_t dst_size = radv_query_result_size(pool, flags);
1499 radv_cs_add_buffer(cmd_buffer->device->ws, cmd_buffer->cs, pool->bo);
1516 emit_query_flush(cmd_buffer, pool);
1518 switch (pool->type) {
1525 uint64_t src_va = va + query * pool->stride + rb_avail_offset;
1534 pool->bo, dst_buffer->bo, firstQuery * pool->stride,
1535 dst_buffer->offset + dstOffset, pool->stride, stride, dst_size, queryCount,
1545 uint64_t avail_va = va + pool->availability_offset + 4 * query;
1553 pool->bo, dst_buffer->bo, firstQuery * pool->stride, dst_buffer->offset + dstOffset,
1554 pool->stride, stride, dst_size, queryCount, flags, pool->pipeline_stats_mask,
1555 pool->availability_offset + 4 * firstQuery, pool->uses_gds);
1565 uint64_t local_src_va = va + query * pool->stride;
1578 pool->bo, dst_buffer->bo, firstQuery * pool->stride,
1579 dst_buffer->offset + dstOffset, pool->stride, stride, dst_size, queryCount,
1586 uint64_t src_va = va + query * pool->stride;
1599 pool->bo, dst_buffer->bo, firstQuery * pool->stride,
1600 dst_buffer->offset + dstOffset, pool->stride, stride, dst_size, queryCount,
1607 uint64_t src_va = va + query * pool->stride;
1618 pool->bo, dst_buffer->bo, firstQuery * pool->stride,
1619 dst_buffer->offset + dstOffset, pool->stride, stride, dst_size, queryCount,
1620 flags, 0, 0, pool->uses_gds);
1647 RADV_FROM_HANDLE(radv_query_pool, pool, queryPool);
1648 uint32_t value = query_clear_value(pool->type);
1657 flush_bits |= radv_fill_buffer(cmd_buffer, NULL, pool->bo,
1658 radv_buffer_get_va(pool->bo) + firstQuery * pool->stride,
1659 queryCount * pool->stride, value);
1661 if (pool->type == VK_QUERY_TYPE_PIPELINE_STATISTICS) {
1663 radv_fill_buffer(cmd_buffer, NULL, pool->bo,
1664 radv_buffer_get_va(pool->bo) + pool->availability_offset + firstQuery * 4,
1679 RADV_FROM_HANDLE(radv_query_pool, pool, queryPool);
1681 uint32_t value = query_clear_value(pool->type);
1682 uint32_t *data = (uint32_t *)(pool->ptr + firstQuery * pool->stride);
1683 uint32_t *data_end = (uint32_t *)(pool->ptr + (firstQuery + queryCount) * pool->stride);
1688 if (pool->type == VK_QUERY_TYPE_PIPELINE_STATISTICS) {
1689 memset(pool->ptr + pool->availability_offset + firstQuery * 4, 0, queryCount * 4);
1743 emit_begin_query(struct radv_cmd_buffer *cmd_buffer, struct radv_query_pool *pool, uint64_t va,
1811 if (pool->uses_gds) {
1838 if (pool->uses_gds) {
1850 radv_pc_begin_query(cmd_buffer, (struct radv_pc_query_pool *)pool, va);
1859 emit_end_query(struct radv_cmd_buffer *cmd_buffer, struct radv_query_pool *pool, uint64_t va,
1907 if (pool->uses_gds) {
1931 if (pool->uses_gds) {
1940 radv_pc_end_query(cmd_buffer, (struct radv_pc_query_pool *)pool, va);
1961 RADV_FROM_HANDLE(radv_query_pool, pool, queryPool);
1963 uint64_t va = radv_buffer_get_va(pool->bo);
1965 radv_cs_add_buffer(cmd_buffer->device->ws, cs, pool->bo);
1967 emit_query_flush(cmd_buffer, pool);
1969 va += pool->stride * query;
1971 emit_begin_query(cmd_buffer, pool, va, pool->type, flags, index);
1986 RADV_FROM_HANDLE(radv_query_pool, pool, queryPool);
1987 uint64_t va = radv_buffer_get_va(pool->bo);
1988 uint64_t avail_va = va + pool->availability_offset + 4 * query;
1989 va += pool->stride * query;
1991 /* Do not need to add the pool BO to the list because the query must
1994 emit_end_query(cmd_buffer, pool, va, avail_va, pool->type, index);
2006 va += pool->stride;
2008 emit_begin_query(cmd_buffer, pool, va, pool->type, 0, 0);
2009 emit_end_query(cmd_buffer, pool, va, avail_va, pool->type, 0);
2025 RADV_FROM_HANDLE(radv_query_pool, pool, queryPool);
2028 uint64_t va = radv_buffer_get_va(pool->bo);
2029 uint64_t query_va = va + pool->stride * query;
2031 radv_cs_add_buffer(cmd_buffer->device->ws, cs, pool->bo);
2033 emit_query_flush(cmd_buffer, pool);
2056 query_va += pool->stride;
2077 RADV_FROM_HANDLE(radv_query_pool, pool, queryPool);
2079 uint64_t pool_va = radv_buffer_get_va(pool->bo);
2080 uint64_t query_va = pool_va + pool->stride * firstQuery;
2082 radv_cs_add_buffer(cmd_buffer->device->ws, cs, pool->bo);
2084 emit_query_flush(cmd_buffer, pool);
2118 query_va += pool->stride;