1 #ifndef __GSK_VULKAN_RENDER_PRIVATE_H__
2 #define __GSK_VULKAN_RENDER_PRIVATE_H__
3 
4 #include <gdk/gdk.h>
5 #include <gsk/gskrendernode.h>
6 
7 #include "gskvulkanimageprivate.h"
8 #include "gskvulkanpipelineprivate.h"
9 #include "gskvulkanrenderpassprivate.h"
10 #include "gsk/gskprivate.h"
11 
12 G_BEGIN_DECLS
13 
14 typedef enum {
15   GSK_VULKAN_PIPELINE_TEXTURE,
16   GSK_VULKAN_PIPELINE_TEXTURE_CLIP,
17   GSK_VULKAN_PIPELINE_TEXTURE_CLIP_ROUNDED,
18   GSK_VULKAN_PIPELINE_COLOR,
19   GSK_VULKAN_PIPELINE_COLOR_CLIP,
20   GSK_VULKAN_PIPELINE_COLOR_CLIP_ROUNDED,
21   GSK_VULKAN_PIPELINE_LINEAR_GRADIENT,
22   GSK_VULKAN_PIPELINE_LINEAR_GRADIENT_CLIP,
23   GSK_VULKAN_PIPELINE_LINEAR_GRADIENT_CLIP_ROUNDED,
24   GSK_VULKAN_PIPELINE_COLOR_MATRIX,
25   GSK_VULKAN_PIPELINE_COLOR_MATRIX_CLIP,
26   GSK_VULKAN_PIPELINE_COLOR_MATRIX_CLIP_ROUNDED,
27   GSK_VULKAN_PIPELINE_BORDER,
28   GSK_VULKAN_PIPELINE_BORDER_CLIP,
29   GSK_VULKAN_PIPELINE_BORDER_CLIP_ROUNDED,
30   GSK_VULKAN_PIPELINE_INSET_SHADOW,
31   GSK_VULKAN_PIPELINE_INSET_SHADOW_CLIP,
32   GSK_VULKAN_PIPELINE_INSET_SHADOW_CLIP_ROUNDED,
33   GSK_VULKAN_PIPELINE_OUTSET_SHADOW,
34   GSK_VULKAN_PIPELINE_OUTSET_SHADOW_CLIP,
35   GSK_VULKAN_PIPELINE_OUTSET_SHADOW_CLIP_ROUNDED,
36   GSK_VULKAN_PIPELINE_BLUR,
37   GSK_VULKAN_PIPELINE_BLUR_CLIP,
38   GSK_VULKAN_PIPELINE_BLUR_CLIP_ROUNDED,
39   GSK_VULKAN_PIPELINE_TEXT,
40   GSK_VULKAN_PIPELINE_TEXT_CLIP,
41   GSK_VULKAN_PIPELINE_TEXT_CLIP_ROUNDED,
42   GSK_VULKAN_PIPELINE_COLOR_TEXT,
43   GSK_VULKAN_PIPELINE_COLOR_TEXT_CLIP,
44   GSK_VULKAN_PIPELINE_COLOR_TEXT_CLIP_ROUNDED,
45   GSK_VULKAN_PIPELINE_CROSS_FADE,
46   GSK_VULKAN_PIPELINE_CROSS_FADE_CLIP,
47   GSK_VULKAN_PIPELINE_CROSS_FADE_CLIP_ROUNDED,
48   GSK_VULKAN_PIPELINE_BLEND_MODE,
49   GSK_VULKAN_PIPELINE_BLEND_MODE_CLIP,
50   GSK_VULKAN_PIPELINE_BLEND_MODE_CLIP_ROUNDED,
51   /* add more */
52   GSK_VULKAN_N_PIPELINES
53 } GskVulkanPipelineType;
54 
55 GskVulkanRender *       gsk_vulkan_render_new                           (GskRenderer            *renderer,
56                                                                          GdkVulkanContext       *context);
57 void                    gsk_vulkan_render_free                          (GskVulkanRender        *self);
58 
59 gboolean                gsk_vulkan_render_is_busy                       (GskVulkanRender        *self);
60 void                    gsk_vulkan_render_reset                         (GskVulkanRender        *self,
61                                                                          GskVulkanImage         *target,
62                                                                          const graphene_rect_t  *rect,
63                                                                          const cairo_region_t   *clip);
64 
65 GskRenderer *           gsk_vulkan_render_get_renderer                  (GskVulkanRender        *self);
66 
67 void                    gsk_vulkan_render_add_cleanup_image             (GskVulkanRender        *self,
68                                                                          GskVulkanImage         *image);
69 
70 void                    gsk_vulkan_render_add_node                      (GskVulkanRender        *self,
71                                                                          GskRenderNode          *node);
72 
73 void                    gsk_vulkan_render_add_render_pass               (GskVulkanRender        *self,
74                                                                          GskVulkanRenderPass    *pass);
75 
76 void                    gsk_vulkan_render_upload                        (GskVulkanRender        *self);
77 
78 GskVulkanPipeline *     gsk_vulkan_render_get_pipeline                  (GskVulkanRender        *self,
79                                                                          GskVulkanPipelineType   pipeline_type);
80 VkDescriptorSet         gsk_vulkan_render_get_descriptor_set            (GskVulkanRender        *self,
81                                                                          gsize                   id);
82 gsize                   gsk_vulkan_render_reserve_descriptor_set        (GskVulkanRender        *self,
83                                                                          GskVulkanImage         *source,
84                                                                          gboolean                repeat);
85 void                    gsk_vulkan_render_draw                          (GskVulkanRender        *self);
86 
87 void                    gsk_vulkan_render_submit                        (GskVulkanRender        *self);
88 
89 GdkTexture *            gsk_vulkan_render_download_target               (GskVulkanRender        *self);
90 VkFramebuffer           gsk_vulkan_render_get_framebuffer               (GskVulkanRender        *self,
91                                                                          GskVulkanImage         *image);
92 
93 G_END_DECLS
94 
95 #endif /* __GSK_VULKAN_RENDER_PRIVATE_H__ */
96