Skip to content

Commit 51c0943

Browse files
authored
Simplify unique extent check in RenderTarget<bindingType>::init functions (#1524)
1 parent b89bd2b commit 51c0943

1 file changed

Lines changed: 10 additions & 14 deletions

File tree

framework/rendering/render_target.h

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
#include "core/hpp_image.h"
2626
#include "core/hpp_image_view.h"
2727
#include "core/image.h"
28-
#include <vulkan/vulkan_hash.hpp> // provides std::hash specializations for Vulkan handle types, used in std::unordered_map and std::unordered_set
2928

3029
namespace vkb
3130
{
@@ -233,24 +232,21 @@ inline RenderTarget<bindingType>::RenderTarget(std::vector<ImageType> &&images)
233232
template <vkb::BindingType bindingType>
234233
inline void RenderTarget<bindingType>::init(std::vector<vkb::core::HPPImage> &&images_)
235234
{
235+
assert(!images_.empty());
236+
236237
device = &images_.back().get_device();
237238
images = std::move(images_);
238239

239240
// Returns the image extent as a vk::Extent2D structure from a vk::Extent3D
240241
auto get_image_extent = [](const vkb::core::HPPImage &image) { return vk::Extent2D{image.get_extent().width, image.get_extent().height}; };
241242

242-
// Constructs a set of unique image extents given a vector of images
243-
std::unordered_set<vk::Extent2D> unique_extent;
244-
std::ranges::transform(images, std::inserter(unique_extent, unique_extent.end()), get_image_extent);
245-
246-
// Allow only one extent size for a render target
247-
if (unique_extent.size() != 1)
243+
extent = get_image_extent(images.front());
244+
if (std::ranges::find_if(images,
245+
[extent = this->extent, &get_image_extent](const vkb::core::HPPImage &image) { return get_image_extent(image) != extent; }) != images.end())
248246
{
249247
throw vkb::common::HPPVulkanException{vk::Result::eErrorInitializationFailed, "Extent size is not unique"};
250248
}
251249

252-
extent = *unique_extent.begin();
253-
254250
for (auto &image : images)
255251
{
256252
if (image.get_type() != vk::ImageType::e2D)
@@ -282,6 +278,8 @@ inline RenderTarget<bindingType>::RenderTarget(std::vector<ImageViewType> &&imag
282278
template <vkb::BindingType bindingType>
283279
inline void RenderTarget<bindingType>::init(std::vector<vkb::core::HPPImageView> &&image_views)
284280
{
281+
assert(!image_views.empty());
282+
285283
device = &image_views.back().get_image().get_device();
286284
views = std::move(image_views);
287285

@@ -292,15 +290,13 @@ inline void RenderTarget<bindingType>::init(std::vector<vkb::core::HPPImageView>
292290
return vk::Extent2D{mip0_extent.width >> mip_level, mip0_extent.height >> mip_level};
293291
};
294292

295-
// Constructs a set of unique image extents given a vector of image views;
296293
// allow only one extent size for a render target
297-
std::unordered_set<vk::Extent2D> unique_extent;
298-
std::ranges::transform(views, std::inserter(unique_extent, unique_extent.end()), get_view_extent);
299-
if (unique_extent.size() != 1)
294+
extent = get_view_extent(views.front());
295+
if (std::ranges::find_if(views,
296+
[extent = this->extent, &get_view_extent](const vkb::core::HPPImageView &view) { return get_view_extent(view) != extent; }) != views.end())
300297
{
301298
throw vkb::common::HPPVulkanException{vk::Result::eErrorInitializationFailed, "Extent size is not unique"};
302299
}
303-
extent = *unique_extent.begin();
304300

305301
for (auto &view : views)
306302
{

0 commit comments

Comments
 (0)