diff options
author | Benjamin Otte <otte@redhat.com> | 2023-05-12 02:51:50 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2023-05-17 02:25:32 +0200 |
commit | 994c006276b4555b51d92058b90589798305373d (patch) | |
tree | 0e0a6398611392d58f2a7034df092fa6388fec4a | |
parent | bff6c33660f5e48b84d66ebc07a956497d1bb36c (diff) | |
download | gtk+-994c006276b4555b51d92058b90589798305373d.tar.gz |
vulkan: Move offset into the state object
-rw-r--r-- | gsk/vulkan/gskvulkanrenderpass.c | 55 |
1 files changed, 26 insertions, 29 deletions
diff --git a/gsk/vulkan/gskvulkanrenderpass.c b/gsk/vulkan/gskvulkanrenderpass.c index 41ac8b8367..60b977dbc0 100644 --- a/gsk/vulkan/gskvulkanrenderpass.c +++ b/gsk/vulkan/gskvulkanrenderpass.c @@ -122,7 +122,6 @@ struct _GskVulkanRenderPass cairo_region_t *clip; graphene_vec2_t scale; - graphene_point_t offset; VkRenderPass render_pass; VkSemaphore signal_semaphore; @@ -132,6 +131,7 @@ struct _GskVulkanRenderPass struct _GskVulkanParseState { + graphene_point_t offset; graphene_matrix_t mvp; GskVulkanClip clip; }; @@ -275,7 +275,7 @@ gsk_vulkan_render_pass_add_fallback_node (GskVulkanRenderPass *self, { GskVulkanOp op = { .render.node = node, - .render.offset = self->offset, + .render.offset = state->offset, }; switch (state->clip.type) @@ -350,7 +350,7 @@ gsk_vulkan_render_pass_add_color_node (GskVulkanRenderPass *self, { GskVulkanOp op = { .render.node = node, - .render.offset = self->offset, + .render.offset = state->offset, }; GskVulkanPipelineType pipeline_type; @@ -379,7 +379,7 @@ gsk_vulkan_render_pass_add_repeating_linear_gradient_node (GskVulkanRenderPass GskVulkanPipelineType pipeline_type; GskVulkanOp op = { .render.node = node, - .render.offset = self->offset, + .render.offset = state->offset, }; if (gsk_linear_gradient_node_get_n_color_stops (node) > GSK_VULKAN_LINEAR_GRADIENT_PIPELINE_MAX_COLOR_STOPS) @@ -412,7 +412,7 @@ gsk_vulkan_render_pass_add_border_node (GskVulkanRenderPass *self, GskVulkanPipelineType pipeline_type; GskVulkanOp op = { .render.node = node, - .render.offset = self->offset, + .render.offset = state->offset, }; if (gsk_vulkan_clip_contains_rect (&state->clip, &node->bounds)) @@ -440,7 +440,7 @@ gsk_vulkan_render_pass_add_texture_node (GskVulkanRenderPass *self, GskVulkanPipelineType pipeline_type; GskVulkanOp op = { .render.node = node, - .render.offset = self->offset, + .render.offset = state->offset, }; if (gsk_vulkan_clip_contains_rect (&state->clip, &node->bounds)) @@ -468,7 +468,7 @@ gsk_vulkan_render_pass_add_inset_shadow_node (GskVulkanRenderPass *self, GskVulkanPipelineType pipeline_type; GskVulkanOp op = { .render.node = node, - .render.offset = self->offset, + .render.offset = state->offset, }; if (gsk_inset_shadow_node_get_blur_radius (node) > 0) @@ -498,7 +498,7 @@ gsk_vulkan_render_pass_add_outset_shadow_node (GskVulkanRenderPass *self, GskVulkanPipelineType pipeline_type; GskVulkanOp op = { .render.node = node, - .render.offset = self->offset, + .render.offset = state->offset, }; if (gsk_outset_shadow_node_get_blur_radius (node) > 0) @@ -528,7 +528,6 @@ gsk_vulkan_render_pass_add_transform_node (GskVulkanRenderPass *self, GskRenderNode *child; GskTransform *transform; graphene_vec2_t old_scale; - graphene_point_t old_offset; float scale_x; float scale_y; graphene_vec2_t scale; @@ -550,11 +549,10 @@ gsk_vulkan_render_pass_add_transform_node (GskVulkanRenderPass *self, { float dx, dy; gsk_transform_to_translate (transform, &dx, &dy); - self->offset.x += dx; - self->offset.y += dy; - gsk_vulkan_render_pass_add_node (self, render, state, child); - self->offset.x -= dx; - self->offset.y -= dy; + new_state = *state; + new_state.offset.x += dx; + new_state.offset.y += dy; + gsk_vulkan_render_pass_add_node (self, render, &new_state, child); } return TRUE; @@ -604,7 +602,7 @@ gsk_vulkan_render_pass_add_transform_node (GskVulkanRenderPass *self, break; } - transform = gsk_transform_transform (gsk_transform_translate (NULL, &self->offset), + transform = gsk_transform_transform (gsk_transform_translate (NULL, &state->offset), transform); if (!gsk_vulkan_clip_transform (&new_state.clip, &state->clip, transform, &child->bounds)) @@ -615,8 +613,7 @@ gsk_vulkan_render_pass_add_transform_node (GskVulkanRenderPass *self, gsk_vulkan_render_pass_append_push_constants (self, node, &new_state); - old_offset = self->offset; - self->offset = *graphene_point_zero (); + new_state.offset = *graphene_point_zero (); graphene_vec2_init_from_vec2 (&old_scale, &self->scale); graphene_vec2_init (&scale, fabs (scale_x), fabs (scale_y)); graphene_vec2_multiply (&self->scale, &scale, &self->scale); @@ -626,7 +623,6 @@ gsk_vulkan_render_pass_add_transform_node (GskVulkanRenderPass *self, gsk_vulkan_render_pass_append_push_constants (self, node, state); graphene_vec2_init_from_vec2 (&self->scale, &old_scale); - self->offset = old_offset; gsk_transform_unref (transform); @@ -642,7 +638,7 @@ gsk_vulkan_render_pass_add_opacity_node (GskVulkanRenderPass *self, GskVulkanPipelineType pipeline_type; GskVulkanOp op = { .render.node = node, - .render.offset = self->offset, + .render.offset = state->offset, }; if (gsk_vulkan_clip_contains_rect (&state->clip, &node->bounds)) @@ -670,7 +666,7 @@ gsk_vulkan_render_pass_add_color_matrix_node (GskVulkanRenderPass *self, GskVulkanPipelineType pipeline_type; GskVulkanOp op = { .render.node = node, - .render.offset = self->offset, + .render.offset = state->offset, }; if (gsk_vulkan_clip_contains_rect (&state->clip, &node->bounds)) @@ -699,7 +695,7 @@ gsk_vulkan_render_pass_add_clip_node (GskVulkanRenderPass *self, graphene_rect_t clip; graphene_rect_offset_r (gsk_clip_node_get_clip (node), - self->offset.x, self->offset.y, + state->offset.x, state->offset.y, &clip); if (!gsk_vulkan_clip_intersect_rect (&new_state.clip, &state->clip, &clip)) @@ -708,6 +704,7 @@ gsk_vulkan_render_pass_add_clip_node (GskVulkanRenderPass *self, if (new_state.clip.type == GSK_VULKAN_CLIP_ALL_CLIPPED) return TRUE; + new_state.offset = state->offset; graphene_matrix_init_from_matrix (&new_state.mvp, &state->mvp); gsk_vulkan_render_pass_append_push_constants (self, node, &new_state); @@ -729,7 +726,7 @@ gsk_vulkan_render_pass_add_rounded_clip_node (GskVulkanRenderPass *self, GskRoundedRect clip; clip = *gsk_rounded_clip_node_get_clip (node); - gsk_rounded_rect_offset (&clip, self->offset.x, self->offset.y); + gsk_rounded_rect_offset (&clip, state->offset.x, state->offset.y); if (!gsk_vulkan_clip_intersect_rounded_rect (&new_state.clip, &state->clip, &clip)) FALLBACK ("Failed to find intersection between clip of type %u and rounded rectangle", state->clip.type); @@ -737,6 +734,7 @@ gsk_vulkan_render_pass_add_rounded_clip_node (GskVulkanRenderPass *self, if (new_state.clip.type == GSK_VULKAN_CLIP_ALL_CLIPPED) return TRUE; + new_state.offset = state->offset; graphene_matrix_init_from_matrix (&new_state.mvp, &state->mvp); gsk_vulkan_render_pass_append_push_constants (self, node, &new_state); @@ -757,7 +755,7 @@ gsk_vulkan_render_pass_add_repeat_node (GskVulkanRenderPass *self, GskVulkanPipelineType pipeline_type; GskVulkanOp op = { .render.node = node, - .render.offset = self->offset, + .render.offset = state->offset, }; if (graphene_rect_get_area (gsk_repeat_node_get_child_bounds (node)) == 0) @@ -788,7 +786,7 @@ gsk_vulkan_render_pass_add_blend_node (GskVulkanRenderPass *self, GskVulkanPipelineType pipeline_type; GskVulkanOp op = { .render.node = node, - .render.offset = self->offset, + .render.offset = state->offset, }; if (gsk_vulkan_clip_contains_rect (&state->clip, &node->bounds)) @@ -815,7 +813,7 @@ gsk_vulkan_render_pass_add_cross_fade_node (GskVulkanRenderPass *self, { GskVulkanOp op = { .render.node = node, - .render.offset = self->offset, + .render.offset = state->offset, }; GskVulkanPipelineType pipeline_type; @@ -843,7 +841,7 @@ gsk_vulkan_render_pass_add_text_node (GskVulkanRenderPass *self, { GskVulkanOp op = { .render.node = node, - .render.offset = self->offset, + .render.offset = state->offset, }; GskVulkanPipelineType pipeline_type; const PangoGlyphInfo *glyphs; @@ -937,7 +935,7 @@ gsk_vulkan_render_pass_add_blur_node (GskVulkanRenderPass *self, GskVulkanPipelineType pipeline_type; GskVulkanOp op = { .render.node = node, - .render.offset = self->offset, + .render.offset = state->offset, }; if (gsk_vulkan_clip_contains_rect (&state->clip, &node->bounds)) @@ -1056,12 +1054,11 @@ gsk_vulkan_render_pass_add (GskVulkanRenderPass *self, ORTHO_FAR_PLANE); graphene_matrix_multiply (&mvp, &projection, &state.mvp); gsk_vulkan_clip_init_empty (&state.clip, &self->viewport); + state.offset = *graphene_point_zero (); gsk_vulkan_render_pass_append_push_constants (self, node, &state); gsk_vulkan_render_pass_add_node (self, render, &state, node); - - self->offset = GRAPHENE_POINT_INIT (0, 0); } static GskVulkanImage * |