[Piglit] [v3 09/11] ext_memory_object: Support for creating simple vulkan pipelines

Topi Pohjolainen topi.pohjolainen at gmail.com
Thu Dec 21 12:02:52 UTC 2017


Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
---
 tests/spec/ext_memory_object/vk_common.c | 58 ++++++++++++++++++++++++++++++++
 tests/spec/ext_memory_object/vk_common.h | 17 ++++++++++
 2 files changed, 75 insertions(+)

diff --git a/tests/spec/ext_memory_object/vk_common.c b/tests/spec/ext_memory_object/vk_common.c
index 6e6458ce4..ba12bff07 100644
--- a/tests/spec/ext_memory_object/vk_common.c
+++ b/tests/spec/ext_memory_object/vk_common.c
@@ -595,3 +595,61 @@ vk_get_proc_addr_for_mem_fd(VkDevice dev)
 
 	return get_fd;
 }
+
+void
+vk_create_simple_pipeline(struct vk_core *core,
+			  const struct vk_image_layout *layout,
+			  const uint32_t *vs, unsigned vs_size,
+			  const uint32_t *fs, unsigned fs_size,
+			  struct vk_simple_pipeline *pipeline)
+{
+	pipeline->render_pass = vk_create_render_pass(
+		core->dev, layout->src_format, layout->num_samples,
+		layout->src_tiling == VK_IMAGE_TILING_OPTIMAL ?
+			VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL :
+			VK_IMAGE_LAYOUT_GENERAL,
+		layout->src_tiling == VK_IMAGE_TILING_OPTIMAL ?
+			VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL :
+			VK_IMAGE_LAYOUT_GENERAL);
+	if (pipeline->render_pass == VK_NULL_HANDLE)
+		goto fail;
+
+	pipeline->vs = vk_add_shader(core->dev, vs, vs_size);
+	if (pipeline->vs == VK_NULL_HANDLE)
+		goto fail;
+
+	pipeline->fs = vk_add_shader(core->dev, fs, fs_size);
+	if (pipeline->fs == VK_NULL_HANDLE)
+		goto fail;
+
+	pipeline->pipeline = vk_create_pipeline(
+				core, layout->w, layout->h, 1,
+				VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP,
+				8, VK_FORMAT_R32G32_SFLOAT,
+				pipeline->render_pass,
+				pipeline->fs, pipeline->vs);
+	if (pipeline->pipeline == VK_NULL_HANDLE)
+		goto fail;
+
+	return;
+
+fail:
+	vk_destroy_simple_pipeline(core->dev, pipeline);
+        memset(pipeline, 0, sizeof(*pipeline));
+}
+
+void
+vk_destroy_simple_pipeline(VkDevice dev, struct vk_simple_pipeline *pipeline)
+{
+	if (pipeline->pipeline != VK_NULL_HANDLE)
+	     vkDestroyPipeline(dev, pipeline->pipeline, NULL);
+
+	if (pipeline->vs != VK_NULL_HANDLE)
+	     vkDestroyShaderModule(dev, pipeline->vs, NULL);
+
+	if (pipeline->fs != VK_NULL_HANDLE)
+	     vkDestroyShaderModule(dev, pipeline->fs, NULL);
+
+	if (pipeline->render_pass != VK_NULL_HANDLE)
+	     vkDestroyRenderPass(dev, pipeline->render_pass, NULL);
+}
diff --git a/tests/spec/ext_memory_object/vk_common.h b/tests/spec/ext_memory_object/vk_common.h
index db4bbf20f..0efccf37a 100644
--- a/tests/spec/ext_memory_object/vk_common.h
+++ b/tests/spec/ext_memory_object/vk_common.h
@@ -39,6 +39,13 @@ struct vk_core {
 	VkQueue queue;
 };
 
+struct vk_simple_pipeline {
+        VkRenderPass render_pass;
+        VkPipeline pipeline;
+        VkShaderModule vs;
+        VkShaderModule fs;
+};
+
 struct vk_vertex_buffer {
 	VkBuffer buf;
 	VkDeviceMemory mem;
@@ -153,4 +160,14 @@ vk_get_proc_addr_for_image_mem_req(VkDevice dev);
 PFN_vkGetMemoryFdKHR
 vk_get_proc_addr_for_mem_fd(VkDevice dev);
 
+void
+vk_create_simple_pipeline(struct vk_core *core,
+			  const struct vk_image_layout *layout,
+			  const uint32_t *vs, unsigned vs_size,
+			  const uint32_t *fs, unsigned fs_size,
+			  struct vk_simple_pipeline *pipeline);
+
+void
+vk_destroy_simple_pipeline(VkDevice dev, struct vk_simple_pipeline *pipeline);
+
 #endif
-- 
2.14.1



More information about the Piglit mailing list