[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