]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/vulkan/texture_backend.cpp
Check the flat qualifier from the correct member
[libs/gl.git] / source / backends / vulkan / texture_backend.cpp
index 5b73749884892aad06f69589648e4bad16b663aa..db420991ee1ebf17861c8b26c6aa4666f49b93fd 100644 (file)
@@ -49,9 +49,13 @@ void VulkanTexture::allocate()
        const Texture &self = *static_cast<const Texture *>(this);
        const VulkanFunctions &vk = device.get_functions();
 
+       VkFormat vk_format = static_cast<VkFormat>(get_vulkan_pixelformat(self.storage_fmt));
+       VkFormatProperties props;
+       vk.GetPhysicalDeviceFormatProperties(vk_format, props);
+
        VkImageCreateInfo image_info = { };
        image_info.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
-       image_info.format = static_cast<VkFormat>(get_vulkan_pixelformat(self.storage_fmt));
+       image_info.format = vk_format;
        image_info.extent.width = 1;
        image_info.extent.height = 1;
        image_info.extent.depth = 1;
@@ -63,6 +67,7 @@ void VulkanTexture::allocate()
        image_info.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
 
        image_info.usage = VK_IMAGE_USAGE_TRANSFER_SRC_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT|VK_IMAGE_USAGE_SAMPLED_BIT;
+
        PixelComponents comp = get_components(self.storage_fmt);
        if(comp==DEPTH_COMPONENT || comp==STENCIL_INDEX)
                image_info.usage |= VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT;
@@ -71,6 +76,9 @@ void VulkanTexture::allocate()
 
        fill_image_info(&image_info);
 
+       if((props.optimalTilingFeatures&VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT) && image_info.samples==VK_SAMPLE_COUNT_1_BIT)
+               image_info.usage |= VK_IMAGE_USAGE_STORAGE_BIT;
+
        /* SwapChainTexture may have already provided the image.  Create_info is
        filled anyway because some of its fields are used for view_info. */
        if(!handle)