void anv_dump_image_to_ppm(struct anv_device *device, struct anv_image *image, unsigned miplevel, unsigned array_layer, const char *filename) { VkDevice vk_device = anv_device_to_handle(device); MAYBE_UNUSED VkResult result; VkExtent2D extent = { image->extent.width, image->extent.height }; for (unsigned i = 0; i < miplevel; i++) { extent.width = MAX2(1, extent.width / 2); extent.height = MAX2(1, extent.height / 2); } VkImage copy_image; result = anv_CreateImage(vk_device, &(VkImageCreateInfo) { .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, .imageType = VK_IMAGE_TYPE_2D, .format = VK_FORMAT_R8G8B8A8_UNORM, .extent = (VkExtent3D) { extent.width, extent.height, 1 }, .mipLevels = 1, .arrayLayers = 1, .samples = 1, .tiling = VK_IMAGE_TILING_LINEAR, .usage = VK_IMAGE_USAGE_TRANSFER_DST_BIT, .flags = 0, }, NULL, ©_image);
static VkResult create_pipeline(struct anv_device *device, uint32_t samples, struct nir_shader *vs_nir, struct nir_shader *fs_nir, const VkPipelineVertexInputStateCreateInfo *vi_state, const VkPipelineDepthStencilStateCreateInfo *ds_state, const VkPipelineColorBlendStateCreateInfo *cb_state, const VkAllocationCallbacks *alloc, bool use_repclear, struct anv_pipeline **pipeline) { VkDevice device_h = anv_device_to_handle(device); VkResult result; struct anv_shader_module vs_m = { .nir = vs_nir }; struct anv_shader_module fs_m = { .nir = fs_nir }; VkPipeline pipeline_h = VK_NULL_HANDLE; result = anv_graphics_pipeline_create(device_h, VK_NULL_HANDLE, &(VkGraphicsPipelineCreateInfo) { .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, .stageCount = fs_nir ? 2 : 1, .pStages = (VkPipelineShaderStageCreateInfo[]) { { .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, .stage = VK_SHADER_STAGE_VERTEX_BIT, .module = anv_shader_module_to_handle(&vs_m), .pName = "main", }, { .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, .stage = VK_SHADER_STAGE_FRAGMENT_BIT, .module = anv_shader_module_to_handle(&fs_m), .pName = "main", }, },