gtk/gsk/vulkan/gskvulkanopprivate.h
Benjamin Otte 32e123fa67 vulkan: Invent a new abstraction
GskVulkanOp is meant to be a proper abstraction of operations
the Vulkan renderer will be doing.

For now it's an atrocious clunky piece of junk wedged into the
renderpass codebase.

It's so temporary that I didn't even adjust indentation of the code.
2023-07-16 12:12:36 +02:00

66 lines
4.2 KiB
C

#pragma once
#include <gdk/gdk.h>
#include "gskvulkanrenderpassprivate.h"
G_BEGIN_DECLS
typedef struct _GskVulkanOp GskVulkanOp;
typedef struct _GskVulkanOpClass GskVulkanOpClass;
struct _GskVulkanOp
{
const GskVulkanOpClass *op_class;
};
struct _GskVulkanOpClass
{
gsize size;
void (* finish) (GskVulkanOp *op);
void (* upload) (GskVulkanOp *op,
GskVulkanRenderPass *pass,
GskVulkanRender *render,
GskVulkanUploader *uploader,
const graphene_rect_t *clip,
const graphene_vec2_t *scale);
gsize (* count_vertex_data) (GskVulkanOp *op,
gsize n_bytes);
void (* collect_vertex_data) (GskVulkanOp *op,
GskVulkanRenderPass *pass,
GskVulkanRender *render,
guchar *data);
void (* reserve_descriptor_sets) (GskVulkanOp *op,
GskVulkanRender *render);
GskVulkanPipeline * (* get_pipeline) (GskVulkanOp *op);
void (* command) (GskVulkanOp *op,
VkPipelineLayout pipeline_layout,
VkCommandBuffer command_buffer);
};
void gsk_vulkan_op_finish (GskVulkanOp *op);
void gsk_vulkan_op_upload (GskVulkanOp *op,
GskVulkanRenderPass *pass,
GskVulkanRender *render,
GskVulkanUploader *uploader,
const graphene_rect_t *clip,
const graphene_vec2_t *scale);
gsize gsk_vulkan_op_count_vertex_data (GskVulkanOp *op,
gsize n_bytes);
void gsk_vulkan_op_collect_vertex_data (GskVulkanOp *op,
GskVulkanRenderPass *pass,
GskVulkanRender *render,
guchar *data);
void gsk_vulkan_op_reserve_descriptor_sets (GskVulkanOp *op,
GskVulkanRender *render);
GskVulkanPipeline * gsk_vulkan_op_get_pipeline (GskVulkanOp *op);
void gsk_vulkan_op_command (GskVulkanOp *op,
VkPipelineLayout pipeline_layout,
VkCommandBuffer command_buffer);
G_END_DECLS