diff --git a/include/render/vulkan.h b/include/render/vulkan.h index 201e70f2f..faf9d0b59 100644 --- a/include/render/vulkan.h +++ b/include/render/vulkan.h @@ -278,19 +278,10 @@ struct wlr_vk_renderer { VkDescriptorSetLayout output_ds_srgb_layout; VkDescriptorSetLayout output_ds_lut3d_layout; VkSampler output_sampler_lut3d; - // descriptor set indicating dummy 1x1x1 image, for use in the lut3d slot - VkDescriptorSet output_ds_lut3d_dummy; - struct wlr_vk_descriptor_pool *output_ds_lut3d_dummy_pool; size_t last_output_pool_size; struct wl_list output_descriptor_pools; // wlr_vk_descriptor_pool.link - // dummy sampler to bind when output shader is not using a lookup table - VkImage dummy3d_image; - VkDeviceMemory dummy3d_mem; - VkImageView dummy3d_image_view; - bool dummy3d_image_transitioned; - VkSemaphore timeline_semaphore; uint64_t timeline_point; diff --git a/render/vulkan/pass.c b/render/vulkan/pass.c index 18699480f..ec8782b26 100644 --- a/render/vulkan/pass.c +++ b/render/vulkan/pass.c @@ -981,14 +981,6 @@ struct wlr_vk_render_pass *vulkan_begin_render_pass(struct wlr_vk_renderer *rend return NULL; } - if (!renderer->dummy3d_image_transitioned) { - renderer->dummy3d_image_transitioned = true; - vulkan_change_layout(cb->vk, renderer->dummy3d_image, - VK_IMAGE_LAYOUT_UNDEFINED, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, - 0, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, - VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, VK_ACCESS_SHADER_READ_BIT); - } - int width = buffer->wlr_buffer->width; int height = buffer->wlr_buffer->height; VkRect2D rect = { .extent = { width, height } }; diff --git a/render/vulkan/renderer.c b/render/vulkan/renderer.c index 58f88173f..8c51a8ae9 100644 --- a/render/vulkan/renderer.c +++ b/render/vulkan/renderer.c @@ -1131,10 +1131,6 @@ static void vulkan_destroy(struct wlr_renderer *wlr_renderer) { free(pipeline_layout); } - vkDestroyImageView(dev->dev, renderer->dummy3d_image_view, NULL); - vkDestroyImage(dev->dev, renderer->dummy3d_image, NULL); - vkFreeMemory(dev->dev, renderer->dummy3d_mem, NULL); - vkDestroySemaphore(dev->dev, renderer->timeline_semaphore, NULL); vkDestroyPipelineLayout(dev->dev, renderer->output_pipe_layout, NULL); vkDestroyDescriptorSetLayout(dev->dev, renderer->output_ds_srgb_layout, NULL); @@ -1987,105 +1983,6 @@ struct wlr_vk_pipeline_layout *get_or_create_pipeline_layout( } -/* The fragment shader for the blend->image subpass can be configured to either - * use or not a sampler3d lookup table; however, even if the shader does not use - * the sampler, a valid descriptor set should be bound. Create that here, linked to - * a 1x1x1 image. - */ -static bool init_dummy_images(struct wlr_vk_renderer *renderer) { - VkResult res; - VkDevice dev = renderer->dev->dev; - - VkFormat format = VK_FORMAT_R32G32B32A32_SFLOAT; - - VkImageCreateInfo img_info = { - .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, - .imageType = VK_IMAGE_TYPE_3D, - .format = format, - .mipLevels = 1, - .arrayLayers = 1, - .samples = VK_SAMPLE_COUNT_1_BIT, - .sharingMode = VK_SHARING_MODE_EXCLUSIVE, - .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED, - .extent = (VkExtent3D) { 1, 1, 1 }, - .tiling = VK_IMAGE_TILING_OPTIMAL, - .usage = VK_IMAGE_USAGE_SAMPLED_BIT, - }; - res = vkCreateImage(dev, &img_info, NULL, &renderer->dummy3d_image); - if (res != VK_SUCCESS) { - wlr_vk_error("vkCreateImage failed", res); - return false; - } - - VkMemoryRequirements mem_reqs = {0}; - vkGetImageMemoryRequirements(dev, renderer->dummy3d_image, &mem_reqs); - int mem_type_index = vulkan_find_mem_type(renderer->dev, - VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, mem_reqs.memoryTypeBits); - if (mem_type_index == -1) { - wlr_log(WLR_ERROR, "Failed to find suitable memory type"); - return false; - } - VkMemoryAllocateInfo mem_info = { - .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, - .allocationSize = mem_reqs.size, - .memoryTypeIndex = mem_type_index, - }; - res = vkAllocateMemory(dev, &mem_info, NULL, &renderer->dummy3d_mem); - if (res != VK_SUCCESS) { - wlr_vk_error("vkAllocateMemory failed", res); - return false; - } - res = vkBindImageMemory(dev, renderer->dummy3d_image, renderer->dummy3d_mem, 0); - if (res != VK_SUCCESS) { - wlr_vk_error("vkBindMemory failed", res); - return false; - } - - VkImageViewCreateInfo view_info = { - .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, - .viewType = VK_IMAGE_VIEW_TYPE_3D, - .format = format, - .components.r = VK_COMPONENT_SWIZZLE_IDENTITY, - .components.g = VK_COMPONENT_SWIZZLE_IDENTITY, - .components.b = VK_COMPONENT_SWIZZLE_IDENTITY, - .components.a = VK_COMPONENT_SWIZZLE_IDENTITY, - .subresourceRange = (VkImageSubresourceRange) { - .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, - .baseMipLevel = 0, - .levelCount = 1, - .baseArrayLayer = 0, - .layerCount = 1, - }, - .image = renderer->dummy3d_image, - }; - res = vkCreateImageView(dev, &view_info, NULL, &renderer->dummy3d_image_view); - if (res != VK_SUCCESS) { - wlr_vk_error("vkCreateImageView failed", res); - return false; - } - - renderer->output_ds_lut3d_dummy_pool = vulkan_alloc_texture_ds(renderer, - renderer->output_ds_lut3d_layout, &renderer->output_ds_lut3d_dummy); - if (!renderer->output_ds_lut3d_dummy_pool) { - wlr_log(WLR_ERROR, "Failed to allocate descriptor"); - return false; - } - VkDescriptorImageInfo ds_img_info = { - .imageView = renderer->dummy3d_image_view, - .imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, - }; - VkWriteDescriptorSet ds_write = { - .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, - .descriptorCount = 1, - .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - .dstSet = renderer->output_ds_lut3d_dummy, - .pImageInfo = &ds_img_info, - }; - vkUpdateDescriptorSets(dev, 1, &ds_write, 0, NULL); - - return true; -} - // Creates static render data, such as sampler, layouts and shader modules // for the given renderer. // Cleanup is done by destroying the renderer. @@ -2097,10 +1994,6 @@ static bool init_static_render_data(struct wlr_vk_renderer *renderer) { return false; } - if (!init_dummy_images(renderer)) { - return false; - } - // load vert module and tex frag module since they are needed to // initialize the tex pipeline VkShaderModuleCreateInfo sinfo = {