vulkan: Move the render ops to the Render
This is a massive refactoring because it collects all the renderops of all renderpasses into one long array in the Render object. Lots of code in there is still flaky and needs cleanup. That will follow in further commits. Other than that it does work fine though.
This commit is contained in:
@@ -107,7 +107,7 @@ static const GskVulkanShaderOpClass GSK_VULKAN_BLEND_MODE_OP_CLASS = {
|
||||
};
|
||||
|
||||
void
|
||||
gsk_vulkan_blend_mode_op (GskVulkanRenderPass *render_pass,
|
||||
gsk_vulkan_blend_mode_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
const graphene_rect_t *bounds,
|
||||
const graphene_point_t *offset,
|
||||
@@ -121,7 +121,7 @@ gsk_vulkan_blend_mode_op (GskVulkanRenderPass *render_pass,
|
||||
{
|
||||
GskVulkanBlendModeOp *self;
|
||||
|
||||
self = (GskVulkanBlendModeOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_BLEND_MODE_OP_CLASS);
|
||||
self = (GskVulkanBlendModeOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_BLEND_MODE_OP_CLASS);
|
||||
|
||||
((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type);
|
||||
graphene_rect_offset_r (bounds, offset->x, offset->y, &self->bounds);
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
void gsk_vulkan_blend_mode_op (GskVulkanRenderPass *render_pass,
|
||||
void gsk_vulkan_blend_mode_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
const graphene_rect_t *bounds,
|
||||
const graphene_point_t *offset,
|
||||
|
||||
@@ -81,7 +81,7 @@ static const GskVulkanOpClass GSK_VULKAN_BLUR_OP_CLASS = {
|
||||
};
|
||||
|
||||
void
|
||||
gsk_vulkan_blur_op (GskVulkanRenderPass *render_pass,
|
||||
gsk_vulkan_blur_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
GskVulkanImage *image,
|
||||
const graphene_rect_t *rect,
|
||||
@@ -93,7 +93,7 @@ gsk_vulkan_blur_op (GskVulkanRenderPass *render_pass,
|
||||
|
||||
g_assert (radius > 0);
|
||||
|
||||
self = (GskVulkanBlurOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_BLUR_OP_CLASS);
|
||||
self = (GskVulkanBlurOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_BLUR_OP_CLASS);
|
||||
|
||||
((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type);
|
||||
self->image = g_object_ref (image);
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
void gsk_vulkan_blur_op (GskVulkanRenderPass *render_pass,
|
||||
void gsk_vulkan_blur_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
GskVulkanImage *image,
|
||||
const graphene_rect_t *rect,
|
||||
|
||||
@@ -97,7 +97,7 @@ static const GskVulkanOpClass GSK_VULKAN_BORDER_OP_CLASS = {
|
||||
};
|
||||
|
||||
void
|
||||
gsk_vulkan_border_op (GskVulkanRenderPass *render_pass,
|
||||
gsk_vulkan_border_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
const GskRoundedRect *outline,
|
||||
const graphene_point_t *offset,
|
||||
@@ -107,7 +107,7 @@ gsk_vulkan_border_op (GskVulkanRenderPass *render_pass,
|
||||
GskVulkanBorderOp *self;
|
||||
guint i;
|
||||
|
||||
self = (GskVulkanBorderOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_BORDER_OP_CLASS);
|
||||
self = (GskVulkanBorderOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_BORDER_OP_CLASS);
|
||||
|
||||
((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type);
|
||||
self->outline = *outline;
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
void gsk_vulkan_border_op (GskVulkanRenderPass *render_pass,
|
||||
void gsk_vulkan_border_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
const GskRoundedRect *outline,
|
||||
const graphene_point_t *offset,
|
||||
|
||||
@@ -88,7 +88,7 @@ static const GskVulkanOpClass GSK_VULKAN_COLOR_MATRIX_OP_CLASS = {
|
||||
};
|
||||
|
||||
void
|
||||
gsk_vulkan_color_matrix_op (GskVulkanRenderPass *render_pass,
|
||||
gsk_vulkan_color_matrix_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
GskVulkanImage *image,
|
||||
const graphene_rect_t *rect,
|
||||
@@ -99,7 +99,7 @@ gsk_vulkan_color_matrix_op (GskVulkanRenderPass *render_pass,
|
||||
{
|
||||
GskVulkanColorMatrixOp *self;
|
||||
|
||||
self = (GskVulkanColorMatrixOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_COLOR_MATRIX_OP_CLASS);
|
||||
self = (GskVulkanColorMatrixOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_COLOR_MATRIX_OP_CLASS);
|
||||
|
||||
((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type);
|
||||
self->image = g_object_ref (image);
|
||||
@@ -110,7 +110,7 @@ gsk_vulkan_color_matrix_op (GskVulkanRenderPass *render_pass,
|
||||
}
|
||||
|
||||
void
|
||||
gsk_vulkan_color_matrix_op_opacity (GskVulkanRenderPass *render_pass,
|
||||
gsk_vulkan_color_matrix_op_opacity (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
GskVulkanImage *image,
|
||||
const graphene_rect_t *rect,
|
||||
@@ -130,7 +130,7 @@ gsk_vulkan_color_matrix_op_opacity (GskVulkanRenderPass *render_pass,
|
||||
});
|
||||
graphene_vec4_init (&color_offset, 0.0, 0.0, 0.0, 0.0);
|
||||
|
||||
gsk_vulkan_color_matrix_op (render_pass,
|
||||
gsk_vulkan_color_matrix_op (render,
|
||||
clip_type,
|
||||
image,
|
||||
rect,
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
void gsk_vulkan_color_matrix_op (GskVulkanRenderPass *render_pass,
|
||||
void gsk_vulkan_color_matrix_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
GskVulkanImage *image,
|
||||
const graphene_rect_t *rect,
|
||||
@@ -13,7 +13,7 @@ void gsk_vulkan_color_matrix_op (GskVulk
|
||||
const graphene_matrix_t *color_matrix,
|
||||
const graphene_vec4_t *color_offset);
|
||||
|
||||
void gsk_vulkan_color_matrix_op_opacity (GskVulkanRenderPass *render_pass,
|
||||
void gsk_vulkan_color_matrix_op_opacity (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
GskVulkanImage *image,
|
||||
const graphene_rect_t *rect,
|
||||
|
||||
@@ -79,7 +79,7 @@ static const GskVulkanOpClass GSK_VULKAN_COLOR_OP_CLASS = {
|
||||
};
|
||||
|
||||
void
|
||||
gsk_vulkan_color_op (GskVulkanRenderPass *render_pass,
|
||||
gsk_vulkan_color_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
const graphene_rect_t *rect,
|
||||
const graphene_point_t *offset,
|
||||
@@ -87,7 +87,7 @@ gsk_vulkan_color_op (GskVulkanRenderPass *render_pass,
|
||||
{
|
||||
GskVulkanColorOp *self;
|
||||
|
||||
self = (GskVulkanColorOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_COLOR_OP_CLASS);
|
||||
self = (GskVulkanColorOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_COLOR_OP_CLASS);
|
||||
|
||||
((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type);
|
||||
graphene_rect_offset_r (rect, offset->x, offset->y, &self->rect);
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
void gsk_vulkan_color_op (GskVulkanRenderPass *render_pass,
|
||||
void gsk_vulkan_color_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
const graphene_rect_t *rect,
|
||||
const graphene_point_t *offset,
|
||||
|
||||
@@ -92,7 +92,7 @@ static const GskVulkanOpClass GSK_VULKAN_CROSS_FADE_OP_CLASS = {
|
||||
};
|
||||
|
||||
void
|
||||
gsk_vulkan_cross_fade_op (GskVulkanRenderPass *render_pass,
|
||||
gsk_vulkan_cross_fade_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
const graphene_rect_t *bounds,
|
||||
const graphene_point_t *offset,
|
||||
@@ -106,7 +106,7 @@ gsk_vulkan_cross_fade_op (GskVulkanRenderPass *render_pass,
|
||||
{
|
||||
GskVulkanCrossFadeOp *self;
|
||||
|
||||
self = (GskVulkanCrossFadeOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_CROSS_FADE_OP_CLASS);
|
||||
self = (GskVulkanCrossFadeOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_CROSS_FADE_OP_CLASS);
|
||||
|
||||
((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type);
|
||||
graphene_rect_offset_r (bounds, offset->x, offset->y, &self->bounds);
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
void gsk_vulkan_cross_fade_op (GskVulkanRenderPass *render_pass,
|
||||
void gsk_vulkan_cross_fade_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
const graphene_rect_t *bounds,
|
||||
const graphene_point_t *offset,
|
||||
|
||||
@@ -79,7 +79,7 @@ static const GskVulkanOpClass GSK_VULKAN_GLYPH_OP_CLASS = {
|
||||
};
|
||||
|
||||
void
|
||||
gsk_vulkan_glyph_op (GskVulkanRenderPass *render_pass,
|
||||
gsk_vulkan_glyph_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
GskVulkanImage *image,
|
||||
const graphene_rect_t *rect,
|
||||
@@ -89,7 +89,7 @@ gsk_vulkan_glyph_op (GskVulkanRenderPass *render_pass,
|
||||
{
|
||||
GskVulkanGlyphOp *self;
|
||||
|
||||
self = (GskVulkanGlyphOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_GLYPH_OP_CLASS);
|
||||
self = (GskVulkanGlyphOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_GLYPH_OP_CLASS);
|
||||
|
||||
((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type);
|
||||
self->image = g_object_ref (image);
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
void gsk_vulkan_glyph_op (GskVulkanRenderPass *render_pass,
|
||||
void gsk_vulkan_glyph_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
GskVulkanImage *image,
|
||||
const graphene_rect_t *rect,
|
||||
|
||||
@@ -75,7 +75,7 @@ static const GskVulkanOpClass GSK_VULKAN_INSET_SHADOW_OP_CLASS = {
|
||||
};
|
||||
|
||||
void
|
||||
gsk_vulkan_inset_shadow_op (GskVulkanRenderPass *render_pass,
|
||||
gsk_vulkan_inset_shadow_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
const GskRoundedRect *outline,
|
||||
const graphene_point_t *offset,
|
||||
@@ -86,7 +86,7 @@ gsk_vulkan_inset_shadow_op (GskVulkanRenderPass *render_pass,
|
||||
{
|
||||
GskVulkanInsetShadowOp *self;
|
||||
|
||||
self = (GskVulkanInsetShadowOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_INSET_SHADOW_OP_CLASS);
|
||||
self = (GskVulkanInsetShadowOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_INSET_SHADOW_OP_CLASS);
|
||||
|
||||
((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type);
|
||||
self->outline = *outline;
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
void gsk_vulkan_inset_shadow_op (GskVulkanRenderPass *render_pass,
|
||||
void gsk_vulkan_inset_shadow_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
const GskRoundedRect *outline,
|
||||
const graphene_point_t *offset,
|
||||
|
||||
@@ -87,7 +87,7 @@ static const GskVulkanOpClass GSK_VULKAN_LINEAR_GRADIENT_OP_CLASS = {
|
||||
};
|
||||
|
||||
void
|
||||
gsk_vulkan_linear_gradient_op (GskVulkanRenderPass *render_pass,
|
||||
gsk_vulkan_linear_gradient_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
const graphene_rect_t *rect,
|
||||
const graphene_point_t *offset,
|
||||
@@ -99,7 +99,7 @@ gsk_vulkan_linear_gradient_op (GskVulkanRenderPass *render_pass,
|
||||
{
|
||||
GskVulkanLinearGradientOp *self;
|
||||
|
||||
self = (GskVulkanLinearGradientOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_LINEAR_GRADIENT_OP_CLASS);
|
||||
self = (GskVulkanLinearGradientOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_LINEAR_GRADIENT_OP_CLASS);
|
||||
|
||||
((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type);
|
||||
graphene_rect_offset_r (rect, offset->x, offset->y, &self->rect);
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
void gsk_vulkan_linear_gradient_op (GskVulkanRenderPass *render_pass,
|
||||
void gsk_vulkan_linear_gradient_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
const graphene_rect_t *rect,
|
||||
const graphene_point_t *offset,
|
||||
|
||||
@@ -103,7 +103,7 @@ static const GskVulkanOpClass GSK_VULKAN_COLOR_MASK_OP_CLASS = {
|
||||
};
|
||||
|
||||
void
|
||||
gsk_vulkan_mask_op (GskVulkanRenderPass *render_pass,
|
||||
gsk_vulkan_mask_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
const graphene_point_t *offset,
|
||||
GskVulkanImage *source,
|
||||
@@ -116,7 +116,7 @@ gsk_vulkan_mask_op (GskVulkanRenderPass *render_pass,
|
||||
{
|
||||
GskVulkanMaskOp *self;
|
||||
|
||||
self = (GskVulkanMaskOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_COLOR_MASK_OP_CLASS);
|
||||
self = (GskVulkanMaskOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_COLOR_MASK_OP_CLASS);
|
||||
|
||||
((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type);
|
||||
self->source.image = g_object_ref (source);
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
void gsk_vulkan_mask_op (GskVulkanRenderPass *render_pass,
|
||||
void gsk_vulkan_mask_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
const graphene_point_t *offset,
|
||||
GskVulkanImage *source,
|
||||
|
||||
@@ -38,44 +38,31 @@ gsk_vulkan_offscreen_op_print (GskVulkanOp *op,
|
||||
gsk_vulkan_image_get_width (self->image),
|
||||
gsk_vulkan_image_get_height (self->image));
|
||||
print_newline (string);
|
||||
|
||||
gsk_vulkan_render_pass_print (self->render_pass, string, indent + 1);
|
||||
}
|
||||
|
||||
static void
|
||||
gsk_vulkan_offscreen_op_upload (GskVulkanOp *op,
|
||||
GskVulkanUploader *uploader)
|
||||
{
|
||||
GskVulkanOffscreenOp *self = (GskVulkanOffscreenOp *) op;
|
||||
|
||||
gsk_vulkan_render_pass_upload (self->render_pass, uploader);
|
||||
}
|
||||
|
||||
static gsize
|
||||
gsk_vulkan_offscreen_op_count_vertex_data (GskVulkanOp *op,
|
||||
gsize n_bytes)
|
||||
{
|
||||
GskVulkanOffscreenOp *self = (GskVulkanOffscreenOp *) op;
|
||||
|
||||
return gsk_vulkan_render_pass_count_vertex_data (self->render_pass, n_bytes);
|
||||
return n_bytes;
|
||||
}
|
||||
|
||||
static void
|
||||
gsk_vulkan_offscreen_op_collect_vertex_data (GskVulkanOp *op,
|
||||
guchar *data)
|
||||
{
|
||||
GskVulkanOffscreenOp *self = (GskVulkanOffscreenOp *) op;
|
||||
|
||||
gsk_vulkan_render_pass_collect_vertex_data (self->render_pass, data);
|
||||
}
|
||||
|
||||
static void
|
||||
gsk_vulkan_offscreen_op_reserve_descriptor_sets (GskVulkanOp *op,
|
||||
GskVulkanRender *render)
|
||||
{
|
||||
GskVulkanOffscreenOp *self = (GskVulkanOffscreenOp *) op;
|
||||
|
||||
gsk_vulkan_render_pass_reserve_descriptor_sets (self->render_pass, render);
|
||||
}
|
||||
|
||||
static GskVulkanOp *
|
||||
@@ -86,9 +73,7 @@ gsk_vulkan_offscreen_op_command (GskVulkanOp *op,
|
||||
{
|
||||
GskVulkanOffscreenOp *self = (GskVulkanOffscreenOp *) op;
|
||||
|
||||
gsk_vulkan_render_draw_pass (render, self->render_pass, VK_NULL_HANDLE);
|
||||
|
||||
return op->next;
|
||||
return gsk_vulkan_render_draw_pass (render, self->render_pass, op->next);
|
||||
}
|
||||
|
||||
static const GskVulkanOpClass GSK_VULKAN_OFFSCREEN_OP_CLASS = {
|
||||
@@ -166,6 +151,8 @@ gsk_vulkan_offscreen_end_op_command (GskVulkanOp *op,
|
||||
VkPipelineLayout pipeline_layout,
|
||||
VkCommandBuffer command_buffer)
|
||||
{
|
||||
vkCmdEndRenderPass (command_buffer);
|
||||
|
||||
return op->next;
|
||||
}
|
||||
|
||||
@@ -184,15 +171,15 @@ static const GskVulkanOpClass GSK_VULKAN_OFFSCREEN_END_OP_CLASS = {
|
||||
};
|
||||
|
||||
GskVulkanImage *
|
||||
gsk_vulkan_offscreen_op (GskVulkanRenderPass *render_pass,
|
||||
gsk_vulkan_offscreen_op (GskVulkanRender *render,
|
||||
GdkVulkanContext *context,
|
||||
GskVulkanRender *render,
|
||||
const graphene_vec2_t *scale,
|
||||
const graphene_rect_t *viewport,
|
||||
GskRenderNode *node)
|
||||
{
|
||||
GskVulkanOffscreenOp *self;
|
||||
GskVulkanOffscreenEndOp *end;
|
||||
GskVulkanImage *image;
|
||||
graphene_rect_t view;
|
||||
cairo_region_t *clip;
|
||||
float scale_x, scale_y;
|
||||
@@ -204,12 +191,14 @@ gsk_vulkan_offscreen_op (GskVulkanRenderPass *render_pass,
|
||||
ceil (scale_x * viewport->size.width),
|
||||
ceil (scale_y * viewport->size.height));
|
||||
|
||||
self = (GskVulkanOffscreenOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_OFFSCREEN_OP_CLASS);
|
||||
image = gsk_vulkan_image_new_for_offscreen (context,
|
||||
gdk_vulkan_context_get_offscreen_format (context,
|
||||
gsk_render_node_get_preferred_depth (node)),
|
||||
view.size.width, view.size.height);
|
||||
|
||||
self->image = gsk_vulkan_image_new_for_offscreen (context,
|
||||
gdk_vulkan_context_get_offscreen_format (context,
|
||||
gsk_render_node_get_preferred_depth (node)),
|
||||
view.size.width, view.size.height);
|
||||
self = (GskVulkanOffscreenOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_OFFSCREEN_OP_CLASS);
|
||||
|
||||
self->image = image;
|
||||
|
||||
clip = cairo_region_create_rectangle (&(cairo_rectangle_int_t) {
|
||||
0, 0,
|
||||
@@ -228,9 +217,12 @@ gsk_vulkan_offscreen_op (GskVulkanRenderPass *render_pass,
|
||||
|
||||
cairo_region_destroy (clip);
|
||||
|
||||
end = (GskVulkanOffscreenEndOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_OFFSCREEN_END_OP_CLASS);
|
||||
/* This invalidates the self pointer */
|
||||
gsk_vulkan_render_pass_add (self->render_pass, render, node);
|
||||
|
||||
end->image = g_object_ref (self->image);
|
||||
end = (GskVulkanOffscreenEndOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_OFFSCREEN_END_OP_CLASS);
|
||||
|
||||
end->image = g_object_ref (image);
|
||||
|
||||
return self->image;
|
||||
}
|
||||
|
||||
@@ -4,9 +4,8 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
GskVulkanImage * gsk_vulkan_offscreen_op (GskVulkanRenderPass *render_pass,
|
||||
GskVulkanImage * gsk_vulkan_offscreen_op (GskVulkanRender *render,
|
||||
GdkVulkanContext *context,
|
||||
GskVulkanRender *render,
|
||||
const graphene_vec2_t *scale,
|
||||
const graphene_rect_t *viewport,
|
||||
GskRenderNode *node);
|
||||
|
||||
@@ -3,13 +3,12 @@
|
||||
#include "gskvulkanopprivate.h"
|
||||
|
||||
GskVulkanOp *
|
||||
gsk_vulkan_op_alloc (GskVulkanRenderPass *render_pass,
|
||||
gsk_vulkan_op_alloc (GskVulkanRender *render,
|
||||
const GskVulkanOpClass *op_class)
|
||||
{
|
||||
GskVulkanOp *op;
|
||||
|
||||
op = gsk_vulkan_render_pass_alloc_op (render_pass,
|
||||
op_class->size);
|
||||
op = gsk_vulkan_render_alloc_op (render, op_class->size);
|
||||
op->op_class = op_class;
|
||||
|
||||
return op;
|
||||
|
||||
@@ -6,8 +6,6 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
typedef struct _GskVulkanOp GskVulkanOp;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
GSK_VULKAN_STAGE_UPLOAD,
|
||||
@@ -57,7 +55,7 @@ struct _GskVulkanOpClass
|
||||
/* 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 (GskVulkanRenderPass *render_pass,
|
||||
GskVulkanOp * gsk_vulkan_op_alloc (GskVulkanRender *render,
|
||||
const GskVulkanOpClass *op_class);
|
||||
void gsk_vulkan_op_finish (GskVulkanOp *op);
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ static const GskVulkanOpClass GSK_VULKAN_OUTSET_SHADOW_OP_CLASS = {
|
||||
};
|
||||
|
||||
void
|
||||
gsk_vulkan_outset_shadow_op (GskVulkanRenderPass *render_pass,
|
||||
gsk_vulkan_outset_shadow_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
const GskRoundedRect *outline,
|
||||
const graphene_point_t *offset,
|
||||
@@ -86,7 +86,7 @@ gsk_vulkan_outset_shadow_op (GskVulkanRenderPass *render_pass,
|
||||
{
|
||||
GskVulkanOutsetShadowOp *self;
|
||||
|
||||
self = (GskVulkanOutsetShadowOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_OUTSET_SHADOW_OP_CLASS);
|
||||
self = (GskVulkanOutsetShadowOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_OUTSET_SHADOW_OP_CLASS);
|
||||
|
||||
((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type);
|
||||
self->outline = *outline;
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
void gsk_vulkan_outset_shadow_op (GskVulkanRenderPass *render_pass,
|
||||
void gsk_vulkan_outset_shadow_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
const GskRoundedRect *outline,
|
||||
const graphene_point_t *offset,
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <gdk/gdk.h>
|
||||
#include <graphene.h>
|
||||
|
||||
typedef struct _GskVulkanOp GskVulkanOp;
|
||||
typedef struct _GskVulkanOpClass GskVulkanOpClass;
|
||||
typedef struct _GskVulkanRender GskVulkanRender;
|
||||
typedef struct _GskVulkanRenderPass GskVulkanRenderPass;
|
||||
|
||||
@@ -115,14 +115,14 @@ static const GskVulkanOpClass GSK_VULKAN_PUSH_CONSTANTS_OP_CLASS = {
|
||||
};
|
||||
|
||||
void
|
||||
gsk_vulkan_push_constants_op (GskVulkanRenderPass *render_pass,
|
||||
gsk_vulkan_push_constants_op (GskVulkanRender *render,
|
||||
const graphene_vec2_t *scale,
|
||||
const graphene_matrix_t *mvp,
|
||||
const GskRoundedRect *clip)
|
||||
{
|
||||
GskVulkanPushConstantsOp *self;
|
||||
|
||||
self = (GskVulkanPushConstantsOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_PUSH_CONSTANTS_OP_CLASS);
|
||||
self = (GskVulkanPushConstantsOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_PUSH_CONSTANTS_OP_CLASS);
|
||||
|
||||
graphene_matrix_to_float (mvp, self->instance.mvp);
|
||||
gsk_rounded_rect_to_float (clip, graphene_point_zero (), self->instance.clip);
|
||||
|
||||
@@ -8,7 +8,7 @@ const VkPushConstantRange *
|
||||
gsk_vulkan_push_constants_get_ranges (void) G_GNUC_PURE;
|
||||
uint32_t gsk_vulkan_push_constants_get_range_count (void) G_GNUC_PURE;
|
||||
|
||||
void gsk_vulkan_push_constants_op (GskVulkanRenderPass *render_pass,
|
||||
void gsk_vulkan_push_constants_op (GskVulkanRender *render,
|
||||
const graphene_vec2_t *scale,
|
||||
const graphene_matrix_t *mvp,
|
||||
const GskRoundedRect *clip);
|
||||
|
||||
@@ -15,6 +15,12 @@
|
||||
|
||||
#include "gdk/gdkvulkancontextprivate.h"
|
||||
|
||||
#define GDK_ARRAY_NAME gsk_vulkan_render_ops
|
||||
#define GDK_ARRAY_TYPE_NAME GskVulkanRenderOps
|
||||
#define GDK_ARRAY_ELEMENT_TYPE guchar
|
||||
#define GDK_ARRAY_BY_VALUE 1
|
||||
#include "gdk/gdkarrayimpl.c"
|
||||
|
||||
#define DESCRIPTOR_POOL_MAXITEMS 50000
|
||||
#define VERTEX_BUFFER_SIZE_STEP 128 * 1024 /* 128kB */
|
||||
|
||||
@@ -50,6 +56,7 @@ struct _GskVulkanRender
|
||||
VkDescriptorSetLayout descriptor_set_layouts[N_DESCRIPTOR_SETS];
|
||||
VkPipelineLayout pipeline_layout;
|
||||
|
||||
GskVulkanRenderOps render_ops;
|
||||
GskVulkanUploader *uploader;
|
||||
GskVulkanRenderPass *render_pass;
|
||||
|
||||
@@ -133,6 +140,15 @@ render_pass_cache_key_equal (gconstpointer a,
|
||||
keya->format == keyb->format;
|
||||
}
|
||||
|
||||
static GskVulkanOp *
|
||||
gsk_vulkan_render_get_first_op (GskVulkanRender *self)
|
||||
{
|
||||
if (gsk_vulkan_render_ops_get_size (&self->render_ops) == 0)
|
||||
return NULL;
|
||||
|
||||
return (GskVulkanOp *) gsk_vulkan_render_ops_index (&self->render_ops, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
gsk_vulkan_render_verbose_print (GskVulkanRender *self,
|
||||
const char *heading)
|
||||
@@ -140,9 +156,15 @@ gsk_vulkan_render_verbose_print (GskVulkanRender *self,
|
||||
#ifdef G_ENABLE_DEBUG
|
||||
if (GSK_RENDERER_DEBUG_CHECK (self->renderer, VERBOSE))
|
||||
{
|
||||
GskVulkanOp *op;
|
||||
GString *string = g_string_new (heading);
|
||||
g_string_append (string, ":\n");
|
||||
gsk_vulkan_render_pass_print (self->render_pass, string, 1);
|
||||
|
||||
for (op = gsk_vulkan_render_get_first_op (self); op; op = op->next)
|
||||
{
|
||||
gsk_vulkan_op_print (op, string, 0);
|
||||
}
|
||||
|
||||
g_print ("%s\n", string->str);
|
||||
g_string_free (string, TRUE);
|
||||
}
|
||||
@@ -339,6 +361,7 @@ gsk_vulkan_render_new (GskRenderer *renderer,
|
||||
&self->samplers[GSK_VULKAN_SAMPLER_NEAREST]);
|
||||
|
||||
|
||||
gsk_vulkan_render_ops_init (&self->render_ops);
|
||||
self->uploader = gsk_vulkan_uploader_new (self->vulkan, self->command_pool);
|
||||
self->pipeline_cache = g_hash_table_new (pipeline_cache_key_hash, pipeline_cache_key_equal);
|
||||
self->render_pass_cache = g_hash_table_new (render_pass_cache_key_hash, render_pass_cache_key_equal);
|
||||
@@ -357,6 +380,23 @@ gsk_vulkan_render_get_fence (GskVulkanRender *self)
|
||||
return self->fence;
|
||||
}
|
||||
|
||||
static void
|
||||
gsk_vulkan_render_seal_ops (GskVulkanRender *self)
|
||||
{
|
||||
GskVulkanOp *last, *op;
|
||||
guint i;
|
||||
|
||||
last = (GskVulkanOp *) gsk_vulkan_render_ops_index (&self->render_ops, 0);
|
||||
|
||||
for (i = last->op_class->size; i < gsk_vulkan_render_ops_get_size (&self->render_ops); i += op->op_class->size)
|
||||
{
|
||||
op = (GskVulkanOp *) gsk_vulkan_render_ops_index (&self->render_ops, i);
|
||||
|
||||
last->next = op;
|
||||
last = op;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gsk_vulkan_render_add_node (GskVulkanRender *self,
|
||||
GskRenderNode *node)
|
||||
@@ -374,16 +414,25 @@ gsk_vulkan_render_add_node (GskVulkanRender *self,
|
||||
node,
|
||||
TRUE);
|
||||
|
||||
gsk_vulkan_render_pass_add (self->render_pass, self, node);
|
||||
|
||||
gsk_vulkan_render_seal_ops (self);
|
||||
|
||||
gsk_vulkan_render_verbose_print (self, "start of frame");
|
||||
}
|
||||
|
||||
void
|
||||
gsk_vulkan_render_upload (GskVulkanRender *self)
|
||||
{
|
||||
GskVulkanOp *op;
|
||||
|
||||
gsk_vulkan_glyph_cache_upload (gsk_vulkan_renderer_get_glyph_cache (GSK_VULKAN_RENDERER (self->renderer)),
|
||||
self->uploader);
|
||||
|
||||
gsk_vulkan_render_pass_upload (self->render_pass, self->uploader);
|
||||
for (op = gsk_vulkan_render_get_first_op (self); op; op = op->next)
|
||||
{
|
||||
gsk_vulkan_op_upload (op, self->uploader);
|
||||
}
|
||||
|
||||
gsk_vulkan_uploader_upload (self->uploader);
|
||||
}
|
||||
@@ -664,10 +713,14 @@ gsk_vulkan_render_prepare_descriptor_sets (GskVulkanRender *self)
|
||||
VkDevice device;
|
||||
VkWriteDescriptorSet descriptor_sets[N_DESCRIPTOR_SETS];
|
||||
gsize n_descriptor_sets;
|
||||
GskVulkanOp *op;
|
||||
|
||||
device = gdk_vulkan_context_get_device (self->vulkan);
|
||||
|
||||
gsk_vulkan_render_pass_reserve_descriptor_sets (self->render_pass, self);
|
||||
for (op = gsk_vulkan_render_get_first_op (self); op; op = op->next)
|
||||
{
|
||||
gsk_vulkan_op_reserve_descriptor_sets (op, self);
|
||||
}
|
||||
|
||||
if (self->storage_buffer_memory)
|
||||
{
|
||||
@@ -728,10 +781,15 @@ gsk_vulkan_render_prepare_descriptor_sets (GskVulkanRender *self)
|
||||
static void
|
||||
gsk_vulkan_render_collect_vertex_buffer (GskVulkanRender *self)
|
||||
{
|
||||
GskVulkanOp *op;
|
||||
gsize n_bytes;
|
||||
guchar *data;
|
||||
|
||||
n_bytes = gsk_vulkan_render_pass_count_vertex_data (self->render_pass, 0);
|
||||
n_bytes = 0;
|
||||
for (op = gsk_vulkan_render_get_first_op (self); op; op = op->next)
|
||||
{
|
||||
n_bytes = gsk_vulkan_op_count_vertex_data (op, n_bytes);
|
||||
}
|
||||
if (n_bytes == 0)
|
||||
return;
|
||||
|
||||
@@ -742,16 +800,23 @@ gsk_vulkan_render_collect_vertex_buffer (GskVulkanRender *self)
|
||||
self->vertex_buffer = gsk_vulkan_buffer_new (self->vulkan, round_up (n_bytes, VERTEX_BUFFER_SIZE_STEP));
|
||||
|
||||
data = gsk_vulkan_buffer_map (self->vertex_buffer);
|
||||
gsk_vulkan_render_pass_collect_vertex_data (self->render_pass, data);
|
||||
for (op = gsk_vulkan_render_get_first_op (self); op; op = op->next)
|
||||
{
|
||||
gsk_vulkan_op_collect_vertex_data (op, data);
|
||||
}
|
||||
gsk_vulkan_buffer_unmap (self->vertex_buffer);
|
||||
}
|
||||
|
||||
void
|
||||
GskVulkanOp *
|
||||
gsk_vulkan_render_draw_pass (GskVulkanRender *self,
|
||||
GskVulkanRenderPass *pass,
|
||||
VkFence fence)
|
||||
GskVulkanRenderPass *render_pass,
|
||||
GskVulkanOp *op)
|
||||
{
|
||||
VkPipeline current_pipeline = VK_NULL_HANDLE;
|
||||
const GskVulkanOpClass *current_pipeline_class = NULL;
|
||||
const char *current_pipeline_clip_type = NULL;
|
||||
VkCommandBuffer command_buffer;
|
||||
VkRenderPass vk_render_pass;
|
||||
|
||||
command_buffer = gsk_vulkan_command_pool_get_buffer (self->command_pool);
|
||||
|
||||
@@ -773,7 +838,33 @@ gsk_vulkan_render_draw_pass (GskVulkanRender *self,
|
||||
0,
|
||||
NULL);
|
||||
|
||||
gsk_vulkan_render_pass_draw (pass, self, self->pipeline_layout, command_buffer);
|
||||
vk_render_pass = gsk_vulkan_render_pass_begin_draw (render_pass, self, self->pipeline_layout, command_buffer);
|
||||
|
||||
while (op && op->op_class->stage != GSK_VULKAN_STAGE_END_PASS)
|
||||
{
|
||||
if (op->op_class->shader_name &&
|
||||
(op->op_class != current_pipeline_class ||
|
||||
current_pipeline_clip_type != op->clip_type))
|
||||
{
|
||||
current_pipeline = gsk_vulkan_render_get_pipeline (self,
|
||||
op->op_class,
|
||||
op->clip_type,
|
||||
gsk_vulkan_image_get_vk_format (self->target),
|
||||
vk_render_pass);
|
||||
vkCmdBindPipeline (command_buffer,
|
||||
VK_PIPELINE_BIND_POINT_GRAPHICS,
|
||||
current_pipeline);
|
||||
current_pipeline_class = op->op_class;
|
||||
current_pipeline_clip_type = op->clip_type;
|
||||
}
|
||||
|
||||
op = gsk_vulkan_op_command (op, self, self->pipeline_layout, command_buffer);
|
||||
}
|
||||
|
||||
if (op && op->op_class->stage == GSK_VULKAN_STAGE_END_PASS)
|
||||
op = gsk_vulkan_op_command (op, self, self->pipeline_layout, command_buffer);
|
||||
else
|
||||
gsk_vulkan_render_pass_end_draw (render_pass, self, self->pipeline_layout, command_buffer);
|
||||
|
||||
gsk_vulkan_command_pool_submit_buffer (self->command_pool,
|
||||
command_buffer,
|
||||
@@ -781,7 +872,9 @@ gsk_vulkan_render_draw_pass (GskVulkanRender *self,
|
||||
NULL,
|
||||
0,
|
||||
NULL,
|
||||
fence);
|
||||
self->fence);
|
||||
|
||||
return op;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -796,9 +889,7 @@ gsk_vulkan_render_draw (GskVulkanRender *self)
|
||||
|
||||
gsk_vulkan_render_collect_vertex_buffer (self);
|
||||
|
||||
gsk_vulkan_render_draw_pass (self,
|
||||
self->render_pass,
|
||||
self->fence);
|
||||
gsk_vulkan_render_draw_pass (self, self->render_pass, gsk_vulkan_render_get_first_op (self));
|
||||
|
||||
#ifdef G_ENABLE_DEBUG
|
||||
if (GSK_RENDERER_DEBUG_CHECK (self->renderer, SYNC))
|
||||
@@ -834,6 +925,8 @@ static void
|
||||
gsk_vulkan_render_cleanup (GskVulkanRender *self)
|
||||
{
|
||||
VkDevice device = gdk_vulkan_context_get_device (self->vulkan);
|
||||
GskVulkanOp *op;
|
||||
gsize i;
|
||||
|
||||
/* XXX: Wait for fence here or just in reset()? */
|
||||
GSK_VK_CHECK (vkWaitForFences, device,
|
||||
@@ -846,6 +939,14 @@ gsk_vulkan_render_cleanup (GskVulkanRender *self)
|
||||
1,
|
||||
&self->fence);
|
||||
|
||||
for (i = 0; i < gsk_vulkan_render_ops_get_size (&self->render_ops); i += op->op_class->size)
|
||||
{
|
||||
op = (GskVulkanOp *) gsk_vulkan_render_ops_index (&self->render_ops, i);
|
||||
|
||||
gsk_vulkan_op_finish (op);
|
||||
}
|
||||
gsk_vulkan_render_ops_set_size (&self->render_ops, 0);
|
||||
|
||||
gsk_vulkan_uploader_reset (self->uploader);
|
||||
|
||||
gsk_vulkan_command_pool_reset (self->command_pool);
|
||||
@@ -891,6 +992,7 @@ gsk_vulkan_render_free (GskVulkanRender *self)
|
||||
}
|
||||
g_hash_table_unref (self->render_pass_cache);
|
||||
|
||||
gsk_vulkan_render_ops_clear (&self->render_ops);
|
||||
g_clear_pointer (&self->uploader, gsk_vulkan_uploader_free);
|
||||
|
||||
|
||||
@@ -950,3 +1052,21 @@ gsk_vulkan_render_get_renderer (GskVulkanRender *self)
|
||||
{
|
||||
return self->renderer;
|
||||
}
|
||||
|
||||
gpointer
|
||||
gsk_vulkan_render_alloc_op (GskVulkanRender *self,
|
||||
gsize size)
|
||||
{
|
||||
gsize pos;
|
||||
|
||||
pos = gsk_vulkan_render_ops_get_size (&self->render_ops);
|
||||
|
||||
gsk_vulkan_render_ops_splice (&self->render_ops,
|
||||
pos,
|
||||
0, FALSE,
|
||||
NULL,
|
||||
size);
|
||||
|
||||
return gsk_vulkan_render_ops_index (&self->render_ops, pos);
|
||||
}
|
||||
|
||||
|
||||
@@ -35,12 +35,6 @@
|
||||
|
||||
#include "gdk/gdkvulkancontextprivate.h"
|
||||
|
||||
#define GDK_ARRAY_NAME gsk_vulkan_render_ops
|
||||
#define GDK_ARRAY_TYPE_NAME GskVulkanRenderOps
|
||||
#define GDK_ARRAY_ELEMENT_TYPE guchar
|
||||
#define GDK_ARRAY_BY_VALUE 1
|
||||
#include "gdk/gdkarrayimpl.c"
|
||||
|
||||
#define ORTHO_NEAR_PLANE -10000
|
||||
#define ORTHO_FAR_PLANE 10000
|
||||
|
||||
@@ -50,8 +44,6 @@ struct _GskVulkanRenderPass
|
||||
{
|
||||
GdkVulkanContext *vulkan;
|
||||
|
||||
GskVulkanRenderOps render_ops;
|
||||
|
||||
GskVulkanImage *target;
|
||||
graphene_rect_t viewport;
|
||||
cairo_region_t *clip;
|
||||
@@ -76,28 +68,6 @@ static GQuark fallback_pixels_quark;
|
||||
static GQuark texture_pixels_quark;
|
||||
#endif
|
||||
|
||||
static void
|
||||
gsk_vulkan_render_pass_seal (GskVulkanRenderPass *self)
|
||||
{
|
||||
GskVulkanOp *last, *op;
|
||||
guint i;
|
||||
|
||||
last = (GskVulkanOp *) gsk_vulkan_render_ops_index (&self->render_ops, 0);
|
||||
|
||||
for (i = last->op_class->size; i < gsk_vulkan_render_ops_get_size (&self->render_ops); i += op->op_class->size)
|
||||
{
|
||||
op = (GskVulkanOp *) gsk_vulkan_render_ops_index (&self->render_ops, i);
|
||||
|
||||
last->next = op;
|
||||
last = op;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gsk_vulkan_render_pass_add (GskVulkanRenderPass *self,
|
||||
GskVulkanRender *render,
|
||||
GskRenderNode *node);
|
||||
|
||||
GskVulkanRenderPass *
|
||||
gsk_vulkan_render_pass_new (GdkVulkanContext *context,
|
||||
GskVulkanRender *render,
|
||||
@@ -112,7 +82,6 @@ gsk_vulkan_render_pass_new (GdkVulkanContext *context,
|
||||
|
||||
self = g_new0 (GskVulkanRenderPass, 1);
|
||||
self->vulkan = g_object_ref (context);
|
||||
gsk_vulkan_render_ops_init (&self->render_ops);
|
||||
|
||||
self->target = g_object_ref (target);
|
||||
self->clip = cairo_region_copy (clip);
|
||||
@@ -144,27 +113,12 @@ gsk_vulkan_render_pass_new (GdkVulkanContext *context,
|
||||
}
|
||||
#endif
|
||||
|
||||
gsk_vulkan_render_pass_add (self, render, node);
|
||||
|
||||
gsk_vulkan_render_pass_seal (self);
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
void
|
||||
gsk_vulkan_render_pass_free (GskVulkanRenderPass *self)
|
||||
{
|
||||
GskVulkanOp *op;
|
||||
gsize i;
|
||||
|
||||
for (i = 0; i < gsk_vulkan_render_ops_get_size (&self->render_ops); i += op->op_class->size)
|
||||
{
|
||||
op = (GskVulkanOp *) gsk_vulkan_render_ops_index (&self->render_ops, i);
|
||||
|
||||
gsk_vulkan_op_finish (op);
|
||||
}
|
||||
gsk_vulkan_render_ops_clear (&self->render_ops);
|
||||
|
||||
g_object_unref (self->vulkan);
|
||||
g_object_unref (self->target);
|
||||
cairo_region_destroy (self->clip);
|
||||
@@ -172,49 +126,16 @@ gsk_vulkan_render_pass_free (GskVulkanRenderPass *self)
|
||||
g_free (self);
|
||||
}
|
||||
|
||||
void
|
||||
gsk_vulkan_render_pass_print (GskVulkanRenderPass *self,
|
||||
GString *string,
|
||||
guint indent)
|
||||
{
|
||||
GskVulkanOp *op;
|
||||
gsize i;
|
||||
|
||||
for (i = 0; i < gsk_vulkan_render_ops_get_size (&self->render_ops); i += op->op_class->size)
|
||||
{
|
||||
op = (GskVulkanOp *) gsk_vulkan_render_ops_index (&self->render_ops, i);
|
||||
|
||||
gsk_vulkan_op_print (op, string, indent);
|
||||
}
|
||||
}
|
||||
|
||||
gpointer
|
||||
gsk_vulkan_render_pass_alloc_op (GskVulkanRenderPass *self,
|
||||
gsize size)
|
||||
{
|
||||
gsize pos;
|
||||
|
||||
pos = gsk_vulkan_render_ops_get_size (&self->render_ops);
|
||||
|
||||
gsk_vulkan_render_ops_splice (&self->render_ops,
|
||||
pos,
|
||||
0, FALSE,
|
||||
NULL,
|
||||
size);
|
||||
|
||||
return gsk_vulkan_render_ops_index (&self->render_ops, pos);
|
||||
}
|
||||
|
||||
static void
|
||||
gsk_vulkan_render_pass_append_scissor (GskVulkanRenderPass *self,
|
||||
gsk_vulkan_render_pass_append_scissor (GskVulkanRender *render,
|
||||
GskRenderNode *node,
|
||||
const GskVulkanParseState *state)
|
||||
{
|
||||
gsk_vulkan_scissor_op (self, &state->scissor);
|
||||
gsk_vulkan_scissor_op (render, &state->scissor);
|
||||
}
|
||||
|
||||
static void
|
||||
gsk_vulkan_render_pass_append_push_constants (GskVulkanRenderPass *self,
|
||||
gsk_vulkan_render_pass_append_push_constants (GskVulkanRender *render,
|
||||
GskRenderNode *node,
|
||||
const GskVulkanParseState *state)
|
||||
{
|
||||
@@ -228,7 +149,7 @@ gsk_vulkan_render_pass_append_push_constants (GskVulkanRenderPass *self,
|
||||
else
|
||||
graphene_matrix_init_from_matrix (&mvp, &state->projection);
|
||||
|
||||
gsk_vulkan_push_constants_op (self, &state->scale, &mvp, &state->clip.rect);
|
||||
gsk_vulkan_push_constants_op (render, &state->scale, &mvp, &state->clip.rect);
|
||||
}
|
||||
|
||||
#define FALLBACK(...) G_STMT_START { \
|
||||
@@ -254,7 +175,7 @@ gsk_vulkan_render_pass_get_node_as_image (GskVulkanRenderPass *self,
|
||||
result = gsk_vulkan_renderer_get_texture_image (renderer, texture);
|
||||
if (result == NULL)
|
||||
{
|
||||
result = gsk_vulkan_upload_op (self, self->vulkan, texture);
|
||||
result = gsk_vulkan_upload_op (render, self->vulkan, texture);
|
||||
gsk_vulkan_renderer_add_texture_image (renderer, texture, result);
|
||||
}
|
||||
|
||||
@@ -272,7 +193,7 @@ gsk_vulkan_render_pass_get_node_as_image (GskVulkanRenderPass *self,
|
||||
if (clipped.size.width == 0 || clipped.size.height == 0)
|
||||
return NULL;
|
||||
|
||||
result = gsk_vulkan_upload_cairo_op (self,
|
||||
result = gsk_vulkan_upload_cairo_op (render,
|
||||
self->vulkan,
|
||||
node,
|
||||
&state->scale,
|
||||
@@ -297,9 +218,8 @@ gsk_vulkan_render_pass_get_node_as_image (GskVulkanRenderPass *self,
|
||||
*/
|
||||
*tex_bounds = clipped;
|
||||
|
||||
result = gsk_vulkan_offscreen_op (self,
|
||||
result = gsk_vulkan_offscreen_op (render,
|
||||
self->vulkan,
|
||||
render,
|
||||
&state->scale,
|
||||
&clipped,
|
||||
node);
|
||||
@@ -330,13 +250,13 @@ gsk_vulkan_render_pass_add_fallback_node (GskVulkanRenderPass *self,
|
||||
if (clipped.size.width == 0 || clipped.size.height == 0)
|
||||
return TRUE;
|
||||
|
||||
image = gsk_vulkan_upload_cairo_op (self,
|
||||
image = gsk_vulkan_upload_cairo_op (render,
|
||||
self->vulkan,
|
||||
node,
|
||||
&state->scale,
|
||||
&clipped);
|
||||
|
||||
gsk_vulkan_texture_op (self,
|
||||
gsk_vulkan_texture_op (render,
|
||||
gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds),
|
||||
image,
|
||||
GSK_VULKAN_SAMPLER_DEFAULT,
|
||||
@@ -391,7 +311,7 @@ gsk_vulkan_render_pass_add_color_node (GskVulkanRenderPass *self,
|
||||
const GskVulkanParseState *state,
|
||||
GskRenderNode *node)
|
||||
{
|
||||
gsk_vulkan_color_op (self,
|
||||
gsk_vulkan_color_op (render,
|
||||
gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds),
|
||||
&node->bounds,
|
||||
&state->offset,
|
||||
@@ -406,7 +326,7 @@ gsk_vulkan_render_pass_add_linear_gradient_node (GskVulkanRenderPass *self
|
||||
const GskVulkanParseState *state,
|
||||
GskRenderNode *node)
|
||||
{
|
||||
gsk_vulkan_linear_gradient_op (self,
|
||||
gsk_vulkan_linear_gradient_op (render,
|
||||
gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds),
|
||||
&node->bounds,
|
||||
&state->offset,
|
||||
@@ -424,7 +344,7 @@ gsk_vulkan_render_pass_add_border_node (GskVulkanRenderPass *self,
|
||||
const GskVulkanParseState *state,
|
||||
GskRenderNode *node)
|
||||
{
|
||||
gsk_vulkan_border_op (self,
|
||||
gsk_vulkan_border_op (render,
|
||||
gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds),
|
||||
gsk_border_node_get_outline (node),
|
||||
&state->offset,
|
||||
@@ -448,11 +368,11 @@ gsk_vulkan_render_pass_add_texture_node (GskVulkanRenderPass *self,
|
||||
image = gsk_vulkan_renderer_get_texture_image (renderer, texture);
|
||||
if (image == NULL)
|
||||
{
|
||||
image = gsk_vulkan_upload_op (self, self->vulkan, texture);
|
||||
image = gsk_vulkan_upload_op (render, self->vulkan, texture);
|
||||
gsk_vulkan_renderer_add_texture_image (renderer, texture, image);
|
||||
}
|
||||
|
||||
gsk_vulkan_texture_op (self,
|
||||
gsk_vulkan_texture_op (render,
|
||||
gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds),
|
||||
image,
|
||||
GSK_VULKAN_SAMPLER_DEFAULT,
|
||||
@@ -491,11 +411,11 @@ gsk_vulkan_render_pass_add_texture_scale_node (GskVulkanRenderPass *self,
|
||||
image = gsk_vulkan_renderer_get_texture_image (renderer, texture);
|
||||
if (image == NULL)
|
||||
{
|
||||
image = gsk_vulkan_upload_op (self, self->vulkan, texture);
|
||||
image = gsk_vulkan_upload_op (render, self->vulkan, texture);
|
||||
gsk_vulkan_renderer_add_texture_image (renderer, texture, image);
|
||||
}
|
||||
|
||||
gsk_vulkan_texture_op (self,
|
||||
gsk_vulkan_texture_op (render,
|
||||
gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds),
|
||||
image,
|
||||
sampler,
|
||||
@@ -515,7 +435,7 @@ gsk_vulkan_render_pass_add_inset_shadow_node (GskVulkanRenderPass *self,
|
||||
if (gsk_inset_shadow_node_get_blur_radius (node) > 0)
|
||||
FALLBACK ("Blur support not implemented for inset shadows");
|
||||
|
||||
gsk_vulkan_inset_shadow_op (self,
|
||||
gsk_vulkan_inset_shadow_op (render,
|
||||
gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds),
|
||||
gsk_inset_shadow_node_get_outline (node),
|
||||
&state->offset,
|
||||
@@ -537,7 +457,7 @@ gsk_vulkan_render_pass_add_outset_shadow_node (GskVulkanRenderPass *self,
|
||||
if (gsk_outset_shadow_node_get_blur_radius (node) > 0)
|
||||
FALLBACK ("Blur support not implemented for outset shadows");
|
||||
|
||||
gsk_vulkan_outset_shadow_op (self,
|
||||
gsk_vulkan_outset_shadow_op (render,
|
||||
gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds),
|
||||
gsk_outset_shadow_node_get_outline (node),
|
||||
&state->offset,
|
||||
@@ -693,11 +613,11 @@ gsk_vulkan_render_pass_add_transform_node (GskVulkanRenderPass *self,
|
||||
new_state.scissor = state->scissor;
|
||||
graphene_matrix_init_from_matrix (&new_state.projection, &state->projection);
|
||||
|
||||
gsk_vulkan_render_pass_append_push_constants (self, node, &new_state);
|
||||
gsk_vulkan_render_pass_append_push_constants (render, node, &new_state);
|
||||
|
||||
gsk_vulkan_render_pass_add_node (self, render, &new_state, child);
|
||||
|
||||
gsk_vulkan_render_pass_append_push_constants (self, node, state);
|
||||
gsk_vulkan_render_pass_append_push_constants (render, node, state);
|
||||
|
||||
gsk_transform_unref (new_state.modelview);
|
||||
|
||||
@@ -721,7 +641,7 @@ gsk_vulkan_render_pass_add_opacity_node (GskVulkanRenderPass *self,
|
||||
if (image == NULL)
|
||||
return TRUE;
|
||||
|
||||
gsk_vulkan_color_matrix_op_opacity (self,
|
||||
gsk_vulkan_color_matrix_op_opacity (render,
|
||||
gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds),
|
||||
image,
|
||||
&node->bounds,
|
||||
@@ -749,7 +669,7 @@ gsk_vulkan_render_pass_add_color_matrix_node (GskVulkanRenderPass *self,
|
||||
if (image == NULL)
|
||||
return TRUE;
|
||||
|
||||
gsk_vulkan_color_matrix_op (self,
|
||||
gsk_vulkan_color_matrix_op (render,
|
||||
gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds),
|
||||
image,
|
||||
&node->bounds,
|
||||
@@ -855,16 +775,16 @@ gsk_vulkan_render_pass_add_clip_node (GskVulkanRenderPass *self,
|
||||
graphene_matrix_init_from_matrix (&new_state.projection, &state->projection);
|
||||
|
||||
if (do_scissor)
|
||||
gsk_vulkan_render_pass_append_scissor (self, node, &new_state);
|
||||
gsk_vulkan_render_pass_append_scissor (render, node, &new_state);
|
||||
if (do_push_constants)
|
||||
gsk_vulkan_render_pass_append_push_constants (self, node, &new_state);
|
||||
gsk_vulkan_render_pass_append_push_constants (render, node, &new_state);
|
||||
|
||||
gsk_vulkan_render_pass_add_node (self, render, &new_state, gsk_clip_node_get_child (node));
|
||||
|
||||
if (do_push_constants)
|
||||
gsk_vulkan_render_pass_append_push_constants (self, node, state);
|
||||
gsk_vulkan_render_pass_append_push_constants (render, node, state);
|
||||
if (do_scissor)
|
||||
gsk_vulkan_render_pass_append_scissor (self, node, state);
|
||||
gsk_vulkan_render_pass_append_scissor (render, node, state);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -893,11 +813,11 @@ gsk_vulkan_render_pass_add_rounded_clip_node (GskVulkanRenderPass *self,
|
||||
new_state.modelview = state->modelview;
|
||||
graphene_matrix_init_from_matrix (&new_state.projection, &state->projection);
|
||||
|
||||
gsk_vulkan_render_pass_append_push_constants (self, node, &new_state);
|
||||
gsk_vulkan_render_pass_append_push_constants (render, node, &new_state);
|
||||
|
||||
gsk_vulkan_render_pass_add_node (self, render, &new_state, gsk_rounded_clip_node_get_child (node));
|
||||
|
||||
gsk_vulkan_render_pass_append_push_constants (self, node, state);
|
||||
gsk_vulkan_render_pass_append_push_constants (render, node, state);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -916,14 +836,13 @@ gsk_vulkan_render_pass_add_repeat_node (GskVulkanRenderPass *self,
|
||||
if (graphene_rect_get_area (child_bounds) == 0)
|
||||
return TRUE;
|
||||
|
||||
image = gsk_vulkan_offscreen_op (self,
|
||||
image = gsk_vulkan_offscreen_op (render,
|
||||
self->vulkan,
|
||||
render,
|
||||
&state->scale,
|
||||
child_bounds,
|
||||
gsk_repeat_node_get_child (node));
|
||||
|
||||
gsk_vulkan_texture_op (self,
|
||||
gsk_vulkan_texture_op (render,
|
||||
gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds),
|
||||
image,
|
||||
GSK_VULKAN_SAMPLER_REPEAT,
|
||||
@@ -970,7 +889,7 @@ gsk_vulkan_render_pass_add_blend_node (GskVulkanRenderPass *self,
|
||||
bottom_tex_rect = *graphene_rect_zero ();
|
||||
}
|
||||
|
||||
gsk_vulkan_blend_mode_op (self,
|
||||
gsk_vulkan_blend_mode_op (render,
|
||||
gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds),
|
||||
&node->bounds,
|
||||
&state->offset,
|
||||
@@ -1014,7 +933,7 @@ gsk_vulkan_render_pass_add_cross_fade_node (GskVulkanRenderPass *self,
|
||||
if (end_image == NULL)
|
||||
return TRUE;
|
||||
|
||||
gsk_vulkan_color_matrix_op_opacity (self,
|
||||
gsk_vulkan_color_matrix_op_opacity (render,
|
||||
gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &end_child->bounds),
|
||||
end_image,
|
||||
&node->bounds,
|
||||
@@ -1026,7 +945,7 @@ gsk_vulkan_render_pass_add_cross_fade_node (GskVulkanRenderPass *self,
|
||||
}
|
||||
else if (end_image == NULL)
|
||||
{
|
||||
gsk_vulkan_color_matrix_op_opacity (self,
|
||||
gsk_vulkan_color_matrix_op_opacity (render,
|
||||
gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &start_child->bounds),
|
||||
start_image,
|
||||
&node->bounds,
|
||||
@@ -1036,7 +955,7 @@ gsk_vulkan_render_pass_add_cross_fade_node (GskVulkanRenderPass *self,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gsk_vulkan_cross_fade_op (self,
|
||||
gsk_vulkan_cross_fade_op (render,
|
||||
gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds),
|
||||
&node->bounds,
|
||||
&state->offset,
|
||||
@@ -1099,7 +1018,7 @@ gsk_vulkan_render_pass_add_text_node (GskVulkanRenderPass *self,
|
||||
glyph->draw_width / glyph->tw,
|
||||
glyph->draw_height / glyph->th);
|
||||
if (gsk_text_node_has_color_glyphs (node))
|
||||
gsk_vulkan_texture_op (self,
|
||||
gsk_vulkan_texture_op (render,
|
||||
gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &glyph_bounds),
|
||||
glyph->atlas_image,
|
||||
GSK_VULKAN_SAMPLER_DEFAULT,
|
||||
@@ -1107,7 +1026,7 @@ gsk_vulkan_render_pass_add_text_node (GskVulkanRenderPass *self,
|
||||
&state->offset,
|
||||
&glyph_tex_rect);
|
||||
else
|
||||
gsk_vulkan_glyph_op (self,
|
||||
gsk_vulkan_glyph_op (render,
|
||||
gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &glyph_bounds),
|
||||
glyph->atlas_image,
|
||||
&glyph_bounds,
|
||||
@@ -1146,7 +1065,7 @@ gsk_vulkan_render_pass_add_blur_node (GskVulkanRenderPass *self,
|
||||
if (image == NULL)
|
||||
return TRUE;
|
||||
|
||||
gsk_vulkan_blur_op (self,
|
||||
gsk_vulkan_blur_op (render,
|
||||
gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds),
|
||||
image,
|
||||
&node->bounds,
|
||||
@@ -1190,7 +1109,7 @@ gsk_vulkan_render_pass_add_mask_node (GskVulkanRenderPass *self,
|
||||
{
|
||||
graphene_rect_t bounds;
|
||||
if (graphene_rect_intersection (&source->bounds, &mask->bounds, &bounds))
|
||||
gsk_vulkan_glyph_op (self,
|
||||
gsk_vulkan_glyph_op (render,
|
||||
gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &bounds),
|
||||
mask_image,
|
||||
&bounds,
|
||||
@@ -1208,7 +1127,7 @@ gsk_vulkan_render_pass_add_mask_node (GskVulkanRenderPass *self,
|
||||
if (source_image == NULL)
|
||||
return TRUE;
|
||||
|
||||
gsk_vulkan_mask_op (self,
|
||||
gsk_vulkan_mask_op (render,
|
||||
gsk_vulkan_clip_get_clip_type (&state->clip, &state->offset, &node->bounds),
|
||||
&state->offset,
|
||||
source_image,
|
||||
@@ -1308,7 +1227,7 @@ gsk_vulkan_render_pass_add_node (GskVulkanRenderPass *self,
|
||||
gsk_vulkan_render_pass_add_fallback_node (self, render, state, node);
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
gsk_vulkan_render_pass_add (GskVulkanRenderPass *self,
|
||||
GskVulkanRender *render,
|
||||
GskRenderNode *node)
|
||||
@@ -1335,110 +1254,17 @@ gsk_vulkan_render_pass_add (GskVulkanRenderPass *self,
|
||||
state.offset = GRAPHENE_POINT_INIT (-self->viewport.origin.x * scale_x,
|
||||
-self->viewport.origin.y * scale_y);
|
||||
|
||||
gsk_vulkan_render_pass_append_scissor (self, node, &state);
|
||||
gsk_vulkan_render_pass_append_push_constants (self, node, &state);
|
||||
gsk_vulkan_render_pass_append_scissor (render, node, &state);
|
||||
gsk_vulkan_render_pass_append_push_constants (render, node, &state);
|
||||
|
||||
gsk_vulkan_render_pass_add_node (self, render, &state, node);
|
||||
}
|
||||
|
||||
static GskVulkanOp *
|
||||
gsk_vulkan_render_pass_get_first_op (GskVulkanRenderPass *self)
|
||||
{
|
||||
if (gsk_vulkan_render_ops_get_size (&self->render_ops) == 0)
|
||||
return NULL;
|
||||
|
||||
return (GskVulkanOp *) gsk_vulkan_render_ops_index (&self->render_ops, 0);
|
||||
}
|
||||
|
||||
void
|
||||
gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self,
|
||||
GskVulkanUploader *uploader)
|
||||
{
|
||||
GskVulkanOp *op;
|
||||
|
||||
for (op = gsk_vulkan_render_pass_get_first_op (self); op; op = op->next)
|
||||
{
|
||||
gsk_vulkan_op_upload (op, uploader);
|
||||
}
|
||||
}
|
||||
|
||||
gsize
|
||||
gsk_vulkan_render_pass_count_vertex_data (GskVulkanRenderPass *self,
|
||||
gsize n_bytes)
|
||||
{
|
||||
GskVulkanOp *op;
|
||||
|
||||
for (op = gsk_vulkan_render_pass_get_first_op (self); op; op = op->next)
|
||||
{
|
||||
n_bytes = gsk_vulkan_op_count_vertex_data (op, n_bytes);
|
||||
}
|
||||
|
||||
return n_bytes;
|
||||
}
|
||||
|
||||
void
|
||||
gsk_vulkan_render_pass_collect_vertex_data (GskVulkanRenderPass *self,
|
||||
guchar *data)
|
||||
{
|
||||
GskVulkanOp *op;
|
||||
|
||||
for (op = gsk_vulkan_render_pass_get_first_op (self); op; op = op->next)
|
||||
{
|
||||
gsk_vulkan_op_collect_vertex_data (op, data);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
gsk_vulkan_render_pass_reserve_descriptor_sets (GskVulkanRenderPass *self,
|
||||
GskVulkanRender *render)
|
||||
{
|
||||
GskVulkanOp *op;
|
||||
|
||||
for (op = gsk_vulkan_render_pass_get_first_op (self); op; op = op->next)
|
||||
{
|
||||
gsk_vulkan_op_reserve_descriptor_sets (op, render);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gsk_vulkan_render_pass_draw_rect (GskVulkanRenderPass *self,
|
||||
GskVulkanRender *render,
|
||||
VkPipelineLayout pipeline_layout,
|
||||
VkCommandBuffer command_buffer)
|
||||
{
|
||||
VkPipeline current_pipeline = VK_NULL_HANDLE;
|
||||
const GskVulkanOpClass *current_pipeline_class = NULL;
|
||||
const char *current_pipeline_clip_type = NULL;
|
||||
GskVulkanOp *op;
|
||||
|
||||
op = gsk_vulkan_render_pass_get_first_op (self);
|
||||
while (op)
|
||||
{
|
||||
if (op->op_class->shader_name &&
|
||||
(op->op_class != current_pipeline_class ||
|
||||
current_pipeline_clip_type != op->clip_type))
|
||||
{
|
||||
current_pipeline = gsk_vulkan_render_get_pipeline (render,
|
||||
op->op_class,
|
||||
op->clip_type,
|
||||
gsk_vulkan_image_get_vk_format (self->target),
|
||||
self->render_pass);
|
||||
vkCmdBindPipeline (command_buffer,
|
||||
VK_PIPELINE_BIND_POINT_GRAPHICS,
|
||||
current_pipeline);
|
||||
current_pipeline_class = op->op_class;
|
||||
current_pipeline_clip_type = op->clip_type;
|
||||
}
|
||||
|
||||
op = gsk_vulkan_op_command (op, render, pipeline_layout, command_buffer);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
gsk_vulkan_render_pass_draw (GskVulkanRenderPass *self,
|
||||
GskVulkanRender *render,
|
||||
VkPipelineLayout pipeline_layout,
|
||||
VkCommandBuffer command_buffer)
|
||||
VkRenderPass
|
||||
gsk_vulkan_render_pass_begin_draw (GskVulkanRenderPass *self,
|
||||
GskVulkanRender *render,
|
||||
VkPipelineLayout pipeline_layout,
|
||||
VkCommandBuffer command_buffer)
|
||||
{
|
||||
cairo_rectangle_int_t rect;
|
||||
|
||||
@@ -1473,8 +1299,15 @@ gsk_vulkan_render_pass_draw (GskVulkanRenderPass *self,
|
||||
},
|
||||
VK_SUBPASS_CONTENTS_INLINE);
|
||||
|
||||
gsk_vulkan_render_pass_draw_rect (self, render, pipeline_layout, command_buffer);
|
||||
return self->render_pass;
|
||||
}
|
||||
|
||||
void
|
||||
gsk_vulkan_render_pass_end_draw (GskVulkanRenderPass *self,
|
||||
GskVulkanRender *render,
|
||||
VkPipelineLayout pipeline_layout,
|
||||
VkCommandBuffer command_buffer)
|
||||
{
|
||||
vkCmdEndRenderPass (command_buffer);
|
||||
}
|
||||
|
||||
|
||||
@@ -21,22 +21,15 @@ GskVulkanRenderPass * gsk_vulkan_render_pass_new (GdkVulk
|
||||
|
||||
void gsk_vulkan_render_pass_free (GskVulkanRenderPass *self);
|
||||
|
||||
void gsk_vulkan_render_pass_print (GskVulkanRenderPass *self,
|
||||
GString *string,
|
||||
guint indent);
|
||||
void gsk_vulkan_render_pass_add (GskVulkanRenderPass *self,
|
||||
GskVulkanRender *render,
|
||||
GskRenderNode *node);
|
||||
|
||||
gpointer gsk_vulkan_render_pass_alloc_op (GskVulkanRenderPass *self,
|
||||
gsize size);
|
||||
|
||||
void gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self,
|
||||
GskVulkanUploader *uploader);
|
||||
void gsk_vulkan_render_pass_reserve_descriptor_sets (GskVulkanRenderPass *self,
|
||||
GskVulkanRender *render);
|
||||
gsize gsk_vulkan_render_pass_count_vertex_data (GskVulkanRenderPass *self,
|
||||
gsize n_bytes);
|
||||
void gsk_vulkan_render_pass_collect_vertex_data (GskVulkanRenderPass *self,
|
||||
guchar *data);
|
||||
void gsk_vulkan_render_pass_draw (GskVulkanRenderPass *self,
|
||||
VkRenderPass gsk_vulkan_render_pass_begin_draw (GskVulkanRenderPass *self,
|
||||
GskVulkanRender *render,
|
||||
VkPipelineLayout pipeline_layout,
|
||||
VkCommandBuffer command_buffer);
|
||||
void gsk_vulkan_render_pass_end_draw (GskVulkanRenderPass *self,
|
||||
GskVulkanRender *render,
|
||||
VkPipelineLayout pipeline_layout,
|
||||
VkCommandBuffer command_buffer);
|
||||
|
||||
@@ -30,6 +30,9 @@ GskRenderer * gsk_vulkan_render_get_renderer (GskVulk
|
||||
|
||||
void gsk_vulkan_render_upload (GskVulkanRender *self);
|
||||
|
||||
gpointer gsk_vulkan_render_alloc_op (GskVulkanRender *self,
|
||||
gsize size);
|
||||
|
||||
VkPipeline gsk_vulkan_render_get_pipeline (GskVulkanRender *self,
|
||||
const GskVulkanOpClass *op_class,
|
||||
const char *clip_type,
|
||||
@@ -50,9 +53,9 @@ guchar * gsk_vulkan_render_get_buffer_memory (GskVulk
|
||||
gsize *out_offset);
|
||||
|
||||
void gsk_vulkan_render_draw (GskVulkanRender *self);
|
||||
void gsk_vulkan_render_draw_pass (GskVulkanRender *self,
|
||||
GskVulkanRenderPass *pass,
|
||||
VkFence fence);
|
||||
GskVulkanOp * gsk_vulkan_render_draw_pass (GskVulkanRender *self,
|
||||
GskVulkanRenderPass *render_pass,
|
||||
GskVulkanOp *op);
|
||||
|
||||
GdkTexture * gsk_vulkan_render_download_target (GskVulkanRender *self);
|
||||
VkFence gsk_vulkan_render_get_fence (GskVulkanRender *self);
|
||||
|
||||
@@ -90,12 +90,12 @@ static const GskVulkanOpClass GSK_VULKAN_SCISSOR_OP_CLASS = {
|
||||
};
|
||||
|
||||
void
|
||||
gsk_vulkan_scissor_op (GskVulkanRenderPass *render_pass,
|
||||
gsk_vulkan_scissor_op (GskVulkanRender *render,
|
||||
const cairo_rectangle_int_t *rect)
|
||||
{
|
||||
GskVulkanScissorOp *self;
|
||||
|
||||
self = (GskVulkanScissorOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_SCISSOR_OP_CLASS);
|
||||
self = (GskVulkanScissorOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_SCISSOR_OP_CLASS);
|
||||
|
||||
self->rect = *rect;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
void gsk_vulkan_scissor_op (GskVulkanRenderPass *render_pass,
|
||||
void gsk_vulkan_scissor_op (GskVulkanRender *render,
|
||||
const cairo_rectangle_int_t *rect);
|
||||
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ static const GskVulkanOpClass GSK_VULKAN_TEXTURE_OP_CLASS = {
|
||||
};
|
||||
|
||||
void
|
||||
gsk_vulkan_texture_op (GskVulkanRenderPass *render_pass,
|
||||
gsk_vulkan_texture_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
GskVulkanImage *image,
|
||||
GskVulkanRenderSampler sampler,
|
||||
@@ -94,7 +94,7 @@ gsk_vulkan_texture_op (GskVulkanRenderPass *render_pass,
|
||||
{
|
||||
GskVulkanTextureOp *self;
|
||||
|
||||
self = (GskVulkanTextureOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_TEXTURE_OP_CLASS);
|
||||
self = (GskVulkanTextureOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_TEXTURE_OP_CLASS);
|
||||
|
||||
((GskVulkanOp *) self)->clip_type = g_intern_string (clip_type);
|
||||
self->image = g_object_ref (image);
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
void gsk_vulkan_texture_op (GskVulkanRenderPass *render_pass,
|
||||
void gsk_vulkan_texture_op (GskVulkanRender *render,
|
||||
const char *clip_type,
|
||||
GskVulkanImage *image,
|
||||
GskVulkanRenderSampler sampler,
|
||||
|
||||
@@ -114,7 +114,7 @@ static const GskVulkanOpClass GSK_VULKAN_UPLOAD_CAIRO_OP_CLASS = {
|
||||
};
|
||||
|
||||
GskVulkanImage *
|
||||
gsk_vulkan_upload_cairo_op (GskVulkanRenderPass *render_pass,
|
||||
gsk_vulkan_upload_cairo_op (GskVulkanRender *render,
|
||||
GdkVulkanContext *context,
|
||||
GskRenderNode *node,
|
||||
const graphene_vec2_t *scale,
|
||||
@@ -122,7 +122,7 @@ gsk_vulkan_upload_cairo_op (GskVulkanRenderPass *render_pass,
|
||||
{
|
||||
GskVulkanUploadCairoOp *self;
|
||||
|
||||
self = (GskVulkanUploadCairoOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_UPLOAD_CAIRO_OP_CLASS);
|
||||
self = (GskVulkanUploadCairoOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_UPLOAD_CAIRO_OP_CLASS);
|
||||
|
||||
self->node = gsk_render_node_ref (node);
|
||||
self->image = gsk_vulkan_image_new_for_upload (context,
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
GskVulkanImage * gsk_vulkan_upload_cairo_op (GskVulkanRenderPass *render_pass,
|
||||
GskVulkanImage * gsk_vulkan_upload_cairo_op (GskVulkanRender *render,
|
||||
GdkVulkanContext *context,
|
||||
GskRenderNode *node,
|
||||
const graphene_vec2_t *scale,
|
||||
|
||||
@@ -95,13 +95,13 @@ static const GskVulkanOpClass GSK_VULKAN_UPLOAD_OP_CLASS = {
|
||||
};
|
||||
|
||||
GskVulkanImage *
|
||||
gsk_vulkan_upload_op (GskVulkanRenderPass *render_pass,
|
||||
GdkVulkanContext *context,
|
||||
GdkTexture *texture)
|
||||
gsk_vulkan_upload_op (GskVulkanRender *render,
|
||||
GdkVulkanContext *context,
|
||||
GdkTexture *texture)
|
||||
{
|
||||
GskVulkanUploadOp *self;
|
||||
|
||||
self = (GskVulkanUploadOp *) gsk_vulkan_op_alloc (render_pass, &GSK_VULKAN_UPLOAD_OP_CLASS);
|
||||
self = (GskVulkanUploadOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_UPLOAD_OP_CLASS);
|
||||
|
||||
self->texture = g_object_ref (texture);
|
||||
self->image = gsk_vulkan_image_new_for_upload (context,
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
GskVulkanImage * gsk_vulkan_upload_op (GskVulkanRenderPass *render_pass,
|
||||
GskVulkanImage * gsk_vulkan_upload_op (GskVulkanRender *render,
|
||||
GdkVulkanContext *context,
|
||||
GdkTexture *texture);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user