From: Benjamin Otte Date: Sun, 25 Jun 2023 03:25:01 +0000 (+0200) Subject: vulkan: Use new ops for TextureScale nodes X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~60^2~83 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=1d9ad55c54bd2a94d3c2fc6ac1e633fde3916891;p=gtk4.git vulkan: Use new ops for TextureScale nodes --- diff --git a/gsk/vulkan/gskvulkanrenderpass.c b/gsk/vulkan/gskvulkanrenderpass.c index 500afc1d8f..f3c09e1a4a 100644 --- a/gsk/vulkan/gskvulkanrenderpass.c +++ b/gsk/vulkan/gskvulkanrenderpass.c @@ -54,7 +54,6 @@ typedef enum { GSK_VULKAN_OP_FALLBACK, GSK_VULKAN_OP_FALLBACK_CLIP, GSK_VULKAN_OP_FALLBACK_ROUNDED_CLIP, - GSK_VULKAN_OP_TEXTURE_SCALE, GSK_VULKAN_OP_COLOR, GSK_VULKAN_OP_LINEAR_GRADIENT, GSK_VULKAN_OP_OPACITY, @@ -571,11 +570,10 @@ gsk_vulkan_render_pass_add_texture_scale_node (GskVulkanRenderPass *self, GskRenderNode *node) { GskVulkanPipelineType pipeline_type; - GskVulkanOpRender op = { - .type = GSK_VULKAN_OP_TEXTURE_SCALE, - .node = node, - .offset = state->offset, - }; + GskVulkanImage *image; + GskVulkanRenderer *renderer; + GskVulkanRenderSampler sampler; + GdkTexture *texture; if (gsk_vulkan_clip_contains_rect (&state->clip, &state->offset, &node->bounds)) pipeline_type = GSK_VULKAN_PIPELINE_TEXTURE; @@ -584,8 +582,36 @@ gsk_vulkan_render_pass_add_texture_scale_node (GskVulkanRenderPass *self, else pipeline_type = GSK_VULKAN_PIPELINE_TEXTURE_CLIP_ROUNDED; - op.pipeline = gsk_vulkan_render_pass_get_pipeline (self, render, pipeline_type); - gsk_vulkan_render_pass_add_op (self, (GskVulkanOp *) &op); + renderer = GSK_VULKAN_RENDERER (gsk_vulkan_render_get_renderer (render)); + texture = gsk_texture_scale_node_get_texture (node); + switch (gsk_texture_scale_node_get_filter (node)) + { + default: + g_assert_not_reached (); + case GSK_SCALING_FILTER_LINEAR: + case GSK_SCALING_FILTER_TRILINEAR: + sampler = GSK_VULKAN_SAMPLER_DEFAULT; + break; + case GSK_SCALING_FILTER_NEAREST: + sampler = GSK_VULKAN_SAMPLER_NEAREST; + break; + } + image = gsk_vulkan_renderer_get_texture_image (renderer, texture); + if (image == NULL) + { + image = gsk_vulkan_upload_op_init_texture (gsk_vulkan_render_pass_alloc_op (self, gsk_vulkan_upload_op_size ()), + self->vulkan, + texture); + gsk_vulkan_renderer_add_texture_image (renderer, texture, image); + } + + gsk_vulkan_texture_op_init (gsk_vulkan_render_pass_alloc_op (self, gsk_vulkan_texture_op_size ()), + gsk_vulkan_render_pass_get_pipeline (self, render, pipeline_type), + image, + sampler, + &node->bounds, + &state->offset, + &GRAPHENE_RECT_INIT(0, 0, 1, 1)); return TRUE; } @@ -1647,16 +1673,6 @@ gsk_vulkan_render_op_upload (GskVulkanOp *op_, } break; - case GSK_VULKAN_OP_TEXTURE_SCALE: - { - op->render.source = gsk_vulkan_renderer_ref_texture_image (GSK_VULKAN_RENDERER (gsk_vulkan_render_get_renderer (render)), - gsk_texture_scale_node_get_texture (op->render.node), - uploader); - op->render.source_rect = GRAPHENE_RECT_INIT(0, 0, 1, 1); - gsk_vulkan_render_add_cleanup_image (render, op->render.source); - } - break; - case GSK_VULKAN_OP_OPACITY: { GskRenderNode *child = gsk_opacity_node_get_child (op->render.node); @@ -1874,7 +1890,6 @@ gsk_vulkan_render_op_count_vertex_data (GskVulkanOp *op_, case GSK_VULKAN_OP_FALLBACK: case GSK_VULKAN_OP_FALLBACK_CLIP: case GSK_VULKAN_OP_FALLBACK_ROUNDED_CLIP: - case GSK_VULKAN_OP_TEXTURE_SCALE: case GSK_VULKAN_OP_REPEAT: case GSK_VULKAN_OP_COLOR: case GSK_VULKAN_OP_LINEAR_GRADIENT: @@ -1939,7 +1954,6 @@ gsk_vulkan_render_op_collect_vertex_data (GskVulkanOp *op_, case GSK_VULKAN_OP_FALLBACK: case GSK_VULKAN_OP_FALLBACK_CLIP: case GSK_VULKAN_OP_FALLBACK_ROUNDED_CLIP: - case GSK_VULKAN_OP_TEXTURE_SCALE: gsk_vulkan_texture_pipeline_collect_vertex_data (GSK_VULKAN_TEXTURE_PIPELINE (op->render.pipeline), data + op->render.vertex_offset, op->render.image_descriptor, @@ -2202,25 +2216,6 @@ gsk_vulkan_render_op_reserve_descriptor_sets (GskVulkanOp *op_, } break; - case GSK_VULKAN_OP_TEXTURE_SCALE: - if (op->render.source) - { - op->render.image_descriptor[0] = gsk_vulkan_render_get_image_descriptor (render, op->render.source); - switch (gsk_texture_scale_node_get_filter (op->render.node)) - { - default: - g_assert_not_reached (); - case GSK_SCALING_FILTER_LINEAR: - case GSK_SCALING_FILTER_TRILINEAR: - op->render.image_descriptor[1] = gsk_vulkan_render_get_sampler_descriptor (render, GSK_VULKAN_SAMPLER_DEFAULT); - break; - case GSK_SCALING_FILTER_NEAREST: - op->render.image_descriptor[1] = gsk_vulkan_render_get_sampler_descriptor (render, GSK_VULKAN_SAMPLER_NEAREST); - break; - } - } - break; - case GSK_VULKAN_OP_REPEAT: if (op->render.source) { @@ -2323,7 +2318,6 @@ gsk_vulkan_render_op_get_pipeline (GskVulkanOp *op_) case GSK_VULKAN_OP_FALLBACK: case GSK_VULKAN_OP_FALLBACK_CLIP: case GSK_VULKAN_OP_FALLBACK_ROUNDED_CLIP: - case GSK_VULKAN_OP_TEXTURE_SCALE: case GSK_VULKAN_OP_REPEAT: case GSK_VULKAN_OP_COLOR: case GSK_VULKAN_OP_LINEAR_GRADIENT: @@ -2362,7 +2356,6 @@ gsk_vulkan_render_op_command (GskVulkanOp *op_, case GSK_VULKAN_OP_FALLBACK: case GSK_VULKAN_OP_FALLBACK_CLIP: case GSK_VULKAN_OP_FALLBACK_ROUNDED_CLIP: - case GSK_VULKAN_OP_TEXTURE_SCALE: case GSK_VULKAN_OP_REPEAT: if (!op->render.source) break;