[gtk+] vulkan: Drop GskVulkanPipelineLayout



commit 8ad0539cf75b55bcf4ea7b1fa87f6b01f06180eb
Author: Matthias Clasen <mclasen redhat com>
Date:   Fri Sep 22 13:30:26 2017 -0400

    vulkan: Drop GskVulkanPipelineLayout
    
    We already move the descriptor set layout out of it,
    so we can just as well keep the pipeline layouts in
    the render object as well, and get rid of this extra
    object. Update all callers.

 gsk/gskvulkanblendpipeline.c                 |    5 +-
 gsk/gskvulkanblendpipelineprivate.h          |    3 +-
 gsk/gskvulkanblurpipeline.c                  |    5 +-
 gsk/gskvulkanblurpipelineprivate.h           |    3 +-
 gsk/gskvulkanborderpipeline.c                |    9 +-
 gsk/gskvulkanborderpipelineprivate.h         |    3 +-
 gsk/gskvulkanboxshadowpipeline.c             |    9 +-
 gsk/gskvulkanboxshadowpipelineprivate.h      |    3 +-
 gsk/gskvulkancolorpipeline.c                 |    5 +-
 gsk/gskvulkancolorpipelineprivate.h          |    3 +-
 gsk/gskvulkancolortextpipeline.c             |    5 +-
 gsk/gskvulkancolortextpipelineprivate.h      |    3 +-
 gsk/gskvulkaneffectpipeline.c                |    5 +-
 gsk/gskvulkaneffectpipelineprivate.h         |    3 +-
 gsk/gskvulkanlineargradientpipeline.c        |    5 +-
 gsk/gskvulkanlineargradientpipelineprivate.h |    3 +-
 gsk/gskvulkanpipeline.c                      |  106 +++++---------------------
 gsk/gskvulkanpipelineprivate.h               |   16 +---
 gsk/gskvulkanrender.c                        |   32 ++++++---
 gsk/gskvulkanrenderpass.c                    |    6 +-
 gsk/gskvulkanrenderpassprivate.h             |    2 +-
 gsk/gskvulkantextpipeline.c                  |    9 +-
 gsk/gskvulkantextpipelineprivate.h           |    7 +-
 23 files changed, 101 insertions(+), 149 deletions(-)
---
diff --git a/gsk/gskvulkanblendpipeline.c b/gsk/gskvulkanblendpipeline.c
index 8a98fbc..6d939ca 100644
--- a/gsk/gskvulkanblendpipeline.c
+++ b/gsk/gskvulkanblendpipeline.c
@@ -76,11 +76,12 @@ gsk_vulkan_blend_pipeline_init (GskVulkanBlendPipeline *self)
 }
 
 GskVulkanPipeline *
-gsk_vulkan_blend_pipeline_new (GskVulkanPipelineLayout *layout,
+gsk_vulkan_blend_pipeline_new (GdkVulkanContext        *context,
+                               VkPipelineLayout         layout,
                                const char              *shader_name,
                                VkRenderPass             render_pass)
 {
-  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_BLEND_PIPELINE, layout, shader_name, render_pass);
+  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_BLEND_PIPELINE, context, layout, shader_name, render_pass);
 }
 
 gsize
diff --git a/gsk/gskvulkanblendpipelineprivate.h b/gsk/gskvulkanblendpipelineprivate.h
index 2d8bed5..eb47198 100644
--- a/gsk/gskvulkanblendpipelineprivate.h
+++ b/gsk/gskvulkanblendpipelineprivate.h
@@ -13,7 +13,8 @@ typedef struct _GskVulkanBlendPipelineLayout GskVulkanBlendPipelineLayout;
 
 G_DECLARE_FINAL_TYPE (GskVulkanBlendPipeline, gsk_vulkan_blend_pipeline, GSK, VULKAN_BLEND_PIPELINE, 
GskVulkanPipeline)
 
-GskVulkanPipeline *     gsk_vulkan_blend_pipeline_new                   (GskVulkanPipelineLayout *       
layout,
+GskVulkanPipeline *     gsk_vulkan_blend_pipeline_new                   (GdkVulkanContext               
*context,
+                                                                         VkPipelineLayout                
layout,
                                                                          const char                     
*shader_name,
                                                                          VkRenderPass                    
render_pass);
 
diff --git a/gsk/gskvulkanblurpipeline.c b/gsk/gskvulkanblurpipeline.c
index 779bf81..6e9bff1 100644
--- a/gsk/gskvulkanblurpipeline.c
+++ b/gsk/gskvulkanblurpipeline.c
@@ -83,11 +83,12 @@ gsk_vulkan_blur_pipeline_init (GskVulkanBlurPipeline *self)
 }
 
 GskVulkanPipeline *
