mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 04:58:05 +02:00
kk: Demote events, query availabilities and queue writes to 32 bits
Signed-off-by: Aitor Camacho <aitor@lunarg.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40849>
This commit is contained in:
parent
625254d6ae
commit
25cb744d35
6 changed files with 16 additions and 14 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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 =
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue