X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fbackends%2Fvulkan%2Fpipelinestate_backend.cpp;h=419a7e4c149545b3de9ce19cd211da7bef5e563d;hb=c89c1fb972fae2cb2f720cb3ec6cf8238ae8d2e1;hp=013e34c2636a9e995ab64d9815bc53e14dc80f41;hpb=2a2917f41f02fa12e9354616d76bf45c9b5bf3e6;p=libs%2Fgl.git diff --git a/source/backends/vulkan/pipelinestate_backend.cpp b/source/backends/vulkan/pipelinestate_backend.cpp index 013e34c2..419a7e4c 100644 --- a/source/backends/vulkan/pipelinestate_backend.cpp +++ b/source/backends/vulkan/pipelinestate_backend.cpp @@ -59,6 +59,8 @@ void VulkanPipelineState::update() const { t.used = self.shprog->uses_texture_binding(t.binding); changed_sets |= 1<<(t.binding>>20); + if(t.texture && t.level>=0) + t.texture->refresh_mip_views(); if(t.sampler) t.sampler->refresh(); t.changed = false; @@ -280,6 +282,7 @@ uint64_t VulkanPipelineState::compute_descriptor_set_hash(unsigned index) const result = hash_update<64>(result, t.binding); result = hash_update<64>(result, reinterpret_cast(t.texture)); result = hash_update<64>(result, reinterpret_cast(t.sampler)); + result = hash_update<64>(result, t.level); } return result; @@ -334,7 +337,10 @@ unsigned VulkanPipelineState::fill_descriptor_writes(unsigned index, vector>20)==index) { image_ptr->sampler = handle_cast<::VkSampler>(t.sampler->handle); - image_ptr->imageView = handle_cast<::VkImageView>(t.texture->view_handle); + if(t.level<0) + image_ptr->imageView = handle_cast<::VkImageView>(t.texture->view_handle); + else + image_ptr->imageView = handle_cast<::VkImageView>(t.texture->mip_view_handles[t.level]); image_ptr->imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; write_ptr->sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;