-gsk_vulkan_blur_pipeline_new (GskVulkanPipelineLayout *layout,
+gsk_vulkan_blur_pipeline_new (GdkVulkanContext        *context,
+                              VkPipelineLayout         layout,
                               const char              *shader_name,
                               VkRenderPass             render_pass)
 {
-  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_BLUR_PIPELINE, layout, shader_name, render_pass);
+  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_BLUR_PIPELINE, context, layout, shader_name, render_pass);
 }
 
 gsize
diff --git a/gsk/gskvulkanblurpipelineprivate.h b/gsk/gskvulkanblurpipelineprivate.h
index 44b139d..2fc4273 100644
--- a/gsk/gskvulkanblurpipelineprivate.h
+++ b/gsk/gskvulkanblurpipelineprivate.h
@@ -13,7 +13,8 @@ typedef struct _GskVulkanBlurPipelineLayout GskVulkanBlurPipelineLayout;
 
 G_DECLARE_FINAL_TYPE (GskVulkanBlurPipeline, gsk_vulkan_blur_pipeline, GSK, VULKAN_BLUR_PIPELINE, 
GskVulkanPipeline)
 
-GskVulkanPipeline *     gsk_vulkan_blur_pipeline_new                   (GskVulkanPipelineLayout *layout,
+GskVulkanPipeline *     gsk_vulkan_blur_pipeline_new                   (GdkVulkanContext        *context,
+                                                                        VkPipelineLayout         layout,
                                                                         const char              *shader_name,
                                                                         VkRenderPass             
render_pass);
 
diff --git a/gsk/gskvulkanborderpipeline.c b/gsk/gskvulkanborderpipeline.c
index ab6509b..a0da439 100644
--- a/gsk/gskvulkanborderpipeline.c
+++ b/gsk/gskvulkanborderpipeline.c
@@ -115,11 +115,12 @@ gsk_vulkan_border_pipeline_init (GskVulkanBorderPipeline *self)
 }
 
 GskVulkanPipeline *
-gsk_vulkan_border_pipeline_new (GskVulkanPipelineLayout *layout,
-                               const char              *shader_name,
-                               VkRenderPass             render_pass)
+gsk_vulkan_border_pipeline_new (GdkVulkanContext        *context,
+                                VkPipelineLayout         layout,
+                                const char              *shader_name,
+                                VkRenderPass             render_pass)
 {
-  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_BORDER_PIPELINE, layout, shader_name, render_pass);
+  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_BORDER_PIPELINE, context, layout, shader_name, 
render_pass);
 }
 
 gsize
diff --git a/gsk/gskvulkanborderpipelineprivate.h b/gsk/gskvulkanborderpipelineprivate.h
index de6d176..d826792 100644
--- a/gsk/gskvulkanborderpipelineprivate.h
+++ b/gsk/gskvulkanborderpipelineprivate.h
@@ -14,7 +14,8 @@ typedef struct _GskVulkanBorderPipelineLayout GskVulkanBorderPipelineLayout;
 
 G_DECLARE_FINAL_TYPE (GskVulkanBorderPipeline, gsk_vulkan_border_pipeline, GSK, VULKAN_BORDER_PIPELINE, 
GskVulkanPipeline)
 
-GskVulkanPipeline *     gsk_vulkan_border_pipeline_new                  (GskVulkanPipelineLayout *       
layout,
+GskVulkanPipeline *     gsk_vulkan_border_pipeline_new                  (GdkVulkanContext               
*context,
+                                                                         VkPipelineLayout                
layout,
                                                                          const char                     
*shader_name,
                                                                          VkRenderPass                    
render_pass);
 
diff --git a/gsk/gskvulkanboxshadowpipeline.c b/gsk/gskvulkanboxshadowpipeline.c
index f526126..fb27217 100644
--- a/gsk/gskvulkanboxshadowpipeline.c
+++ b/gsk/gskvulkanboxshadowpipeline.c
@@ -111,11 +111,12 @@ gsk_vulkan_box_shadow_pipeline_init (GskVulkanBoxShadowPipeline *self)
 }
 
 GskVulkanPipeline *
-gsk_vulkan_box_shadow_pipeline_new (GskVulkanPipelineLayout *layout,
-                               const char              *shader_name,
-                               VkRenderPass             render_pass)
+gsk_vulkan_box_shadow_pipeline_new (GdkVulkanContext        *context,
+                                    VkPipelineLayout         layout,
+                                    const char              *shader_name,
+                                    VkRenderPass             render_pass)
 {
-  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_BOX_SHADOW_PIPELINE, layout, shader_name, render_pass);
+  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_BOX_SHADOW_PIPELINE, context, layout, shader_name, 
render_pass);
 }
 
 gsize
