mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-04 10:58:15 +02:00
vk/cmd_queue: simplify gross struct duplication
+lavapipe fixups from konstantin Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41516>
This commit is contained in:
parent
5b40c77137
commit
9b7b28d7d5
4 changed files with 39 additions and 41 deletions
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
#include "lvp_acceleration_structure.h"
|
||||
#include "lvp_entrypoints.h"
|
||||
#include "lvp_private.h"
|
||||
|
||||
#include "radix_sort/radix_sort_u64.h"
|
||||
#include "bvh/vk_bvh.h"
|
||||
|
|
@ -105,19 +106,20 @@ lvp_write_buffer_cp(VkCommandBuffer cmdbuf, VkDeviceAddress addr,
|
|||
{
|
||||
VK_FROM_HANDLE(lvp_cmd_buffer, cmd_buffer, cmdbuf);
|
||||
|
||||
struct lvp_cmd_write_buffer_cp *entry =
|
||||
linear_zalloc_child(cmd_buffer->vk.cmd_queue.ctx, sizeof(struct lvp_cmd_write_buffer_cp) + size);
|
||||
struct vk_cmd_queue_entry *entry =
|
||||
linear_zalloc_child(cmd_buffer->vk.cmd_queue.ctx, offsetof(struct vk_cmd_queue_entry, u) + sizeof(struct lvp_cmd_write_buffer_cp) + size);
|
||||
if (!entry)
|
||||
return;
|
||||
|
||||
entry->base.type = LVP_CMD_WRITE_BUFFER_CP;
|
||||
entry->addr = addr;
|
||||
entry->data = entry + 1;
|
||||
entry->size = size;
|
||||
entry->type = LVP_CMD_WRITE_BUFFER_CP;
|
||||
|
||||
memcpy(entry->data, data, size);
|
||||
struct lvp_cmd_write_buffer_cp *cmd = (struct lvp_cmd_write_buffer_cp *)((uint8_t *)entry + offsetof(struct vk_cmd_queue_entry, u));
|
||||
cmd->addr = addr;
|
||||
cmd->data = cmd + 1;
|
||||
cmd->size = size;
|
||||
memcpy(cmd->data, data, size);
|
||||
|
||||
list_addtail(&entry->base.cmd_link, &cmd_buffer->vk.cmd_queue.cmds);
|
||||
list_addtail(&entry->cmd_link, &cmd_buffer->vk.cmd_queue.cmds);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -132,7 +134,7 @@ lvp_cmd_dispatch_unaligned(VkCommandBuffer cmdbuf, uint32_t invocations_x,
|
|||
VK_FROM_HANDLE(lvp_cmd_buffer, cmd_buffer, cmdbuf);
|
||||
|
||||
struct vk_cmd_queue_entry *entry =
|
||||
linear_zalloc_child(cmd_buffer->vk.cmd_queue.ctx, sizeof(struct vk_cmd_queue_entry));
|
||||
linear_zalloc_child(cmd_buffer->vk.cmd_queue.ctx, offsetof(struct vk_cmd_queue_entry, u) + sizeof(struct vk_cmd_dispatch));
|
||||
if (!entry)
|
||||
return;
|
||||
|
||||
|
|
@ -151,17 +153,19 @@ lvp_cmd_fill_buffer_addr(VkCommandBuffer cmdbuf, VkDeviceAddress addr,
|
|||
{
|
||||
VK_FROM_HANDLE(lvp_cmd_buffer, cmd_buffer, cmdbuf);
|
||||
|
||||
struct lvp_cmd_fill_buffer_addr *entry =
|
||||
linear_zalloc_child(cmd_buffer->vk.cmd_queue.ctx, sizeof(struct lvp_cmd_write_buffer_cp));
|
||||
struct vk_cmd_queue_entry *entry =
|
||||
linear_zalloc_child(cmd_buffer->vk.cmd_queue.ctx, offsetof(struct vk_cmd_queue_entry, u) + sizeof(struct lvp_cmd_fill_buffer_addr));
|
||||
if (!entry)
|
||||
return;
|
||||
|
||||
entry->base.type = LVP_CMD_FILL_BUFFER_ADDR;
|
||||
entry->addr = addr;
|
||||
entry->size = size;
|
||||
entry->data = data;
|
||||
entry->type = LVP_CMD_FILL_BUFFER_ADDR;
|
||||
|
||||
list_addtail(&entry->base.cmd_link, &cmd_buffer->vk.cmd_queue.cmds);
|
||||
struct lvp_cmd_fill_buffer_addr *cmd = (struct lvp_cmd_fill_buffer_addr *)((uint8_t *)entry + offsetof(struct vk_cmd_queue_entry, u));
|
||||
cmd->addr = addr;
|
||||
cmd->size = size;
|
||||
cmd->data = data;
|
||||
|
||||
list_addtail(&entry->cmd_link, &cmd_buffer->vk.cmd_queue.cmds);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -170,23 +174,24 @@ lvp_enqueue_encode_as(VkCommandBuffer commandBuffer, const struct vk_acceleratio
|
|||
VK_FROM_HANDLE(lvp_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
VK_FROM_HANDLE(vk_acceleration_structure, dst, state->build_info->dstAccelerationStructure);
|
||||
|
||||
struct lvp_cmd_encode_as *entry =
|
||||
linear_zalloc_child(cmd_buffer->vk.cmd_queue.ctx, sizeof(struct lvp_cmd_encode_as));
|
||||
struct vk_cmd_queue_entry *entry =
|
||||
linear_zalloc_child(cmd_buffer->vk.cmd_queue.ctx, offsetof(struct vk_cmd_queue_entry, u) + sizeof(struct lvp_cmd_encode_as));
|
||||
if (!entry)
|
||||
return;
|
||||
|
||||
entry->base.type = LVP_CMD_ENCODE_AS;
|
||||
entry->type = LVP_CMD_ENCODE_AS;
|
||||
|
||||
uint64_t intermediate_header_addr = state->build_info->scratchData.deviceAddress + state->scratch.header_offset;
|
||||
uint64_t intermediate_bvh_addr = state->build_info->scratchData.deviceAddress + state->scratch.ir_offset;
|
||||
|
||||
entry->dst = dst;
|
||||
entry->intermediate_as_addr = intermediate_bvh_addr;
|
||||
entry->intermediate_header_addr = intermediate_header_addr;
|
||||
entry->leaf_count = state->leaf_node_count;
|
||||
entry->geometry_type = vk_get_as_geometry_type(state->build_info);
|
||||
struct lvp_cmd_encode_as *cmd = (struct lvp_cmd_encode_as *)((uint8_t *)entry + offsetof(struct vk_cmd_queue_entry, u));
|
||||
cmd->dst = dst;
|
||||
cmd->intermediate_as_addr = intermediate_bvh_addr;
|
||||
cmd->intermediate_header_addr = intermediate_header_addr;
|
||||
cmd->leaf_count = state->leaf_node_count;
|
||||
cmd->geometry_type = vk_get_as_geometry_type(state->build_info);
|
||||
|
||||
list_addtail(&entry->base.cmd_link, &cmd_buffer->vk.cmd_queue.cmds);
|
||||
list_addtail(&entry->cmd_link, &cmd_buffer->vk.cmd_queue.cmds);
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
|
|
@ -662,7 +667,7 @@ lvp_enqueue_save_state(VkCommandBuffer cmdbuf)
|
|||
VK_FROM_HANDLE(lvp_cmd_buffer, cmd_buffer, cmdbuf);
|
||||
|
||||
struct vk_cmd_queue_entry *entry =
|
||||
linear_zalloc_child(cmd_buffer->vk.cmd_queue.ctx, sizeof(struct vk_cmd_queue_entry));
|
||||
linear_zalloc_child(cmd_buffer->vk.cmd_queue.ctx, offsetof(struct vk_cmd_queue_entry, u));
|
||||
if (!entry)
|
||||
return;
|
||||
|
||||
|
|
@ -677,7 +682,7 @@ lvp_enqueue_restore_state(VkCommandBuffer cmdbuf)
|
|||
VK_FROM_HANDLE(lvp_cmd_buffer, cmd_buffer, cmdbuf);
|
||||
|
||||
struct vk_cmd_queue_entry *entry =
|
||||
linear_zalloc_child(cmd_buffer->vk.cmd_queue.ctx, sizeof(struct vk_cmd_queue_entry));
|
||||
linear_zalloc_child(cmd_buffer->vk.cmd_queue.ctx, offsetof(struct vk_cmd_queue_entry, u));
|
||||
if (!entry)
|
||||
return;
|
||||
|
||||
|
|
|
|||
|
|
@ -5193,7 +5193,8 @@ handle_trace_rays_indirect2(struct vk_cmd_queue_entry *cmd, struct rendering_sta
|
|||
static void
|
||||
handle_write_buffer_cp(struct vk_cmd_queue_entry *cmd, struct rendering_state *state)
|
||||
{
|
||||
struct lvp_cmd_write_buffer_cp *write = (struct lvp_cmd_write_buffer_cp *)cmd;
|
||||
struct lvp_cmd_write_buffer_cp *write =
|
||||
(struct lvp_cmd_write_buffer_cp *)((uint8_t *)cmd + offsetof(struct vk_cmd_queue_entry, u));
|
||||
|
||||
finish_fence(state);
|
||||
|
||||
|
|
@ -5229,7 +5230,8 @@ handle_dispatch_unaligned(struct vk_cmd_queue_entry *cmd, struct rendering_state
|
|||
static void
|
||||
handle_fill_buffer_addr(struct vk_cmd_queue_entry *cmd, struct rendering_state *state)
|
||||
{
|
||||
struct lvp_cmd_fill_buffer_addr *fill = (struct lvp_cmd_fill_buffer_addr *)cmd;
|
||||
struct lvp_cmd_fill_buffer_addr *fill =
|
||||
(struct lvp_cmd_fill_buffer_addr *)((uint8_t *)cmd + offsetof(struct vk_cmd_queue_entry, u));
|
||||
|
||||
finish_fence(state);
|
||||
|
||||
|
|
@ -5242,7 +5244,8 @@ handle_fill_buffer_addr(struct vk_cmd_queue_entry *cmd, struct rendering_state *
|
|||
static void
|
||||
handle_encode_as(struct vk_cmd_queue_entry *cmd, struct rendering_state *state)
|
||||
{
|
||||
struct lvp_cmd_encode_as *encode = (struct lvp_cmd_encode_as *)cmd;
|
||||
struct lvp_cmd_encode_as *encode =
|
||||
(struct lvp_cmd_encode_as *)((uint8_t *)cmd + offsetof(struct vk_cmd_queue_entry, u));
|
||||
|
||||
finish_fence(state);
|
||||
|
||||
|
|
|
|||
|
|
@ -824,14 +824,12 @@ size_t
|
|||
lvp_ext_dgc_token_size(const struct lvp_indirect_command_layout_ext *elayout, const VkIndirectCommandsLayoutTokenEXT *token);
|
||||
|
||||
struct lvp_cmd_write_buffer_cp {
|
||||
struct vk_cmd_queue_entry_base base;
|
||||
VkDeviceAddress addr;
|
||||
void *data;
|
||||
uint32_t size;
|
||||
};
|
||||
|
||||
struct lvp_cmd_fill_buffer_addr {
|
||||
struct vk_cmd_queue_entry_base base;
|
||||
VkDeviceAddress addr;
|
||||
VkDeviceSize size;
|
||||
uint32_t data;
|
||||
|
|
@ -843,7 +841,6 @@ lvp_encode_as(struct vk_acceleration_structure *dst, VkDeviceAddress intermediat
|
|||
VkGeometryTypeKHR geometry_type);
|
||||
|
||||
struct lvp_cmd_encode_as {
|
||||
struct vk_cmd_queue_entry_base base;
|
||||
struct vk_acceleration_structure *dst;
|
||||
VkDeviceAddress intermediate_as_addr;
|
||||
VkDeviceAddress intermediate_header_addr;
|
||||
|
|
|
|||
|
|
@ -131,13 +131,6 @@ struct ${to_struct_name(c.name)} {
|
|||
|
||||
struct vk_cmd_queue_entry;
|
||||
|
||||
/* this ordering must match vk_cmd_queue_entry */
|
||||
struct vk_cmd_queue_entry_base {
|
||||
struct list_head cmd_link;
|
||||
enum vk_cmd_type type;
|
||||
};
|
||||
|
||||
/* this ordering must match vk_cmd_queue_entry_base */
|
||||
struct vk_cmd_queue_entry {
|
||||
struct list_head cmd_link;
|
||||
enum vk_cmd_type type;
|
||||
|
|
@ -251,7 +244,7 @@ size_t vk_cmd_queue_type_sizes[] = {
|
|||
% if len(c.params) > 1:
|
||||
sizeof(struct ${to_struct_name(c.name)}) +
|
||||
% endif
|
||||
sizeof(struct vk_cmd_queue_entry_base),
|
||||
offsetof(struct vk_cmd_queue_entry, u),
|
||||
% if c.guard is not None:
|
||||
#endif // ${c.guard}
|
||||
% endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue