From c82d7e36174198b5dea3811fb11672d33aed4acb Mon Sep 17 00:00:00 2001 From: Danylo Piliaiev Date: Fri, 10 Dec 2021 17:15:39 +0200 Subject: [PATCH] turnip: Fix operator precedence in address calculation macros for queries Fixes crash in Oblivion, Skyrim, Crysis running through DXVK on 32b systems. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5723 Fixes: 937dd76426b2b372a18be35e1416eed291524af7 "turnip: Implement VK_KHR_performance_query" Signed-off-by: Danylo Piliaiev Part-of: --- src/freedreno/vulkan/tu_query.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/freedreno/vulkan/tu_query.c b/src/freedreno/vulkan/tu_query.c index 48da4f1ae25..27f5860c79e 100644 --- a/src/freedreno/vulkan/tu_query.c +++ b/src/freedreno/vulkan/tu_query.c @@ -117,7 +117,7 @@ struct PACKED perf_query_slot { query_iova(struct occlusion_query_slot, pool, query, field) #define pipeline_stat_query_iova(pool, query, field) \ - pool->bo.iova + pool->stride * query + \ + pool->bo.iova + pool->stride * (query) + \ offsetof(struct pipeline_stat_query_slot, field) #define primitive_query_iova(pool, query, field, i) \ @@ -125,9 +125,9 @@ struct PACKED perf_query_slot { offsetof(struct primitive_slot_value, values[i]) #define perf_query_iova(pool, query, field, i) \ - pool->bo.iova + pool->stride * query + \ + pool->bo.iova + pool->stride * (query) + \ sizeof(struct query_slot) + \ - sizeof(struct perfcntr_query_slot) * i + \ + sizeof(struct perfcntr_query_slot) * (i) + \ offsetof(struct perfcntr_query_slot, field) #define query_available_iova(pool, query) \ @@ -135,11 +135,11 @@ struct PACKED perf_query_slot { #define query_result_iova(pool, query, type, i) \ pool->bo.iova + pool->stride * (query) + \ - sizeof(struct query_slot) + sizeof(type) * i + sizeof(struct query_slot) + sizeof(type) * (i) #define query_result_addr(pool, query, type, i) \ - pool->bo.map + pool->stride * query + \ - sizeof(struct query_slot) + sizeof(type) * i + pool->bo.map + pool->stride * (query) + \ + sizeof(struct query_slot) + sizeof(type) * (i) #define query_is_available(slot) slot->available