mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-30 15:31:34 +00:00
e7549f3359
We now store all the relevant state of the image inside the VulkanImage struct, so we can delay barriers for as long as possible. Whenever we want to use an image, we call the new gsk_vulkan_image_transition() and it will add a barrier to the desired state if one is necessary.
73 lines
3.7 KiB
C
73 lines
3.7 KiB
C
#pragma once
|
|
|
|
#include <gdk/gdk.h>
|
|
|
|
#include "gskvulkanrenderpassprivate.h"
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
typedef enum
|
|
{
|
|
GSK_VULKAN_STAGE_UPLOAD,
|
|
GSK_VULKAN_STAGE_COMMAND,
|
|
GSK_VULKAN_STAGE_SHADER,
|
|
/* magic ones */
|
|
GSK_VULKAN_STAGE_BEGIN_PASS,
|
|
GSK_VULKAN_STAGE_END_PASS
|
|
} GskVulkanStage;
|
|
|
|
struct _GskVulkanOp
|
|
{
|
|
const GskVulkanOpClass *op_class;
|
|
|
|
GskVulkanOp *next;
|
|
};
|
|
|
|
struct _GskVulkanOpClass
|
|
{
|
|
gsize size;
|
|
GskVulkanStage stage;
|
|
|
|
void (* finish) (GskVulkanOp *op);
|
|
|
|
void (* print) (GskVulkanOp *op,
|
|
GString *string,
|
|
guint indent);
|
|
|
|
gsize (* count_vertex_data) (GskVulkanOp *op,
|
|
gsize n_bytes);
|
|
void (* collect_vertex_data) (GskVulkanOp *op,
|
|
guchar *data);
|
|
void (* reserve_descriptor_sets) (GskVulkanOp *op,
|
|
GskVulkanRender *render);
|
|
GskVulkanOp * (* command) (GskVulkanOp *op,
|
|
GskVulkanRender *render,
|
|
VkRenderPass render_pass,
|
|
VkCommandBuffer command_buffer);
|
|
};
|
|
|
|
/* ensures alignment of ops to multipes of 16 bytes - and that makes graphene happy */
|
|
#define GSK_VULKAN_OP_SIZE(struct_name) ((sizeof(struct_name) + 15) & ~15)
|
|
|
|
GskVulkanOp * gsk_vulkan_op_alloc (GskVulkanRender *render,
|
|
const GskVulkanOpClass *op_class);
|
|
void gsk_vulkan_op_finish (GskVulkanOp *op);
|
|
|
|
void gsk_vulkan_op_print (GskVulkanOp *op,
|
|
GString *string,
|
|
guint indent);
|
|
|
|
gsize gsk_vulkan_op_count_vertex_data (GskVulkanOp *op,
|
|
gsize n_bytes);
|
|
void gsk_vulkan_op_collect_vertex_data (GskVulkanOp *op,
|
|
guchar *data);
|
|
void gsk_vulkan_op_reserve_descriptor_sets (GskVulkanOp *op,
|
|
GskVulkanRender *render);
|
|
GskVulkanOp * gsk_vulkan_op_command (GskVulkanOp *op,
|
|
GskVulkanRender *render,
|
|
VkRenderPass render_pass,
|
|
VkCommandBuffer command_buffer);
|
|
|
|
G_END_DECLS
|
|
|