panvk: Make panvk_cmd_buffer per-gen

The command buffer state is going to be an object containing per-gen
descriptors. Instead of pretending we can have gen-agnostic helpers,
let's merge everything in panvk_vX_cmd_buffer.c, and make
panvk_cmd_buffer.h a per-gen file.

We will split this into sub-files (panvk_cmd_draw, panvk_cmd_desc, ...)
further down the road, so we can specialize only specific bits
(like descriptor tables, the way we issue draw/dispatch jobs, etc).

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Acked-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Reviewed-by: Mary Guillemard <mary.guillemard@collabora.com>
Reviewed-by: Rebecca Mckeever <rebecca.mckeever@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28170>
This commit is contained in:
Boris Brezillon
2024-02-01 18:32:34 +01:00
committed by Marge Bot
parent 18e03803a7
commit a790f77169
8 changed files with 453 additions and 485 deletions

View File

@@ -6,6 +6,10 @@
#ifndef PANVK_CMD_BUFFER_H
#define PANVK_CMD_BUFFER_H
#ifndef PAN_ARCH
#error "PAN_ARCH must be defined"
#endif
#include <stdint.h>
#include "vulkan/runtime/vk_command_buffer.h"
@@ -22,12 +26,12 @@
#include "util/list.h"
#include "genxml/gen_macros.h"
#define MAX_BIND_POINTS 2 /* compute + graphics */
#define MAX_VBS 16
#define MAX_PUSH_CONSTANTS_SIZE 128
#define TILER_DESC_WORDS 56
struct panvk_batch {
struct list_head node;
struct util_dynarray jobs;
@@ -47,8 +51,10 @@ struct panvk_batch {
mali_ptr fragment_job;
struct {
struct pan_tiler_context ctx;
struct panfrost_ptr descs;
uint32_t templ[TILER_DESC_WORDS];
struct panfrost_ptr heap_desc;
struct panfrost_ptr ctx_desc;
struct mali_tiler_heap_packed heap_templ;
struct mali_tiler_context_packed ctx_templ;
} tiler;
struct pan_tls_info tlsinfo;
unsigned wls_total_size;
@@ -192,13 +198,11 @@ VK_DEFINE_HANDLE_CASTS(panvk_cmd_buffer, vk.base, VkCommandBuffer,
#define panvk_cmd_get_desc_state(cmdbuf, bindpoint) \
&(cmdbuf)->bind_points[VK_PIPELINE_BIND_POINT_##bindpoint].desc_state
struct panvk_batch *panvk_cmd_open_batch(struct panvk_cmd_buffer *cmdbuf);
void panvk_cmd_preload_fb_after_batch_split(struct panvk_cmd_buffer *cmdbuf);
#if PAN_ARCH
extern const struct vk_command_buffer_ops panvk_per_arch(cmd_buffer_ops);
struct panvk_batch *
panvk_per_arch(cmd_open_batch)(struct panvk_cmd_buffer *cmdbuf);
void panvk_per_arch(cmd_close_batch)(struct panvk_cmd_buffer *cmdbuf);
void panvk_per_arch(cmd_get_tiler_context)(struct panvk_cmd_buffer *cmdbuf,
@@ -213,6 +217,5 @@ void panvk_per_arch(cmd_prepare_tiler_context)(struct panvk_cmd_buffer *cmdbuf);
void panvk_per_arch(emit_viewport)(const VkViewport *viewport,
const VkRect2D *scissor, void *vpd);
#endif
#endif