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/ArrayView.h>
#include <Corrade/Containers/AnyReference.h> #include <Corrade/Containers/AnyReference.h>
#include <Corrade/Containers/Iterable.h>
#include <Corrade/Utility/Algorithms.h> #include <Corrade/Utility/Algorithms.h>
#include "Magnum/Vk/Assert.h" #include "Magnum/Vk/Assert.h"
@ -90,7 +91,7 @@ DescriptorSetLayoutBinding& DescriptorSetLayoutBinding::operator=(DescriptorSetL
return *this; 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 /* 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 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 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 {} DescriptorSetLayoutCreateInfo::DescriptorSetLayoutCreateInfo(NoInitT) noexcept {}

14
src/Magnum/Vk/DescriptorSetLayoutCreateInfo.h

@ -46,6 +46,14 @@
#include "Magnum/Vk/Vk.h" #include "Magnum/Vk/Vk.h"
#include "Magnum/Vk/Vulkan.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 { namespace Magnum { namespace Vk {
/** /**
@ -315,8 +323,12 @@ class MAGNUM_VK_EXPORT DescriptorSetLayoutCreateInfo {
* - `pBindingFlags` to a list of all * - `pBindingFlags` to a list of all
* @ref DescriptorSetLayoutBinding::flags() from @p bindings * @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 */ /** @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 = {}); 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 <new>
#include <Corrade/Containers/Iterable.h>
#include <Corrade/TestSuite/Tester.h> #include <Corrade/TestSuite/Tester.h>
#include "Magnum/Vk/DescriptorSetLayoutCreateInfo.h" #include "Magnum/Vk/DescriptorSetLayoutCreateInfo.h"

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

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

Loading…
Cancel
Save