diff --git a/gsk/gskvulkanboxshadowpipelineprivate.h b/gsk/gskvulkanboxshadowpipelineprivate.h
index 930480d..975338b 100644
--- a/gsk/gskvulkanboxshadowpipelineprivate.h
+++ b/gsk/gskvulkanboxshadowpipelineprivate.h
@@ -14,7 +14,8 @@ typedef struct _GskVulkanBoxShadowPipelineLayout GskVulkanBoxShadowPipelineLayou
 
 G_DECLARE_FINAL_TYPE (GskVulkanBoxShadowPipeline, gsk_vulkan_box_shadow_pipeline, GSK, 
VULKAN_BOX_SHADOW_PIPELINE, GskVulkanPipeline)
 
-GskVulkanPipeline *     gsk_vulkan_box_shadow_pipeline_new              (GskVulkanPipelineLayout *       
layout,
+GskVulkanPipeline *     gsk_vulkan_box_shadow_pipeline_new              (GdkVulkanContext               
*context,
+                                                                         VkPipelineLayout                
layout,
                                                                          const char                     
*shader_name,
                                                                          VkRenderPass                    
render_pass);
 
diff --git a/gsk/gskvulkancolorpipeline.c b/gsk/gskvulkancolorpipeline.c
index 29e44ce..cd6867a 100644
--- a/gsk/gskvulkancolorpipeline.c
+++ b/gsk/gskvulkancolorpipeline.c
@@ -76,11 +76,12 @@ gsk_vulkan_color_pipeline_init (GskVulkanColorPipeline *self)
 }
 
 GskVulkanPipeline *
-gsk_vulkan_color_pipeline_new (GskVulkanPipelineLayout *layout,
+gsk_vulkan_color_pipeline_new (GdkVulkanContext         *context,
+                               VkPipelineLayout         layout,
                                const char              *shader_name,
                                VkRenderPass             render_pass)
 {
-  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_COLOR_PIPELINE, layout, shader_name, render_pass);
+  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_COLOR_PIPELINE, context, layout, shader_name, render_pass);
 }
 
 gsize
diff --git a/gsk/gskvulkancolorpipelineprivate.h b/gsk/gskvulkancolorpipelineprivate.h
index 07e6382..b9ae514 100644
--- a/gsk/gskvulkancolorpipelineprivate.h
+++ b/gsk/gskvulkancolorpipelineprivate.h
@@ -13,7 +13,8 @@ typedef struct _GskVulkanColorPipelineLayout GskVulkanColorPipelineLayout;
 
 G_DECLARE_FINAL_TYPE (GskVulkanColorPipeline, gsk_vulkan_color_pipeline, GSK, VULKAN_COLOR_PIPELINE, 
GskVulkanPipeline)
 
-GskVulkanPipeline *     gsk_vulkan_color_pipeline_new                   (GskVulkanPipelineLayout *       
layout,
+GskVulkanPipeline *     gsk_vulkan_color_pipeline_new                   (GdkVulkanContext               
*context,
+                                                                         VkPipelineLayout                
layout,
                                                                          const char                     
*shader_name,
                                                                          VkRenderPass                    
render_pass);
 
diff --git a/gsk/gskvulkancolortextpipeline.c b/gsk/gskvulkancolortextpipeline.c
index 42b4e8c..a35e734 100644
--- a/gsk/gskvulkancolortextpipeline.c
+++ b/gsk/gskvulkancolortextpipeline.c
@@ -76,11 +76,12 @@ gsk_vulkan_color_text_pipeline_init (GskVulkanColorTextPipeline *self)
 }
 
 GskVulkanPipeline *
