[Piglit] [v3 09/11] ext_memory_object: Support for creating simple vulkan pipelines
Andres Rodriguez
andresx7 at gmail.com
Thu Dec 21 16:41:10 UTC 2017
On 2017-12-21 07:02 AM, Topi Pohjolainen wrote:
> 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)
> +{
Same as previous patch, make sure to initialize pipeline here.
With that fixed, patch is:
Reviewed-by: Andres Rodriguez <andresx7 at gmail.com>
> + 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
>
More information about the Piglit
mailing list