mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 02:48:06 +02:00
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:
parent
d8b9ee99fa
commit
625254d6ae
6 changed files with 19 additions and 16 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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. */
|
||||
|
|
|
|||
|
|
@ -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});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue