gsk_vulkan_render_pass_count_vertex_data (GskVulkanRenderPass *self)
{
GskVulkanOp *op;
- gsize n_bytes;
+ gsize n_bytes, vertex_stride;
guint i;
n_bytes = 0;
case GSK_VULKAN_OP_OUTSET_SHADOW:
case GSK_VULKAN_OP_CROSS_FADE:
case GSK_VULKAN_OP_BLEND_MODE:
- op->render.vertex_count = gsk_vulkan_pipeline_get_vertex_stride (op->render.pipeline);
+ vertex_stride = gsk_vulkan_pipeline_get_vertex_stride (op->render.pipeline);
+ op->render.vertex_offset = n_bytes;
+ op->render.vertex_count = vertex_stride;
n_bytes += op->render.vertex_count;
break;
case GSK_VULKAN_OP_TEXT:
case GSK_VULKAN_OP_COLOR_TEXT:
- op->text.vertex_count = gsk_vulkan_pipeline_get_vertex_stride (op->render.pipeline) * op->text.num_glyphs;
+ vertex_stride = gsk_vulkan_pipeline_get_vertex_stride (op->render.pipeline);
+ op->text.vertex_offset = n_bytes;
+ op->text.vertex_count = vertex_stride * op->text.num_glyphs;
n_bytes += op->text.vertex_count;
break;
static void
gsk_vulkan_render_pass_collect_vertex_data (GskVulkanRenderPass *self,
GskVulkanRender *render,
- guchar *data,
- gsize total)
+ guchar *data)
{
GskVulkanOp *op;
- gsize offset;
guint i;
- offset = 0;
for (i = 0; i < self->render_ops->len; i++)
{
op = &g_array_index (self->render_ops, GskVulkanOp, i);
case GSK_VULKAN_OP_FALLBACK_CLIP:
case GSK_VULKAN_OP_FALLBACK_ROUNDED_CLIP:
case GSK_VULKAN_OP_TEXTURE:
- {
- op->render.vertex_offset = offset;
- gsk_vulkan_texture_pipeline_collect_vertex_data (GSK_VULKAN_TEXTURE_PIPELINE (op->render.pipeline),
- data + offset,
- &op->render.offset,
- &op->render.node->bounds,
- &op->render.source_rect);
- offset += op->render.vertex_count;
- }
+ gsk_vulkan_texture_pipeline_collect_vertex_data (GSK_VULKAN_TEXTURE_PIPELINE (op->render.pipeline),
+ data + op->render.vertex_offset,
+ &op->render.offset,
+ &op->render.node->bounds,
+ &op->render.source_rect);
break;
case GSK_VULKAN_OP_REPEAT:
- {
- op->render.vertex_offset = offset;
- gsk_vulkan_texture_pipeline_collect_vertex_data (GSK_VULKAN_TEXTURE_PIPELINE (op->render.pipeline),
- data + offset,
- &op->render.offset,
- &op->render.node->bounds,
- &op->render.source_rect);
- offset += op->render.vertex_count;
- }
+ gsk_vulkan_texture_pipeline_collect_vertex_data (GSK_VULKAN_TEXTURE_PIPELINE (op->render.pipeline),
+ data + op->render.vertex_offset,
+ &op->render.offset,
+ &op->render.node->bounds,
+ &op->render.source_rect);
break;
case GSK_VULKAN_OP_TEXT:
- {
- op->text.vertex_offset = offset;
- gsk_vulkan_text_pipeline_collect_vertex_data (GSK_VULKAN_TEXT_PIPELINE (op->text.pipeline),
- data + offset,
- GSK_VULKAN_RENDERER (gsk_vulkan_render_get_renderer (render)),
- &op->text.node->bounds,
- (PangoFont *)gsk_text_node_get_font (op->text.node),
- gsk_text_node_get_num_glyphs (op->text.node),
- gsk_text_node_get_glyphs (op->text.node, NULL),
- gsk_text_node_get_color (op->text.node),
- &GRAPHENE_POINT_INIT (
- gsk_text_node_get_offset (op->text.node)->x + op->render.offset.x,
- gsk_text_node_get_offset (op->text.node)->y + op->render.offset.y
- ),
- op->text.start_glyph,
- op->text.num_glyphs,
- op->text.scale);
- offset += op->text.vertex_count;
- }
+ gsk_vulkan_text_pipeline_collect_vertex_data (GSK_VULKAN_TEXT_PIPELINE (op->text.pipeline),
+ data + op->text.vertex_offset,
+ GSK_VULKAN_RENDERER (gsk_vulkan_render_get_renderer (render)),
+ &op->text.node->bounds,
+ (PangoFont *)gsk_text_node_get_font (op->text.node),
+ gsk_text_node_get_num_glyphs (op->text.node),
+ gsk_text_node_get_glyphs (op->text.node, NULL),
+ gsk_text_node_get_color (op->text.node),
+ &GRAPHENE_POINT_INIT (
+ gsk_text_node_get_offset (op->text.node)->x + op->render.offset.x,
+ gsk_text_node_get_offset (op->text.node)->y + op->render.offset.y
+ ),
+ op->text.start_glyph,
+ op->text.num_glyphs,
+ op->text.scale);
break;
case GSK_VULKAN_OP_COLOR_TEXT:
- {
- op->text.vertex_offset = offset;
- gsk_vulkan_color_text_pipeline_collect_vertex_data (GSK_VULKAN_COLOR_TEXT_PIPELINE (op->text.pipeline),
- data + offset,
- GSK_VULKAN_RENDERER (gsk_vulkan_render_get_renderer (render)),
- &op->text.node->bounds,
- (PangoFont *)gsk_text_node_get_font (op->text.node),
- gsk_text_node_get_num_glyphs (op->text.node),
- gsk_text_node_get_glyphs (op->text.node, NULL),
- &GRAPHENE_POINT_INIT (
- gsk_text_node_get_offset (op->text.node)->x + op->render.offset.x,
- gsk_text_node_get_offset (op->text.node)->y + op->render.offset.y
- ),
- op->text.start_glyph,
- op->text.num_glyphs,
- op->text.scale);
- offset += op->text.vertex_count;
- }
+ gsk_vulkan_color_text_pipeline_collect_vertex_data (GSK_VULKAN_COLOR_TEXT_PIPELINE (op->text.pipeline),
+ data + op->text.vertex_offset,
+ GSK_VULKAN_RENDERER (gsk_vulkan_render_get_renderer (render)),
+ &op->text.node->bounds,
+ (PangoFont *)gsk_text_node_get_font (op->text.node),
+ gsk_text_node_get_num_glyphs (op->text.node),
+ gsk_text_node_get_glyphs (op->text.node, NULL),
+ &GRAPHENE_POINT_INIT (
+ gsk_text_node_get_offset (op->text.node)->x + op->render.offset.x,
+ gsk_text_node_get_offset (op->text.node)->y + op->render.offset.y
+ ),
+ op->text.start_glyph,
+ op->text.num_glyphs,
+ op->text.scale);
break;
case GSK_VULKAN_OP_COLOR:
- {
- op->render.vertex_offset = offset;
- gsk_vulkan_color_pipeline_collect_vertex_data (GSK_VULKAN_COLOR_PIPELINE (op->render.pipeline),
- data + offset,
- &op->render.offset,
- &op->render.node->bounds,
- gsk_color_node_get_color (op->render.node));
- offset += op->render.vertex_count;
- }
+ gsk_vulkan_color_pipeline_collect_vertex_data (GSK_VULKAN_COLOR_PIPELINE (op->render.pipeline),
+ data + op->render.vertex_offset,
+ &op->render.offset,
+ &op->render.node->bounds,
+ gsk_color_node_get_color (op->render.node));
break;
case GSK_VULKAN_OP_LINEAR_GRADIENT:
- {
- op->render.vertex_offset = offset;
- gsk_vulkan_linear_gradient_pipeline_collect_vertex_data (GSK_VULKAN_LINEAR_GRADIENT_PIPELINE (op->render.pipeline),
- data + offset,
- &op->render.offset,
- &op->render.node->bounds,
- gsk_linear_gradient_node_get_start (op->render.node),
- gsk_linear_gradient_node_get_end (op->render.node),
- gsk_render_node_get_node_type (op->render.node) == GSK_REPEATING_LINEAR_GRADIENT_NODE,
- gsk_linear_gradient_node_get_n_color_stops (op->render.node),
- gsk_linear_gradient_node_get_color_stops (op->render.node, NULL));
- offset += op->render.vertex_count;
- }
+ gsk_vulkan_linear_gradient_pipeline_collect_vertex_data (GSK_VULKAN_LINEAR_GRADIENT_PIPELINE (op->render.pipeline),
+ data + op->render.vertex_offset,
+ &op->render.offset,
+ &op->render.node->bounds,
+ gsk_linear_gradient_node_get_start (op->render.node),
+ gsk_linear_gradient_node_get_end (op->render.node),
+ gsk_render_node_get_node_type (op->render.node) == GSK_REPEATING_LINEAR_GRADIENT_NODE,
+ gsk_linear_gradient_node_get_n_color_stops (op->render.node),
+ gsk_linear_gradient_node_get_color_stops (op->render.node, NULL));
break;
case GSK_VULKAN_OP_OPACITY:
0.0, 0.0, 0.0, gsk_opacity_node_get_opacity (op->render.node)
});
graphene_vec4_init (&color_offset, 0.0, 0.0, 0.0, 0.0);
- op->render.vertex_offset = offset;
gsk_vulkan_effect_pipeline_collect_vertex_data (GSK_VULKAN_EFFECT_PIPELINE (op->render.pipeline),
- data + offset,
+ data + op->render.vertex_offset,
&op->render.offset,
&op->render.node->bounds,
&op->render.source_rect,
&color_matrix,
&color_offset);
- offset += op->render.vertex_count;
}
break;
case GSK_VULKAN_OP_BLUR:
- {
- op->render.vertex_offset = offset;
- gsk_vulkan_blur_pipeline_collect_vertex_data (GSK_VULKAN_BLUR_PIPELINE (op->render.pipeline),
- data + offset,
- &op->render.offset,
- &op->render.node->bounds,
- &op->render.source_rect,
- gsk_blur_node_get_radius (op->render.node));
- offset += op->render.vertex_count;
- }
+ gsk_vulkan_blur_pipeline_collect_vertex_data (GSK_VULKAN_BLUR_PIPELINE (op->render.pipeline),
+ data + op->render.vertex_offset,
+ &op->render.offset,
+ &op->render.node->bounds,
+ &op->render.source_rect,
+ gsk_blur_node_get_radius (op->render.node));
break;
case GSK_VULKAN_OP_COLOR_MATRIX:
- {
- op->render.vertex_offset = offset;
- gsk_vulkan_effect_pipeline_collect_vertex_data (GSK_VULKAN_EFFECT_PIPELINE (op->render.pipeline),
- data + offset,
- &op->render.offset,
- &op->render.node->bounds,
- &op->render.source_rect,
- gsk_color_matrix_node_get_color_matrix (op->render.node),
- gsk_color_matrix_node_get_color_offset (op->render.node));
- offset += op->render.vertex_count;
- }
+ gsk_vulkan_effect_pipeline_collect_vertex_data (GSK_VULKAN_EFFECT_PIPELINE (op->render.pipeline),
+ data + op->render.vertex_offset,
+ &op->render.offset,
+ &op->render.node->bounds,
+ &op->render.source_rect,
+ gsk_color_matrix_node_get_color_matrix (op->render.node),
+ gsk_color_matrix_node_get_color_offset (op->render.node));
break;
case GSK_VULKAN_OP_BORDER:
- {
- op->render.vertex_offset = offset;
- gsk_vulkan_border_pipeline_collect_vertex_data (GSK_VULKAN_BORDER_PIPELINE (op->render.pipeline),
- data + offset,
- &op->render.offset,
- gsk_border_node_get_outline (op->render.node),
- gsk_border_node_get_widths (op->render.node),
- gsk_border_node_get_colors (op->render.node));
- offset += op->render.vertex_count;
- }
+ gsk_vulkan_border_pipeline_collect_vertex_data (GSK_VULKAN_BORDER_PIPELINE (op->render.pipeline),
+ data + op->render.vertex_offset,
+ &op->render.offset,
+ gsk_border_node_get_outline (op->render.node),
+ gsk_border_node_get_widths (op->render.node),
+ gsk_border_node_get_colors (op->render.node));
break;
case GSK_VULKAN_OP_INSET_SHADOW:
- {
- op->render.vertex_offset = offset;
- gsk_vulkan_box_shadow_pipeline_collect_vertex_data (GSK_VULKAN_BOX_SHADOW_PIPELINE (op->render.pipeline),
- data + offset,
- &op->render.offset,
- gsk_inset_shadow_node_get_outline (op->render.node),
- gsk_inset_shadow_node_get_color (op->render.node),
- gsk_inset_shadow_node_get_dx (op->render.node),
- gsk_inset_shadow_node_get_dy (op->render.node),
- gsk_inset_shadow_node_get_spread (op->render.node),
- gsk_inset_shadow_node_get_blur_radius (op->render.node));
- offset += op->render.vertex_count;
- }
+ gsk_vulkan_box_shadow_pipeline_collect_vertex_data (GSK_VULKAN_BOX_SHADOW_PIPELINE (op->render.pipeline),
+ data + op->render.vertex_offset,
+ &op->render.offset,
+ gsk_inset_shadow_node_get_outline (op->render.node),
+ gsk_inset_shadow_node_get_color (op->render.node),
+ gsk_inset_shadow_node_get_dx (op->render.node),
+ gsk_inset_shadow_node_get_dy (op->render.node),
+ gsk_inset_shadow_node_get_spread (op->render.node),
+ gsk_inset_shadow_node_get_blur_radius (op->render.node));
break;
case GSK_VULKAN_OP_OUTSET_SHADOW:
- {
- op->render.vertex_offset = offset;
- gsk_vulkan_box_shadow_pipeline_collect_vertex_data (GSK_VULKAN_BOX_SHADOW_PIPELINE (op->render.pipeline),
- data + offset,
- &op->render.offset,
- gsk_outset_shadow_node_get_outline (op->render.node),
- gsk_outset_shadow_node_get_color (op->render.node),
- gsk_outset_shadow_node_get_dx (op->render.node),
- gsk_outset_shadow_node_get_dy (op->render.node),
- gsk_outset_shadow_node_get_spread (op->render.node),
- gsk_outset_shadow_node_get_blur_radius (op->render.node));
- offset += op->render.vertex_count;
- }
+ gsk_vulkan_box_shadow_pipeline_collect_vertex_data (GSK_VULKAN_BOX_SHADOW_PIPELINE (op->render.pipeline),
+ data + op->render.vertex_offset,
+ &op->render.offset,
+ gsk_outset_shadow_node_get_outline (op->render.node),
+ gsk_outset_shadow_node_get_color (op->render.node),
+ gsk_outset_shadow_node_get_dx (op->render.node),
+ gsk_outset_shadow_node_get_dy (op->render.node),
+ gsk_outset_shadow_node_get_spread (op->render.node),
+ gsk_outset_shadow_node_get_blur_radius (op->render.node));
break;
case GSK_VULKAN_OP_CROSS_FADE:
- {
- op->render.vertex_offset = offset;
- gsk_vulkan_cross_fade_pipeline_collect_vertex_data (GSK_VULKAN_CROSS_FADE_PIPELINE (op->render.pipeline),
- data + offset,
- &op->render.offset,
- &op->render.node->bounds,
- &op->render.source_rect,
- &op->render.source2_rect,
- gsk_cross_fade_node_get_progress (op->render.node));
- offset += op->render.vertex_count;
- }
+ gsk_vulkan_cross_fade_pipeline_collect_vertex_data (GSK_VULKAN_CROSS_FADE_PIPELINE (op->render.pipeline),
+ data + op->render.vertex_offset,
+ &op->render.offset,
+ &op->render.node->bounds,
+ &op->render.source_rect,
+ &op->render.source2_rect,
+ gsk_cross_fade_node_get_progress (op->render.node));
break;
case GSK_VULKAN_OP_BLEND_MODE:
- {
- op->render.vertex_offset = offset;
- gsk_vulkan_blend_mode_pipeline_collect_vertex_data (GSK_VULKAN_BLEND_MODE_PIPELINE (op->render.pipeline),
- data + offset,
- &op->render.offset,
- &op->render.node->bounds,
- &op->render.source_rect,
- &op->render.source2_rect,
- gsk_blend_node_get_blend_mode (op->render.node));
- offset += op->render.vertex_count;
- }
+ gsk_vulkan_blend_mode_pipeline_collect_vertex_data (GSK_VULKAN_BLEND_MODE_PIPELINE (op->render.pipeline),
+ data + op->render.vertex_offset,
+ &op->render.offset,
+ &op->render.node->bounds,
+ &op->render.source_rect,
+ &op->render.source2_rect,
+ gsk_blend_node_get_blend_mode (op->render.node));
break;
default:
case GSK_VULKAN_OP_PUSH_VERTEX_CONSTANTS:
continue;
}
-
- g_assert (offset <= total);
}
}
self->vertex_data = gsk_vulkan_buffer_new (self->vulkan, n_bytes);
data = gsk_vulkan_buffer_map (self->vertex_data);
- gsk_vulkan_render_pass_collect_vertex_data (self, render, data, n_bytes);
+ gsk_vulkan_render_pass_collect_vertex_data (self, render, data);
gsk_vulkan_buffer_unmap (self->vertex_data);
}