X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbackends%2Fvulkan%2Ftexture_backend.cpp;h=ec6d504732f9f0a13055eff1f42086d2fe4858a7;hb=eddb5cfd959eaa202ee6f95cd2049349ec920829;hp=dd19c63664b88658fe06917798742bbcbb4fd2f5;hpb=7b0a38db12c3d1aacb59520a3f4baa16d9ec0048;p=libs%2Fgl.git diff --git a/source/backends/vulkan/texture_backend.cpp b/source/backends/vulkan/texture_backend.cpp index dd19c636..ec6d5047 100644 --- a/source/backends/vulkan/texture_backend.cpp +++ b/source/backends/vulkan/texture_backend.cpp @@ -49,7 +49,7 @@ void VulkanTexture::allocate() image_info.extent.width = 1; image_info.extent.height = 1; image_info.extent.depth = 1; - image_info.mipLevels = 1; + image_info.mipLevels = self.n_levels; image_info.arrayLayers = 1; image_info.samples = VK_SAMPLE_COUNT_1_BIT; image_info.tiling = VK_IMAGE_TILING_OPTIMAL; @@ -73,7 +73,7 @@ void VulkanTexture::allocate() memory_id = device.get_allocator().allocate(handle, DEVICE_MEMORY); // Trigger a layout transition if the image is used before uploading data. - change_layout(0, -1, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, true); + change_layout(-1, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, true); } VkImageViewCreateInfo view_info = { }; @@ -137,15 +137,17 @@ void VulkanTexture::stage_pixels(void *staging, const void *data, size_t count) } } -void VulkanTexture::generate_mipmap_levels(unsigned n_levels) +void VulkanTexture::generate_mipmap() { + unsigned n_levels = static_cast(this)->n_levels; + TransferQueue &tq = device.get_transfer_queue(); for(unsigned i=0; i+1(this)->storage_fmt)); - if(n_levels>0) - device.get_synchronizer().split_image_mipmap(handle, aspect, n_levels); + const Texture &self = *static_cast(this); + + unsigned aspect = get_vulkan_aspect(get_components(self.storage_fmt)); + if(level>=0) + device.get_synchronizer().split_image_mipmap(handle, aspect, self.n_levels); device.get_synchronizer().change_image_layout(handle, aspect, level, layout, discard); }