Browse Source

Vk: use Containers::Iterable in DescriptorSetLayoutCreateInfo.

Same as the previous commit in MeshTools -- allows to pass a
Containers::Array<DescriptorSetLayoutBinding> to it without having to
form a list of references first.
pull/592/head
Vladimír Vondruš 4 years ago
parent
commit
0f4f14bb00
  1. 5
      src/Magnum/Vk/DescriptorSetLayout.cpp
  2. 14
      src/Magnum/Vk/DescriptorSetLayoutCreateInfo.h
  3. 1
      src/Magnum/Vk/Test/DescriptorSetLayoutTest.cpp
  4. 2
      src/Magnum/Vk/Test/DescriptorSetLayoutVkTest.cpp

5
src/Magnum/Vk/DescriptorSetLayout.cpp

@ -28,6 +28,7 @@
#include <Corrade/Containers/ArrayView.h>
#include <Corrade/Containers/AnyReference.h>
#include <Corrade/Containers/Iterable.h>
#include <Corrade/Utility/Algorithms.h>
#include "Magnum/Vk/Assert.h"
@ -90,7 +91,7 @@ DescriptorSetLayoutBinding& DescriptorSetLayoutBinding::operator=(DescriptorSetL
return *this;
}
DescriptorSetLayoutCreateInfo::DescriptorSetLayoutCreateInfo(const Containers::ArrayView<const Containers::AnyReference<const DescriptorSetLayoutBinding>> bindings, const Flags flags): _info{} {
DescriptorSetLayoutCreateInfo::DescriptorSetLayoutCreateInfo(const Containers::Iterable<const DescriptorSetLayoutBinding> bindings, const Flags flags): _info{} {
/* Check the total count of immutable samplers to allocate them all in a
contiguous memory location. Also check if we have any binding flags. If
yes, we have to create an additional array and put a structure into the
@ -146,7 +147,7 @@ DescriptorSetLayoutCreateInfo::DescriptorSetLayoutCreateInfo(const Containers::A
}
}
DescriptorSetLayoutCreateInfo::DescriptorSetLayoutCreateInfo(const std::initializer_list<Containers::AnyReference<const DescriptorSetLayoutBinding>> bindings, const Flags flags): DescriptorSetLayoutCreateInfo{Containers::arrayView(bindings), flags} {}
DescriptorSetLayoutCreateInfo::DescriptorSetLayoutCreateInfo(const std::initializer_list<Containers::AnyReference<const DescriptorSetLayoutBinding>> bindings, const Flags flags): DescriptorSetLayoutCreateInfo{Containers::Iterable<const DescriptorSetLayoutBinding>{bindings}, flags} {}
DescriptorSetLayoutCreateInfo::DescriptorSetLayoutCreateInfo(NoInitT) noexcept {}

14
src/Magnum/Vk/DescriptorSetLayoutCreateInfo.h

@ -46,6 +46,14 @@
#include "Magnum/Vk/Vk.h"
#include "Magnum/Vk/Vulkan.h"
#ifdef MAGNUM_BUILD_DEPRECATED
/* DescriptorSetLayoutCreateInfo constructor used to take an
ArrayView<Reference<DescriptorSetLayoutBinding>>, now it's through the
Iterable class. Include it explicitly until people learn to include it
themselves. */
#include <Corrade/Containers/Iterable.h>
#endif
namespace Magnum { namespace Vk {
/**
@ -315,8 +323,12 @@ class MAGNUM_VK_EXPORT DescriptorSetLayoutCreateInfo {
* - `pBindingFlags` to a list of all
* @ref DescriptorSetLayoutBinding::flags() from @p bindings
*/
explicit DescriptorSetLayoutCreateInfo(Containers::ArrayView<const Containers::AnyReference<const DescriptorSetLayoutBinding>> bindings, Flags flags = {});
explicit DescriptorSetLayoutCreateInfo(Containers::Iterable<const DescriptorSetLayoutBinding> bindings, Flags flags = {});
/** @overload */
/* Iterable takes std::initializer_list itself but having it also here
allows to do stuff like `DescriptorSetLayoutCreateInfo{a, b}` and
(admittedly weird) `DescriptorSetLayoutCreateInfo{}` as well. */
explicit DescriptorSetLayoutCreateInfo(std::initializer_list<Containers::AnyReference<const DescriptorSetLayoutBinding>> bindings, Flags flags = {});
/**

1
src/Magnum/Vk/Test/DescriptorSetLayoutTest.cpp

@ -24,6 +24,7 @@
*/
#include <new>
#include <Corrade/Containers/Iterable.h>
#include <Corrade/TestSuite/Tester.h>
#include "Magnum/Vk/DescriptorSetLayoutCreateInfo.h"

2
src/Magnum/Vk/Test/DescriptorSetLayoutVkTest.cpp

@ -23,6 +23,8 @@
DEALINGS IN THE SOFTWARE.
*/
#include <Corrade/Containers/Iterable.h>
#include "Magnum/Vk/DescriptorSetLayoutCreateInfo.h"
#include "Magnum/Vk/DescriptorType.h"
#include "Magnum/Vk/Result.h"

Loading…
Cancel
Save