| 814 | } |
| 815 | |
| 816 | VkResult CreateTexture( |
| 817 | VkPhysicalDevice vk_physical_device, |
| 818 | VkDevice vk_device, |
| 819 | uint32_t imageWidth, |
| 820 | uint32_t imageHeight, |
| 821 | uint32_t imageDepth, |
| 822 | uint32_t imageLayers, |
| 823 | uint16_t imageMips, |
| 824 | VkSampleCountFlagBits vk_sample_count, |
| 825 | VkFormat vk_format, |
| 826 | VkImageTiling vk_tiling, |
| 827 | VkImageUsageFlags vk_usage, |
| 828 | VkMemoryPropertyFlags vk_memory_flags, |
| 829 | VkImageAspectFlags vk_aspect, |
| 830 | VulkanTexture* textureOut) |
| 831 | { |
| 832 | DeviceBuffer& device_buffer = textureOut->m_DeviceBuffer; |
| 833 | TextureType tex_type = textureOut->m_Base.m_Type; |
| 834 | |
| 835 | VkImageViewType vk_view_type = VK_IMAGE_VIEW_TYPE_2D; |
| 836 | |
| 837 | VkImageCreateInfo vk_image_create_info = {}; |
| 838 | vk_image_create_info.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; |
| 839 | vk_image_create_info.imageType = VK_IMAGE_TYPE_2D; |
| 840 | vk_image_create_info.extent.width = imageWidth; |
| 841 | vk_image_create_info.extent.height = imageHeight; |
| 842 | vk_image_create_info.extent.depth = imageDepth; |
| 843 | vk_image_create_info.mipLevels = imageMips; |
| 844 | vk_image_create_info.arrayLayers = imageLayers; |
| 845 | vk_image_create_info.format = vk_format; |
| 846 | vk_image_create_info.tiling = vk_tiling; |
| 847 | vk_image_create_info.initialLayout = textureOut->m_ImageLayout[0]; |
| 848 | vk_image_create_info.usage = vk_usage; |
| 849 | vk_image_create_info.samples = vk_sample_count; |
| 850 | vk_image_create_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; |
| 851 | vk_image_create_info.flags = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT; |
| 852 | |
| 853 | if (tex_type == TEXTURE_TYPE_CUBE_MAP) |
| 854 | { |
| 855 | assert(imageLayers == 6); |
| 856 | vk_image_create_info.flags |= VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT; |
| 857 | vk_view_type = VK_IMAGE_VIEW_TYPE_CUBE; |
| 858 | } |
| 859 | else if (tex_type == TEXTURE_TYPE_2D_ARRAY) |
| 860 | { |
| 861 | assert(imageLayers > 0); |
| 862 | vk_view_type = VK_IMAGE_VIEW_TYPE_2D_ARRAY; |
| 863 | } |
| 864 | else if (tex_type == TEXTURE_TYPE_3D || tex_type == TEXTURE_TYPE_IMAGE_3D || tex_type == TEXTURE_TYPE_TEXTURE_3D) |
| 865 | { |
| 866 | vk_image_create_info.imageType = VK_IMAGE_TYPE_3D; |
| 867 | vk_view_type = VK_IMAGE_VIEW_TYPE_3D; |
| 868 | } |
| 869 | |
| 870 | VkResult res = vkCreateImage(vk_device, &vk_image_create_info, 0, &textureOut->m_Handle.m_Image); |
| 871 | if (res != VK_SUCCESS) |
| 872 | { |
| 873 | return res; |
no test coverage detected