[gtk+/wip/matthiasc/pipeline-layouts: 4/4] vulkan: Drop GskVulkanPipelineLayout
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/matthiasc/pipeline-layouts: 4/4] vulkan: Drop GskVulkanPipelineLayout
- Date: Fri, 22 Sep 2017 17:32:54 +0000 (UTC)
commit aede999309807f0124215b586b43bb5a5dbfe37a
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]