-gsk_vulkan_color_text_pipeline_new (GskVulkanPipelineLayout *layout,
+gsk_vulkan_color_text_pipeline_new (GdkVulkanContext        *context,
+                                    VkPipelineLayout         layout,
                                     const char              *shader_name,
                                     VkRenderPass             render_pass)
 {
-  return gsk_vulkan_pipeline_new_full (GSK_TYPE_VULKAN_COLOR_TEXT_PIPELINE, layout, shader_name, render_pass,
+  return gsk_vulkan_pipeline_new_full (GSK_TYPE_VULKAN_COLOR_TEXT_PIPELINE, context, layout, shader_name, 
render_pass,
                                        VK_BLEND_FACTOR_SRC_ALPHA, VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA);
 }
 
diff --git a/gsk/gskvulkancolortextpipelineprivate.h b/gsk/gskvulkancolortextpipelineprivate.h
index 8c4a8c3..bf116c3 100644
--- a/gsk/gskvulkancolortextpipelineprivate.h
+++ b/gsk/gskvulkancolortextpipelineprivate.h
@@ -14,7 +14,8 @@ typedef struct _GskVulkanColorTextPipelineLayout GskVulkanColorTextPipelineLayou
 
 G_DECLARE_FINAL_TYPE (GskVulkanColorTextPipeline, gsk_vulkan_color_text_pipeline, GSK, 
VULKAN_COLOR_TEXT_PIPELINE, GskVulkanPipeline)
 
-GskVulkanPipeline *     gsk_vulkan_color_text_pipeline_new                   (GskVulkanPipelineLayout        
*layout,
+GskVulkanPipeline *     gsk_vulkan_color_text_pipeline_new                   (GdkVulkanContext               
*context,
+                                                                              VkPipelineLayout               
 layout,
                                                                               const char                     
*shader_name,
                                                                               VkRenderPass                   
 render_pass);
 
diff --git a/gsk/gskvulkaneffectpipeline.c b/gsk/gskvulkaneffectpipeline.c
index 8572da5..1db9ec6 100644
--- a/gsk/gskvulkaneffectpipeline.c
+++ b/gsk/gskvulkaneffectpipeline.c
@@ -108,11 +108,12 @@ gsk_vulkan_effect_pipeline_init (GskVulkanEffectPipeline *self)
 }
 
 GskVulkanPipeline *
-gsk_vulkan_effect_pipeline_new (GskVulkanPipelineLayout *layout,
+gsk_vulkan_effect_pipeline_new (GdkVulkanContext        *context,
+                                VkPipelineLayout         layout,
                                 const char              *shader_name,
                                 VkRenderPass             render_pass)
 {
-  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_EFFECT_PIPELINE, layout, shader_name, render_pass);
+  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_EFFECT_PIPELINE, context, layout, shader_name, 
render_pass);
 }
 
 gsize
diff --git a/gsk/gskvulkaneffectpipelineprivate.h b/gsk/gskvulkaneffectpipelineprivate.h
index d2bff81..8e3b976 100644
--- a/gsk/gskvulkaneffectpipelineprivate.h
+++ b/gsk/gskvulkaneffectpipelineprivate.h
@@ -13,7 +13,8 @@ typedef struct _GskVulkanEffectPipelineLayout GskVulkanEffectPipelineLayout;
 
 G_DECLARE_FINAL_TYPE (GskVulkanEffectPipeline, gsk_vulkan_effect_pipeline, GSK, VULKAN_EFFECT_PIPELINE, 
GskVulkanPipeline)
 
-GskVulkanPipeline *     gsk_vulkan_effect_pipeline_new                  (GskVulkanPipelineLayout        
*layout,
+GskVulkanPipeline *     gsk_vulkan_effect_pipeline_new                  (GdkVulkanContext               
*context,
+                                                                         VkPipelineLayout                
layout,
                                                                          const char                     
*shader_name,
                                                                          VkRenderPass                    
render_pass);
 
diff --git a/gsk/gskvulkanlineargradientpipeline.c b/gsk/gskvulkanlineargradientpipeline.c
index cc69949..058a2f8 100644
--- a/gsk/gskvulkanlineargradientpipeline.c
+++ b/gsk/gskvulkanlineargradientpipeline.c
@@ -159,11 +159,12 @@ gsk_vulkan_linear_gradient_pipeline_init (GskVulkanLinearGradientPipeline *self)
 }
 
 GskVulkanPipeline *
-gsk_vulkan_linear_gradient_pipeline_new (GskVulkanPipelineLayout *layout,
+gsk_vulkan_linear_gradient_pipeline_new (GdkVulkanContext        *context,
+                                         VkPipelineLayout         layout,
                                          const char              *shader_name,
                                          VkRenderPass             render_pass)
 {
-  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_LINEAR_GRADIENT_PIPELINE, layout, shader_name, 
render_pass);
+  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_LINEAR_GRADIENT_PIPELINE, context, layout, shader_name, 
render_pass);
 }
 
 gsize
diff --git a/gsk/gskvulkanlineargradientpipelineprivate.h b/gsk/gskvulkanlineargradientpipelineprivate.h
index 50b986e..71b6559 100644
--- a/gsk/gskvulkanlineargradientpipelineprivate.h
+++ b/gsk/gskvulkanlineargradientpipelineprivate.h
@@ -16,7 +16,8 @@ typedef struct _GskVulkanLinearGradientPipelineLayout GskVulkanLinearGradientPip
 
 G_DECLARE_FINAL_TYPE (GskVulkanLinearGradientPipeline, gsk_vulkan_linear_gradient_pipeline, GSK, 
VULKAN_LINEAR_GRADIENT_PIPELINE, GskVulkanPipeline)
 
