kk: Remove buffer arg from queue writes

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:19:19 +09:00 committed by Marge Bot
parent d8b9ee99fa
commit 625254d6ae
6 changed files with 19 additions and 16 deletions

View file

@ -50,9 +50,10 @@ libkk_reset_query(global uint64_t *availability, global uint64_t *results,
}
KERNEL(1)
libkk_write_u64(global struct libkk_imm_write *write_array)
libkk_write_u64_array(global struct libkk_imm_write *write_array)
{
*write_array[cl_group_id.x].address = write_array[cl_group_id.x].value;
uint id = cl_global_id.x;
*(write_array[id].address) = write_array[id].value;
}
KERNEL(1)

View file

@ -447,11 +447,9 @@ kk_dispatch_precomp(struct kk_cmd_buffer *cmd, struct mtl_size grid,
}
void
kk_cmd_write(struct kk_cmd_buffer *cmd, mtl_buffer *buffer, uint64_t addr,
uint64_t value)
kk_cmd_write(struct kk_cmd_buffer *cmd, struct libkk_imm_write write)
{
util_dynarray_append(&cmd->encoder->imm_writes, addr);
util_dynarray_append(&cmd->encoder->imm_writes, value);
util_dynarray_append(&cmd->encoder->imm_writes, write);
}
VKAPI_ATTR void VKAPI_CALL

View file

@ -17,6 +17,8 @@
#include "kosmickrisp/bridge/mtl_types.h"
#include "kosmickrisp/libkk/kk_query.h"
#include "util/u_dynarray.h"
#include "vk_command_buffer.h"
@ -252,7 +254,6 @@ void kk_dispatch_precomp(struct kk_cmd_buffer *cmd, struct mtl_size grid,
#define MESA_DISPATCH_PRECOMP kk_dispatch_precomp
void kk_cmd_write(struct kk_cmd_buffer *cmd, mtl_buffer *buffer, uint64_t addr,
uint64_t value);
void kk_cmd_write(struct kk_cmd_buffer *cmd, struct libkk_imm_write write);
#endif

View file

@ -135,15 +135,18 @@ upload_queue_writes(struct kk_cmd_buffer *cmd)
enc->copy_query_pool_result_infos.size == 0u)
return;
uint32_t count = util_dynarray_num_elements(&enc->imm_writes, uint64_t) / 2u;
uint32_t count =
util_dynarray_num_elements(&enc->imm_writes, struct libkk_imm_write);
if (count != 0) {
struct kk_bo *bo = kk_cmd_allocate_buffer(cmd, enc->imm_writes.size, 8u);
uint64_t addr =
kk_pool_upload(cmd, enc->imm_writes.data, enc->imm_writes.size,
sizeof(struct libkk_imm_write))
.gpu;
/* kk_cmd_allocate_buffer sets the cmd buffer error so we can just exit */
if (!bo)
if (!addr)
return;
memcpy(bo->cpu, enc->imm_writes.data, enc->imm_writes.size);
struct mtl_size grid = {count, 1, 1};
libkk_write_u64(cmd, grid, false, bo->gpu);
libkk_write_u64_array(cmd, grid, false, addr);
enc->imm_writes.size = 0u;
}

View file

@ -94,7 +94,7 @@ kk_CmdSetEvent2(VkCommandBuffer commandBuffer, VkEvent _event,
{
VK_FROM_HANDLE(kk_event, event, _event);
VK_FROM_HANDLE(kk_cmd_buffer, cmd, commandBuffer);
kk_cmd_write(cmd, event->bo->map, event->addr, VK_EVENT_SET);
kk_cmd_write(cmd, (struct libkk_imm_write){event->addr, VK_EVENT_SET});
/* Can only be called from outside of a render pass, which means we can
* directly upload the writes. */
@ -107,7 +107,7 @@ kk_CmdResetEvent2(VkCommandBuffer commandBuffer, VkEvent _event,
{
VK_FROM_HANDLE(kk_event, event, _event);
VK_FROM_HANDLE(kk_cmd_buffer, cmd, commandBuffer);
kk_cmd_write(cmd, event->bo->map, event->addr, VK_EVENT_RESET);
kk_cmd_write(cmd, (struct libkk_imm_write){event->addr, VK_EVENT_RESET});
/* Can only be called from outside of a render pass, which means we can
* directly upload the writes. */

View file

@ -284,7 +284,7 @@ kk_CmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool,
/* Make the query available */
if (kk_has_available(pool)) {
uint64_t addr = kk_query_available_addr(pool, query);
kk_cmd_write(cmd, pool->bo->map, addr, true);
kk_cmd_write(cmd, (struct libkk_imm_write){addr, true});
}
}