This way, ops can batch themselves.
They don't dothat yet, but you know where this is going...
GSK_VULKAN_SAMPLER_DEFAULT);
}
-static void
+static GskVulkanOp *
gsk_vulkan_blend_mode_op_command (GskVulkanOp *op,
GskVulkanRender *render,
VkPipelineLayout pipeline_layout,
vkCmdDraw (command_buffer,
6, 1,
0, self->vertex_offset / gsk_vulkan_blend_mode_info.pVertexBindingDescriptions[0].stride);
+
+ return op->next;
}
static const GskVulkanShaderOpClass GSK_VULKAN_BLEND_MODE_OP_CLASS = {
GSK_VULKAN_SAMPLER_DEFAULT);
}
-static void
+static GskVulkanOp *
gsk_vulkan_blur_op_command (GskVulkanOp *op,
GskVulkanRender *render,
VkPipelineLayout pipeline_layout,
vkCmdDraw (command_buffer,
6, 1,
0, self->vertex_offset / gsk_vulkan_blur_info.pVertexBindingDescriptions[0].stride);
+
+ return op->next;
}
static const GskVulkanOpClass GSK_VULKAN_BLUR_OP_CLASS = {
{
}
-static void
+static GskVulkanOp *
gsk_vulkan_border_op_command (GskVulkanOp *op,
GskVulkanRender *render,
VkPipelineLayout pipeline_layout,
vkCmdDraw (command_buffer,
6 * 8, 1,
0, self->vertex_offset / gsk_vulkan_border_info.pVertexBindingDescriptions[0].stride);
+
+ return op->next;
}
static const GskVulkanOpClass GSK_VULKAN_BORDER_OP_CLASS = {
GSK_VULKAN_SAMPLER_DEFAULT);
}
-static void
+static GskVulkanOp *
gsk_vulkan_color_matrix_op_command (GskVulkanOp *op,
GskVulkanRender *render,
VkPipelineLayout pipeline_layout,
vkCmdDraw (command_buffer,
6, 1,
0, self->vertex_offset / gsk_vulkan_color_matrix_info.pVertexBindingDescriptions[0].stride);
+
+ return op->next;
}
static const GskVulkanOpClass GSK_VULKAN_COLOR_MATRIX_OP_CLASS = {
{
}
-static void
+static GskVulkanOp *
gsk_vulkan_color_op_command (GskVulkanOp *op,
GskVulkanRender *render,
VkPipelineLayout pipeline_layout,
vkCmdDraw (command_buffer,
6, 1,
0, self->vertex_offset / gsk_vulkan_color_info.pVertexBindingDescriptions[0].stride);
+
+ return op->next;
}
static const GskVulkanOpClass GSK_VULKAN_COLOR_OP_CLASS = {
GSK_VULKAN_SAMPLER_DEFAULT);
}
-static void
+static GskVulkanOp *
gsk_vulkan_cross_fade_op_command (GskVulkanOp *op,
GskVulkanRender *render,
VkPipelineLayout pipeline_layout,
vkCmdDraw (command_buffer,
6, 1,
0, self->vertex_offset / gsk_vulkan_cross_fade_info.pVertexBindingDescriptions[0].stride);
+
+ return op->next;
}
static const GskVulkanOpClass GSK_VULKAN_CROSS_FADE_OP_CLASS = {
self->image_descriptor = gsk_vulkan_render_get_image_descriptor (render, self->image, GSK_VULKAN_SAMPLER_DEFAULT);
}
-static void
+static GskVulkanOp *
gsk_vulkan_glyph_op_command (GskVulkanOp *op,
GskVulkanRender *render,
VkPipelineLayout pipeline_layout,
vkCmdDraw (command_buffer,
6, 1,
0, self->vertex_offset / gsk_vulkan_glyph_info.pVertexBindingDescriptions[0].stride);
+
+ return op->next;
}
static const GskVulkanOpClass GSK_VULKAN_GLYPH_OP_CLASS = {
{
}
-static void
+static GskVulkanOp *
gsk_vulkan_inset_shadow_op_command (GskVulkanOp *op,
GskVulkanRender *render,
VkPipelineLayout pipeline_layout,
vkCmdDraw (command_buffer,
6, 1,
0, self->vertex_offset / gsk_vulkan_inset_shadow_info.pVertexBindingDescriptions[0].stride);
+
+ return op->next;
}
static const GskVulkanOpClass GSK_VULKAN_INSET_SHADOW_OP_CLASS = {
memcpy (mem, self->stops, self->n_stops * sizeof (GskColorStop));
}
-static void
+static GskVulkanOp *
gsk_vulkan_linear_gradient_op_command (GskVulkanOp *op,
GskVulkanRender *render,
VkPipelineLayout pipeline_layout,
vkCmdDraw (command_buffer,
6, 1,
0, self->vertex_offset / gsk_vulkan_linear_info.pVertexBindingDescriptions[0].stride);
+
+ return op->next;
}
static const GskVulkanOpClass GSK_VULKAN_LINEAR_GRADIENT_OP_CLASS = {
self->mask.image_descriptor = gsk_vulkan_render_get_image_descriptor (render, self->mask.image, GSK_VULKAN_SAMPLER_DEFAULT);
}
-static void
+static GskVulkanOp *
gsk_vulkan_mask_op_command (GskVulkanOp *op,
GskVulkanRender *render,
VkPipelineLayout pipeline_layout,
vkCmdDraw (command_buffer,
6, 1,
0, self->vertex_offset / gsk_vulkan_mask_info.pVertexBindingDescriptions[0].stride);
+
+ return op->next;
}
static const GskVulkanOpClass GSK_VULKAN_COLOR_MASK_OP_CLASS = {
gsk_vulkan_render_pass_reserve_descriptor_sets (self->render_pass, render);
}
-static void
+static GskVulkanOp *
gsk_vulkan_offscreen_op_command (GskVulkanOp *op,
GskVulkanRender *render,
VkPipelineLayout pipeline_layout,
GskVulkanOffscreenOp *self = (GskVulkanOffscreenOp *) op;
gsk_vulkan_render_draw_pass (render, self->render_pass, VK_NULL_HANDLE);
+
+ return op->next;
}
static const GskVulkanOpClass GSK_VULKAN_OFFSCREEN_OP_CLASS = {
{
}
-static void
+static GskVulkanOp *
gsk_vulkan_offscreen_end_op_command (GskVulkanOp *op,
GskVulkanRender *render,
VkPipelineLayout pipeline_layout,
VkCommandBuffer command_buffer)
{
+ return op->next;
}
static const GskVulkanOpClass GSK_VULKAN_OFFSCREEN_END_OP_CLASS = {
op->op_class->reserve_descriptor_sets (op, render);
}
-void
+GskVulkanOp *
gsk_vulkan_op_command (GskVulkanOp *op,
GskVulkanRender *render,
VkPipelineLayout pipeline_layout,
VkCommandBuffer command_buffer)
{
- op->op_class->command (op, render, pipeline_layout, command_buffer);
+ return op->op_class->command (op, render, pipeline_layout, command_buffer);
}
guchar *data);
void (* reserve_descriptor_sets) (GskVulkanOp *op,
GskVulkanRender *render);
- void (* command) (GskVulkanOp *op,
+ GskVulkanOp * (* command) (GskVulkanOp *op,
GskVulkanRender *render,
VkPipelineLayout pipeline_layout,
VkCommandBuffer command_buffer);
guchar *data);
void gsk_vulkan_op_reserve_descriptor_sets (GskVulkanOp *op,
GskVulkanRender *render);
-void gsk_vulkan_op_command (GskVulkanOp *op,
+GskVulkanOp * gsk_vulkan_op_command (GskVulkanOp *op,
GskVulkanRender *render,
VkPipelineLayout pipeline_layout,
VkCommandBuffer command_buffer);
{
}
-static void
+static GskVulkanOp *
gsk_vulkan_outset_shadow_op_command (GskVulkanOp *op,
GskVulkanRender *render,
VkPipelineLayout pipeline_layout,
vkCmdDraw (command_buffer,
6, 1,
0, self->vertex_offset / gsk_vulkan_outset_shadow_info.pVertexBindingDescriptions[0].stride);
+
+ return op->next;
}
static const GskVulkanOpClass GSK_VULKAN_OUTSET_SHADOW_OP_CLASS = {
{
}
-static void
+static GskVulkanOp *
gsk_vulkan_push_constants_op_command (GskVulkanOp *op,
GskVulkanRender *render,
VkPipelineLayout pipeline_layout,
0,
sizeof (self->instance),
&self->instance);
+
+ return op->next;
}
static const GskVulkanOpClass GSK_VULKAN_PUSH_CONSTANTS_OP_CLASS = {
const char *current_pipeline_clip_type = NULL;
GskVulkanOp *op;
- for (op = gsk_vulkan_render_pass_get_first_op (self); op; op = op->next)
+ 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;
}
- gsk_vulkan_op_command (op, render, pipeline_layout, command_buffer);
+ op = gsk_vulkan_op_command (op, render, pipeline_layout, command_buffer);
}
}
{
}
-static void
+static GskVulkanOp *
gsk_vulkan_scissor_op_command (GskVulkanOp *op,
GskVulkanRender *render,
VkPipelineLayout pipeline_layout,
{ self->rect.x, self->rect.y },
{ self->rect.width, self->rect.height },
});
+
+ return op->next;
}
static const GskVulkanOpClass GSK_VULKAN_SCISSOR_OP_CLASS = {
self->image_descriptor = gsk_vulkan_render_get_image_descriptor (render, self->image, self->sampler);
}
-static void
+static GskVulkanOp *
gsk_vulkan_texture_op_command (GskVulkanOp *op,
GskVulkanRender *render,
VkPipelineLayout pipeline_layout,
vkCmdDraw (command_buffer,
6, 1,
0, self->vertex_offset / gsk_vulkan_texture_info.pVertexBindingDescriptions[0].stride);
+
+ return op->next;
}
static const GskVulkanOpClass GSK_VULKAN_TEXTURE_OP_CLASS = {
{
}
-static void
+static GskVulkanOp *
gsk_vulkan_upload_cairo_op_command (GskVulkanOp *op,
GskVulkanRender *render,
VkPipelineLayout pipeline_layout,
VkCommandBuffer command_buffer)
{
+ return op->next;
}
static const GskVulkanOpClass GSK_VULKAN_UPLOAD_CAIRO_OP_CLASS = {
{
}
-static void
+static GskVulkanOp *
gsk_vulkan_upload_op_command (GskVulkanOp *op,
GskVulkanRender *render,
VkPipelineLayout pipeline_layout,
VkCommandBuffer command_buffer)
{
+ return op->next;
}
static const GskVulkanOpClass GSK_VULKAN_UPLOAD_OP_CLASS = {