-GskVulkanPipeline *     gsk_vulkan_linear_gradient_pipeline_new         (GskVulkanPipelineLayout *       
layout,
+GskVulkanPipeline *     gsk_vulkan_linear_gradient_pipeline_new         (GdkVulkanContext               
*context,
+                                                                         VkPipelineLayout                
layout,
                                                                          const char                     
*shader_name,
                                                                          VkRenderPass                    
render_pass);
 
diff --git a/gsk/gskvulkanpipeline.c b/gsk/gskvulkanpipeline.c
index 6a834c5..38d5a57 100644
--- a/gsk/gskvulkanpipeline.c
+++ b/gsk/gskvulkanpipeline.c
@@ -9,21 +9,14 @@
 
 typedef struct _GskVulkanPipelinePrivate GskVulkanPipelinePrivate;
 
-struct _GskVulkanPipelineLayout
-{
-  volatile gint ref_count;
-  GdkVulkanContext *vulkan;
-
-  VkPipelineLayout pipeline_layout;
-};
-
 struct _GskVulkanPipelinePrivate
 {
   GObject parent_instance;
 
-  GskVulkanPipelineLayout *layout;
+  GdkVulkanContext *context;
 
   VkPipeline pipeline;
+  VkPipelineLayout layout;
 
   GskVulkanShader *vertex_shader;
   GskVulkanShader *fragment_shader;
@@ -35,18 +28,17 @@ static void
 gsk_vulkan_pipeline_finalize (GObject *gobject)
 {
   GskVulkanPipelinePrivate *priv = gsk_vulkan_pipeline_get_instance_private (GSK_VULKAN_PIPELINE (gobject));
+  VkDevice device;
 
-  VkDevice device = gdk_vulkan_context_get_device (priv->layout->vulkan);
+  device = gdk_vulkan_context_get_device (priv->context);
 
   vkDestroyPipeline (device,
                      priv->pipeline,
                      NULL);
-  
+
   g_clear_pointer (&priv->fragment_shader, gsk_vulkan_shader_free);
   g_clear_pointer (&priv->vertex_shader, gsk_vulkan_shader_free);
 
-  g_clear_pointer (&priv->layout, gsk_vulkan_pipeline_layout_unref);
-
   G_OBJECT_CLASS (gsk_vulkan_pipeline_parent_class)->finalize (gobject);
 }
 
@@ -63,18 +55,20 @@ gsk_vulkan_pipeline_init (GskVulkanPipeline *self)
 
 GskVulkanPipeline *
 gsk_vulkan_pipeline_new (GType                    pipeline_type,
-                         GskVulkanPipelineLayout *layout,
+                         GdkVulkanContext        *context,
+                         VkPipelineLayout         layout,
                          const char              *shader_name,
                          VkRenderPass             render_pass)
 {
-  return gsk_vulkan_pipeline_new_full (pipeline_type, layout, shader_name, render_pass,
+  return gsk_vulkan_pipeline_new_full (pipeline_type, context, layout, shader_name, render_pass,
                                        VK_BLEND_FACTOR_ONE,
                                        VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA);
 }
 
 GskVulkanPipeline *
 gsk_vulkan_pipeline_new_full (GType                    pipeline_type,
-                              GskVulkanPipelineLayout *layout,
+                              GdkVulkanContext        *context,
+                              VkPipelineLayout         layout,
                               const char              *shader_name,
                               VkRenderPass             render_pass,
                               VkBlendFactor            srcBlendFactor,
@@ -82,11 +76,10 @@ gsk_vulkan_pipeline_new_full (GType                    pipeline_type,
 {
   GskVulkanPipelinePrivate *priv;
   GskVulkanPipeline *self;
-  
   VkDevice device;
 
   g_return_val_if_fail (g_type_is_a (pipeline_type, GSK_TYPE_VULKAN_PIPELINE), NULL);
-  g_return_val_if_fail (layout != NULL, NULL);
+  g_return_val_if_fail (layout != VK_NULL_HANDLE, NULL);
   g_return_val_if_fail (shader_name != NULL, NULL);
   g_return_val_if_fail (render_pass != VK_NULL_HANDLE, NULL);
 
@@ -94,12 +87,13 @@ gsk_vulkan_pipeline_new_full (GType                    pipeline_type,
 
   priv = gsk_vulkan_pipeline_get_instance_private (self);
 
-  priv->layout = gsk_vulkan_pipeline_layout_ref (layout);
+  device = gdk_vulkan_context_get_device (context);
 
-  device = gdk_vulkan_context_get_device (layout->vulkan);
+  priv->context = context;
+  priv->layout = layout;
 
-  priv->vertex_shader = gsk_vulkan_shader_new_from_resource (layout->vulkan, GSK_VULKAN_SHADER_VERTEX, 
shader_name, NULL);
-  priv->fragment_shader = gsk_vulkan_shader_new_from_resource (layout->vulkan, GSK_VULKAN_SHADER_FRAGMENT, 
shader_name, NULL);
+  priv->vertex_shader = gsk_vulkan_shader_new_from_resource (context, GSK_VULKAN_SHADER_VERTEX, shader_name, 
NULL);
+  priv->fragment_shader = gsk_vulkan_shader_new_from_resource (context, GSK_VULKAN_SHADER_FRAGMENT, 
shader_name, NULL);
 
   GSK_VK_CHECK (vkCreateGraphicsPipelines, device,
                                            VK_NULL_HANDLE,
@@ -166,7 +160,7 @@ gsk_vulkan_pipeline_new_full (GType                    pipeline_type,
                                                        VK_DYNAMIC_STATE_SCISSOR
                                                    },
                                                },
-                                               .layout = gsk_vulkan_pipeline_layout_get_pipeline_layout 
(priv->layout),
+                                               .layout = priv->layout,
                                                .renderPass = render_pass,
                                                .subpass = 0,
                                                .basePipelineHandle = VK_NULL_HANDLE,
@@ -191,69 +185,5 @@ gsk_vulkan_pipeline_get_pipeline_layout (GskVulkanPipeline *self)
 {
   GskVulkanPipelinePrivate *priv = gsk_vulkan_pipeline_get_instance_private (self);
 
-  return priv->layout->pipeline_layout;
-}
-
-/*** GskVulkanPipelineLayout ***/
-
-GskVulkanPipelineLayout *
-gsk_vulkan_pipeline_layout_new (GdkVulkanContext      *context,
-                                guint                  layout_count,
-                                VkDescriptorSetLayout *descriptor_set_layout)
-{
-  GskVulkanPipelineLayout *self;
-  VkDevice device;
-
-  self = g_slice_new0 (GskVulkanPipelineLayout);
-  self->ref_count = 1;
-  self->vulkan = g_object_ref (context);
-
-  device = gdk_vulkan_context_get_device (context);
-
-  GSK_VK_CHECK (vkCreatePipelineLayout, device,
-                                        &(VkPipelineLayoutCreateInfo) {
-                                            .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
-                                            .setLayoutCount = layout_count,
-                                            .pSetLayouts = descriptor_set_layout,
-                                            .pushConstantRangeCount = 
gst_vulkan_push_constants_get_range_count (),
-                                            .pPushConstantRanges = gst_vulkan_push_constants_get_ranges ()
-                                        },
-                                        NULL,
-                                        &self->pipeline_layout);
-
-  return self;
-}
-
-GskVulkanPipelineLayout *
-gsk_vulkan_pipeline_layout_ref (GskVulkanPipelineLayout *self)
-{
-  self->ref_count++;
-
-  return self;
-}
-
-void
-gsk_vulkan_pipeline_layout_unref (GskVulkanPipelineLayout *self)
-{
-  VkDevice device;
-
-  self->ref_count--;
-
-  if (self->ref_count > 0)
-    return;
-
-  device = gdk_vulkan_context_get_device (self->vulkan);
-
-  vkDestroyPipelineLayout (device,
-                           self->pipeline_layout,
-                           NULL);
-
-  g_slice_free (GskVulkanPipelineLayout, self);
-}
-
-
-VkPipelineLayout
-gsk_vulkan_pipeline_layout_get_pipeline_layout (GskVulkanPipelineLayout *self)
-{
-  return self->pipeline_layout;
+  return priv->layout;
 }
diff --git a/gsk/gskvulkanpipelineprivate.h b/gsk/gskvulkanpipelineprivate.h
index 648f04d..33660e1 100644
--- a/gsk/gskvulkanpipelineprivate.h
+++ b/gsk/gskvulkanpipelineprivate.h
@@ -7,8 +7,6 @@
 
 G_BEGIN_DECLS
 
-typedef struct _GskVulkanPipelineLayout GskVulkanPipelineLayout;
-
 #define GSK_TYPE_VULKAN_PIPELINE (gsk_vulkan_pipeline_get_type ())
 
 G_DECLARE_DERIVABLE_TYPE (GskVulkanPipeline, gsk_vulkan_pipeline, GSK, VULKAN_PIPELINE, GObject)
@@ -34,21 +32,15 @@ gsk_vulkan_handle_result (VkResult    res,
 
 #define GSK_VK_CHECK(func, ...) gsk_vulkan_handle_result (func (__VA_ARGS__), G_STRINGIFY (func))
 
-GskVulkanPipelineLayout *       gsk_vulkan_pipeline_layout_new          (GdkVulkanContext               
*context,
-                                                                         guint                           
layout_count,
-                                                                         VkDescriptorSetLayout          
*descriptor_set_layout);
-GskVulkanPipelineLayout *       gsk_vulkan_pipeline_layout_ref          (GskVulkanPipelineLayout        
*self);
-void                            gsk_vulkan_pipeline_layout_unref        (GskVulkanPipelineLayout        
*self);
-
-VkPipelineLayout                gsk_vulkan_pipeline_layout_get_pipeline_layout
-                                                                        (GskVulkanPipelineLayout        
*self);
 
 GskVulkanPipeline *     gsk_vulkan_pipeline_new                         (GType                           
pipeline_type,
-                                                                         GskVulkanPipelineLayout        
*layout,
+                                                                         GdkVulkanContext               
*context,
+                                                                         VkPipelineLayout                
layout,
                                                                          const char                     
*shader_name,
                                                                          VkRenderPass                    
render_pass);
 GskVulkanPipeline *     gsk_vulkan_pipeline_new_full                    (GType                           
pipeline_type,
-                                                                         GskVulkanPipelineLayout        
*layout,
+                                                                         GdkVulkanContext               
*context,
+                                                                         VkPipelineLayout                
layout,
                                                                          const char                     
*shader_name,
                                                                          VkRenderPass                    
render_pass,
                                                                          VkBlendFactor                   
srcBlendFactor,
diff --git a/gsk/gskvulkanrender.c b/gsk/gskvulkanrender.c
index 5a811cf..e21bef6 100644
--- a/gsk/gskvulkanrender.c
+++ b/gsk/gskvulkanrender.c
@@ -19,6 +19,7 @@
 #include "gskvulkaneffectpipelineprivate.h"
 #include "gskvulkanlineargradientpipelineprivate.h"
 #include "gskvulkantextpipelineprivate.h"
+#include "gskvulkanpushconstantsprivate.h"
 
 #define ORTHO_NEAR_PLANE        -10000
 #define ORTHO_FAR_PLANE          10000
@@ -41,7 +42,7 @@ struct _GskVulkanRender
   VkFence fence;
   VkRenderPass render_pass;
   VkDescriptorSetLayout descriptor_set_layout;
-  GskVulkanPipelineLayout *layout[3]; /* indexed by number of textures */
+  VkPipelineLayout pipeline_layout[3]; /* indexed by number of textures */
   GskVulkanUploader *uploader;
   GskVulkanBuffer *vertex_buffer;
 
@@ -201,7 +202,17 @@ gsk_vulkan_render_new (GskRenderer      *renderer,
         self->descriptor_set_layout,
         self->descriptor_set_layout
       };
-      self->layout[i] = gsk_vulkan_pipeline_layout_new (self->vulkan, i, layouts);
+
+      GSK_VK_CHECK (vkCreatePipelineLayout, device,
+                                            &(VkPipelineLayoutCreateInfo) {
+                                                .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
+                                                .setLayoutCount = i,
+                                                .pSetLayouts = layouts,
+                                                .pushConstantRangeCount = 
gst_vulkan_push_constants_get_range_count (),
+                                                .pPushConstantRanges = gst_vulkan_push_constants_get_ranges 
()
+                                            },
+                                            NULL,
+                                            &self->pipeline_layout[i]);
     }
 
   self->uploader = gsk_vulkan_uploader_new (self->vulkan, self->command_pool);
@@ -345,7 +356,7 @@ gsk_vulkan_render_get_pipeline (GskVulkanRender       *self,
   static const struct {
     const char *name;
     guint num_textures;
-    GskVulkanPipeline * (* create_func) (GskVulkanPipelineLayout *layout, const char *name, VkRenderPass 
render_pass);
+    GskVulkanPipeline * (* create_func) (GdkVulkanContext *context, VkPipelineLayout layout, const char 
*name, VkRenderPass render_pass);
   } pipeline_info[GSK_VULKAN_N_PIPELINES] = {
     { "blend",                      1, gsk_vulkan_blend_pipeline_new },
     { "blend-clip",                 1, gsk_vulkan_blend_pipeline_new },
@@ -382,11 +393,10 @@ gsk_vulkan_render_get_pipeline (GskVulkanRender       *self,
   g_return_val_if_fail (type < GSK_VULKAN_N_PIPELINES, NULL);
 
   if (self->pipelines[type] == NULL)
-    {
-      self->pipelines[type] = pipeline_info[type].create_func 
(self->layout[pipeline_info[type].num_textures],
-                                                               pipeline_info[type].name,
-                                                               self->render_pass);
-    }
+    self->pipelines[type] = pipeline_info[type].create_func (self->vulkan,
+                                                             
self->pipeline_layout[pipeline_info[type].num_textures],
+                                                             pipeline_info[type].name,
+                                                             self->render_pass);
 
   return self->pipelines[type];
 }
@@ -570,7 +580,7 @@ gsk_vulkan_render_draw (GskVulkanRender   *self,
 
       for (l = self->render_passes; l; l = l->next)
         {
-          gsk_vulkan_render_pass_draw (l->data, self, self->vertex_buffer, 3, self->layout, command_buffer);
+          gsk_vulkan_render_pass_draw (l->data, self, self->vertex_buffer, 3, self->pipeline_layout, 
command_buffer);
         }
 
       vkCmdEndRenderPass (command_buffer);
@@ -664,7 +674,9 @@ gsk_vulkan_render_free (GskVulkanRender *self)
   g_clear_pointer (&self->uploader, gsk_vulkan_uploader_free);
 
   for (i = 0; i < 3; i++)
-    g_clear_pointer (&self->layout[i], gsk_vulkan_pipeline_layout_unref);
+    vkDestroyPipelineLayout (device,
+                             self->pipeline_layout[i],
+                             NULL);
 
   vkDestroyRenderPass (device,
                        self->render_pass,
diff --git a/gsk/gskvulkanrenderpass.c b/gsk/gskvulkanrenderpass.c
index 245c753..9fe3764 100644
--- a/gsk/gskvulkanrenderpass.c
+++ b/gsk/gskvulkanrenderpass.c
@@ -1035,7 +1035,7 @@ gsk_vulkan_render_pass_draw (GskVulkanRenderPass     *self,
                              GskVulkanRender         *render,
                              GskVulkanBuffer         *vertex_buffer,
                              guint                    layout_count,
-                             GskVulkanPipelineLayout **layout,
+                             VkPipelineLayout        *pipeline_layout,
                              VkCommandBuffer          command_buffer)
 {
   GskVulkanPipeline *current_pipeline = NULL;
@@ -1316,8 +1316,8 @@ gsk_vulkan_render_pass_draw (GskVulkanRenderPass     *self,
         case GSK_VULKAN_OP_PUSH_VERTEX_CONSTANTS:
           for (int i = 0; i < layout_count; i++)
             gsk_vulkan_push_constants_push (&op->constants.constants,
-                                            command_buffer, 
-                                            gsk_vulkan_pipeline_layout_get_pipeline_layout (layout[i]));
+                                            command_buffer,
+                                            pipeline_layout[i]);
           break;
 
         default:
diff --git a/gsk/gskvulkanrenderpassprivate.h b/gsk/gskvulkanrenderpassprivate.h
index d381899..56bc9ad 100644
--- a/gsk/gskvulkanrenderpassprivate.h
+++ b/gsk/gskvulkanrenderpassprivate.h
@@ -37,7 +37,7 @@ void                    gsk_vulkan_render_pass_draw                     (GskVulk
                                                                          GskVulkanRender        *render,
                                                                          GskVulkanBuffer        
*vertex_buffer,
                                                                          guint                   
layout_count,
-                                                                         GskVulkanPipelineLayout **layout,
+                                                                         VkPipelineLayout       
*pipeline_layout,
                                                                          VkCommandBuffer         
command_buffer);
 
 G_END_DECLS
diff --git a/gsk/gskvulkantextpipeline.c b/gsk/gskvulkantextpipeline.c
index e3295c4..2539ad3 100644
--- a/gsk/gskvulkantextpipeline.c
+++ b/gsk/gskvulkantextpipeline.c
@@ -83,11 +83,12 @@ gsk_vulkan_text_pipeline_init (GskVulkanTextPipeline *self)
 }
 
 GskVulkanPipeline *
-gsk_vulkan_text_pipeline_new (GskVulkanPipelineLayout *layout,
-                               const char              *shader_name,
-                               VkRenderPass             render_pass)
+gsk_vulkan_text_pipeline_new (GdkVulkanContext        *context,
+                              VkPipelineLayout         layout,
+                              const char              *shader_name,
+                              VkRenderPass             render_pass)
 {
-  return gsk_vulkan_pipeline_new_full (GSK_TYPE_VULKAN_TEXT_PIPELINE, layout, shader_name, render_pass,
+  return gsk_vulkan_pipeline_new_full (GSK_TYPE_VULKAN_TEXT_PIPELINE, context, layout, shader_name, 
render_pass,
                                        VK_BLEND_FACTOR_SRC_ALPHA, VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA);
 }
 
diff --git a/gsk/gskvulkantextpipelineprivate.h b/gsk/gskvulkantextpipelineprivate.h
index 09a58c0..7701fbb 100644
--- a/gsk/gskvulkantextpipelineprivate.h
+++ b/gsk/gskvulkantextpipelineprivate.h
@@ -14,9 +14,10 @@ typedef struct _GskVulkanTextPipelineLayout GskVulkanTextPipelineLayout;
 
 G_DECLARE_FINAL_TYPE (GskVulkanTextPipeline, gsk_vulkan_text_pipeline, GSK, VULKAN_TEXT_PIPELINE, 
GskVulkanPipeline)
 
-GskVulkanPipeline *     gsk_vulkan_text_pipeline_new                   (GskVulkanPipelineLayout *       
layout,
-                                                                        const char                     
*shader_name,
-                                                                        VkRenderPass                    
render_pass);
+GskVulkanPipeline *     gsk_vulkan_text_pipeline_new                   (GdkVulkanContext              
*context,
+                                                                        VkPipelineLayout               
layout,
+                                                                        const char                    
*shader_name,
+                                                                        VkRenderPass                   
render_pass);
 
 gsize                   gsk_vulkan_text_pipeline_count_vertex_data     (GskVulkanTextPipeline         
*pipeline,
                                                                         int                            
num_instances);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]