VkQueryType vkqtype;
unsigned index;
- bool use_64bit;
bool precise;
bool xfb_running;
bool xfb_overflow;
}
static VkQueryType
-convert_query_type(unsigned query_type, bool *use_64bit, bool *precise)
+convert_query_type(unsigned query_type, bool *precise)
{
- *use_64bit = false;
*precise = false;
switch (query_type) {
case PIPE_QUERY_OCCLUSION_COUNTER:
*precise = true;
- *use_64bit = true;
/* fallthrough */
case PIPE_QUERY_OCCLUSION_PREDICATE:
case PIPE_QUERY_OCCLUSION_PREDICATE_CONSERVATIVE:
return VK_QUERY_TYPE_OCCLUSION;
case PIPE_QUERY_TIME_ELAPSED:
case PIPE_QUERY_TIMESTAMP:
- *use_64bit = true;
return VK_QUERY_TYPE_TIMESTAMP;
case PIPE_QUERY_PIPELINE_STATISTICS_SINGLE:
- *use_64bit = true;
- /* fallthrough */
case PIPE_QUERY_PRIMITIVES_GENERATED:
return VK_QUERY_TYPE_PIPELINE_STATISTICS;
case PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE:
case PIPE_QUERY_SO_OVERFLOW_PREDICATE:
case PIPE_QUERY_PRIMITIVES_EMITTED:
- *use_64bit = true;
return VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT;
default:
debug_printf("unknown query: %s\n",
query->index = index;
query->type = query_type;
- query->vkqtype = convert_query_type(query_type, &query->use_64bit, &query->precise);
+ query->vkqtype = convert_query_type(query_type, &query->precise);
if (query->vkqtype == -1)
return NULL;
result->u64 += xfb_results[i + 1];
else
/* if a given draw had a geometry shader, we need to use the second result */
- result->u64 += ((uint32_t*)results)[i + query->have_gs[query->last_start + i / 2]];
+ result->u64 += results[i + query->have_gs[query->last_start + i / 2]];
break;
case PIPE_QUERY_PRIMITIVES_EMITTED:
/* A query pool created with this type will capture 2 integers -
if (wait)
flags |= VK_QUERY_RESULT_WAIT_BIT;
- if (query->use_64bit)
- flags |= VK_QUERY_RESULT_64_BIT;
+ flags |= VK_QUERY_RESULT_64_BIT;
if (result != &query->accumulated_result) {
if (query->type == PIPE_QUERY_TIMESTAMP ||
last_start, num_results,
sizeof(results),
results,
- sizeof(uint64_t),
+ sizeof(uint64_t) * result_size,
flags);
if (status != VK_SUCCESS)
return false;
query->last_start, num_results,
sizeof(results),
results,
- sizeof(uint64_t),
+ sizeof(uint64_t) * 2,
flags);
if (status != VK_SUCCESS)
return false;
if (mode == PIPE_RENDER_COND_WAIT || mode == PIPE_RENDER_COND_BY_REGION_WAIT)
flags |= VK_QUERY_RESULT_WAIT_BIT;
- if (query->use_64bit)
- flags |= VK_QUERY_RESULT_64_BIT;
+ flags |= VK_QUERY_RESULT_64_BIT;
int num_results = query->curr_query - query->last_start;
if (query->type != PIPE_QUERY_PRIMITIVES_GENERATED &&
!is_so_overflow_query(query)) {