zink: refcount the correct query pool

otherwise the pool is freed before the query and zink will
give the vulkan driver NULL query pool which can make it crash.

this was seen when running the following cases with
primitivesGeneratedQueryWithRasterizerDiscard and color write
features disabled:
dEQP-GL45.functional.tessellation.invariance.outer_triangle_set.triangles_fractional_odd_spacing
dEQP-GL45.functional.tessellation.invariance.outer_triangle_set.triangles_fractional_even_spacing
dEQP-GL45.functional.tessellation.invariance.outer_triangle_set.quads_equal_spacing
dEQP-GL45.functional.tessellation.invariance.outer_triangle_set.quads_fractional_odd_spacing
dEQP-GL45.functional.tessellation.invariance.outer_triangle_set.quads_fractional_even_spacing
dEQP-GL45.functional.tessellation.invariance.tess_coord_component_range.triangles_equal_spacing_ccw
dEQP-GL45.functional.tessellation.invariance.tess_coord_component_range.triangles_equal_spacing_ccw_point_mode
dEQP-GL45.functional.tessellation.invariance.tess_coord_component_range.triangles_equal_spacing_cw
dEQP-GL45.functional.tessellation.invariance.tess_coord_component_range.triangles_equal_spacing_cw_point_mode
dEQP-GL45.functional.tessellation.invariance.tess_coord_component_range.triangles_fractional_odd_spacing_ccw
dEQP-GL45.functional.tessellation.invariance.tess_coord_component_range.triangles_fractional_odd_spacing_ccw_point_mode
dEQP-GL45.functional.tessellation.invariance.tess_coord_component_range.triangles_fractional_odd_spacing_cw
dEQP-GL45.functional.tessellation.invariance.tess_coord_component_range.triangles_fractional_odd_spacing_cw_point_mode
dEQP-GL45.functional.tessellation.invariance.tess_coord_component_range.triangles_fractional_even_spacing_ccw
dEQP-GL45.functional.tessellation.invariance.tess_coord_component_range.triangles_fractional_even_spacing_ccw_point_mode

Fixes: e5d517f362 ("zink: rework query pool overflow")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22575>
This commit is contained in:
SoroushIMG 2023-04-19 22:10:15 +01:00 committed by Marge Bot
parent f6b5e128c1
commit 3291050cc1

View file

@ -468,8 +468,6 @@ query_pool_get_range(struct zink_context *ctx, struct zink_query *q)
vkq->pool->refcount++;
} else {
struct zink_query_pool *pool = find_or_allocate_qp(ctx, q, pool_idx);
pool->refcount++;
pool->last_range++;
if (pool->last_range == NUM_QUERIES) {
list_del(&pool->list);
pool = find_or_allocate_qp(ctx, q, pool_idx);
@ -480,12 +478,12 @@ query_pool_get_range(struct zink_context *ctx, struct zink_query *q)
return;
}
pool->refcount++;
vkq->refcount = 1;
vkq->needs_reset = true;
vkq->pool = pool;
vkq->started = false;
vkq->query_id = pool->last_range;
vkq->query_id = pool->last_range++;
}
unref_vk_query(ctx, start->vkq[i]);
start->vkq[i] = vkq;