diff --git a/WickedEngine/Utility/dds.h b/WickedEngine/Utility/dds.h index e45562f4f..b5092707c 100644 --- a/WickedEngine/Utility/dds.h +++ b/WickedEngine/Utility/dds.h @@ -807,14 +807,15 @@ namespace dds // returns the size of a specific slice at a specific mip level in bytes constexpr unsigned slice_pitch(unsigned mip) const { + const unsigned long long bpe = bits_per_element(); const unsigned long long blocksize = block_size(); - unsigned long long num_blocks_y = (width() + blocksize - 1) / blocksize; - unsigned long long num_elements_z = depth(); + unsigned long long num_blocks_x = (width() + blocksize - 1) / blocksize; + unsigned long long num_blocks_y = (height() + blocksize - 1) / blocksize; + num_blocks_x >>= mip; num_blocks_y >>= mip; - num_elements_z >>= mip; + num_blocks_x = num_blocks_x < 1 ? 1 : num_blocks_x; num_blocks_y = num_blocks_y < 1 ? 1 : num_blocks_y; - num_elements_z = num_elements_z < 1 ? 1 : num_elements_z; - return unsigned(row_pitch(mip) * num_blocks_y * num_elements_z); + return unsigned(num_blocks_x * num_blocks_y * bpe / 8ull); } }; diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp index c17dff07d..e180e745a 100644 --- a/WickedEngine/wiRenderer.cpp +++ b/WickedEngine/wiRenderer.cpp @@ -4899,6 +4899,12 @@ void UpdateRenderData( wi::profiler::EndRange(range); device->EventEnd(cmd); } + else if(vis.scene->impostors.GetCount() > 0 && vis.scene->objects.GetCount() == 0 && vis.scene->impostorBuffer.IsValid()) + { + device->ClearUAV(&vis.scene->impostorBuffer, 0, cmd); + barrier_stack.push_back(GPUBarrier::Buffer(&vis.scene->impostorBuffer, ResourceState::UNORDERED_ACCESS, ResourceState::SHADER_RESOURCE | ResourceState::INDIRECT_ARGUMENT)); + barrier_stack_flush(cmd); + } // Meshlets: if(vis.scene->instanceArraySize > 0 && vis.scene->meshletBuffer.IsValid()) diff --git a/WickedEngine/wiScene.cpp b/WickedEngine/wiScene.cpp index 111c6ef43..124eaf46f 100644 --- a/WickedEngine/wiScene.cpp +++ b/WickedEngine/wiScene.cpp @@ -4109,7 +4109,7 @@ namespace wi::scene } void Scene::RunImpostorUpdateSystem(wi::jobsystem::context& ctx) { - if (dt == 0) + if (instanceArrayMapped == nullptr) return; if (impostors.GetCount() > 0 && !impostorArray.IsValid()) diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index 33dd8ddb9..6dc12d37b 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -9,7 +9,7 @@ namespace wi::version // minor features, major updates, breaking compatibility changes const int minor = 71; // minor bug fixes, alterations, refactors, updates - const int revision = 602; + const int revision = 603; const std::string version_string = std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(revision);