mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-28 14:31:10 +00:00
73ac2d0a1c
Because GL flips its shit sometimes (ie when it's the framebuffer), pass the height of the target as the flip variable, so commands that need to operate on the pixels can flip the y axis around this value.
76 lines
3.5 KiB
C
76 lines
3.5 KiB
C
#pragma once
|
|
|
|
#include <gdk/gdk.h>
|
|
|
|
#include "gskgputypesprivate.h"
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
typedef enum
|
|
{
|
|
GSK_GPU_STAGE_UPLOAD,
|
|
GSK_GPU_STAGE_PASS,
|
|
GSK_GPU_STAGE_COMMAND,
|
|
GSK_GPU_STAGE_SHADER,
|
|
/* magic ones */
|
|
GSK_GPU_STAGE_BEGIN_PASS,
|
|
GSK_GPU_STAGE_END_PASS
|
|
} GskGpuStage;
|
|
|
|
struct _GskGpuOp
|
|
{
|
|
const GskGpuOpClass *op_class;
|
|
|
|
GskGpuOp *next;
|
|
};
|
|
|
|
struct _GskGpuOpClass
|
|
{
|
|
gsize size;
|
|
GskGpuStage stage;
|
|
|
|
void (* finish) (GskGpuOp *op);
|
|
|
|
void (* print) (GskGpuOp *op,
|
|
GskGpuFrame *frame,
|
|
GString *string,
|
|
guint indent);
|
|
|
|
#ifdef GDK_RENDERING_VULKAN
|
|
GskGpuOp * (* vk_command) (GskGpuOp *op,
|
|
GskGpuFrame *frame,
|
|
VkRenderPass render_pass,
|
|
VkFormat format,
|
|
VkCommandBuffer command_buffer);
|
|
#endif
|
|
GskGpuOp * (* gl_command) (GskGpuOp *op,
|
|
GskGpuFrame *frame,
|
|
gsize flip_y);
|
|
};
|
|
|
|
/* ensures alignment of ops to multipes of 16 bytes - and that makes graphene happy */
|
|
#define GSK_GPU_OP_SIZE(struct_name) ((sizeof(struct_name) + 15) & ~15)
|
|
|
|
GskGpuOp * gsk_gpu_op_alloc (GskGpuFrame *frame,
|
|
const GskGpuOpClass *op_class);
|
|
void gsk_gpu_op_finish (GskGpuOp *op);
|
|
|
|
void gsk_gpu_op_print (GskGpuOp *op,
|
|
GskGpuFrame *frame,
|
|
GString *string,
|
|
guint indent);
|
|
|
|
#ifdef GDK_RENDERING_VULKAN
|
|
GskGpuOp * gsk_gpu_op_vk_command (GskGpuOp *op,
|
|
GskGpuFrame *frame,
|
|
VkRenderPass render_pass,
|
|
VkFormat format,
|
|
VkCommandBuffer command_buffer);
|
|
#endif
|
|
GskGpuOp * gsk_gpu_op_gl_command (GskGpuOp *op,
|
|
GskGpuFrame *frame,
|
|
gsize flip_y);
|
|
|
|
G_END_DECLS
|
|
|