kk: Demote events, query availabilities and queue writes to 32 bits
Some checks are pending
macOS-CI / macOS-CI (dri) (push) Waiting to run
macOS-CI / macOS-CI (xlib) (push) Waiting to run

Signed-off-by: Aitor Camacho <aitor@lunarg.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40849>
This commit is contained in:
Aitor Camacho 2026-04-08 16:29:42 +09:00 committed by Marge Bot
parent 625254d6ae
commit 25cb744d35
6 changed files with 16 additions and 14 deletions

View file

@ -27,7 +27,7 @@ query_report(global uint64_t *results, global uint16_t *oq_index,
* setting all element values to 0 and emitting them as available.
*/
KERNEL(1)
libkk_reset_query(global uint64_t *availability, global uint64_t *results,
libkk_reset_query(global uint32_t *availability, global uint64_t *results,
global uint16_t *oq_index, uint32_t first_query,
uint16_t reports_per_query, int set_available)
{
@ -50,14 +50,14 @@ libkk_reset_query(global uint64_t *availability, global uint64_t *results,
}
KERNEL(1)
libkk_write_u64_array(global struct libkk_imm_write *write_array)
libkk_write_u32_array(global struct libkk_imm_write *write_array)
{
uint id = cl_global_id.x;
*(write_array[id].address) = write_array[id].value;
}
KERNEL(1)
libkk_copy_queries(global uint64_t *availability, global uint64_t *results,
libkk_copy_queries(global uint32_t *availability, global uint64_t *results,
global uint16_t *oq_index, uint64_t dst_addr,
uint64_t dst_stride, uint32_t first_query,
VkQueryResultFlagBits flags, uint16_t reports_per_query)

View file

@ -12,8 +12,8 @@
#include "compiler/libcl/libcl.h"
struct libkk_imm_write {
DEVICE(uint64_t) address;
uint64_t value;
DEVICE(uint32_t) address;
uint32_t value;
};
#define LIBKK_QUERY_UNAVAILABLE (uint64_t)((int64_t)-1)

View file

@ -146,7 +146,7 @@ upload_queue_writes(struct kk_cmd_buffer *cmd)
if (!addr)
return;
struct mtl_size grid = {count, 1, 1};
libkk_write_u64_array(cmd, grid, false, addr);
libkk_write_u32_array(cmd, grid, false, addr);
enc->imm_writes.size = 0u;
}

View file

@ -13,7 +13,9 @@
#include "kk_encoder.h"
#include "kk_entrypoints.h"
#define KK_EVENT_MEM_SIZE sizeof(uint64_t)
#define KK_EVENT_MEM_SIZE sizeof(VkResult)
static_assert(sizeof(uint32_t) == KK_EVENT_MEM_SIZE, "Events are 32 bits");
VKAPI_ATTR VkResult VKAPI_CALL
kk_CreateEvent(VkDevice device, const VkEventCreateInfo *pCreateInfo,

View file

@ -19,7 +19,7 @@ struct kk_event {
struct kk_bo *bo;
uint64_t addr;
uint64_t *status;
VkResult *status;
};
VK_DEFINE_NONDISP_HANDLE_CASTS(kk_event, base, VkEvent, VK_OBJECT_TYPE_EVENT)

View file

@ -72,7 +72,7 @@ kk_CreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo *pCreateInfo,
/* We place the availability first and then data */
pool->query_start = 0;
if (kk_has_available(pool)) {
pool->query_start = align(pool->vk.query_count * sizeof(uint64_t),
pool->query_start = align(pool->vk.query_count * sizeof(uint32_t),
sizeof(struct kk_query_report));
}
@ -142,12 +142,12 @@ kk_DestroyQueryPool(VkDevice device, VkQueryPool queryPool,
vk_query_pool_destroy(&dev->vk, pAllocator, &pool->vk);
}
static uint64_t *
static uint32_t *
kk_query_available_map(struct kk_query_pool *pool, uint32_t query)
{
assert(kk_has_available(pool));
assert(query < pool->vk.query_count);
return (uint64_t *)pool->bo->cpu + query;
return (uint32_t *)pool->bo->cpu + query;
}
static uint64_t
@ -175,7 +175,7 @@ kk_query_available_addr(struct kk_query_pool *pool, uint32_t query)
{
assert(kk_has_available(pool));
assert(query < pool->vk.query_count);
return pool->bo->gpu + query * sizeof(uint64_t);
return pool->bo->gpu + query * sizeof(uint32_t);
}
static struct kk_query_report *
@ -204,7 +204,7 @@ kk_ResetQueryPool(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery,
uint64_t value = 0;
if (kk_has_available(pool)) {
uint64_t *available = kk_query_available_map(pool, firstQuery + i);
uint32_t *available = kk_query_available_map(pool, firstQuery + i);
*available = 0u;
} else {
value = UINT64_MAX;
@ -293,7 +293,7 @@ kk_query_is_available(struct kk_device *dev, struct kk_query_pool *pool,
uint32_t query)
{
if (kk_has_available(pool)) {
uint64_t *available = kk_query_available_map(pool, query);
uint32_t *available = kk_query_available_map(pool, query);
return p_atomic_read(available) != 0;
} else {
const struct kk_query_report *report =