Grindstone Game Engine
v0.2.0
An open source game engine and toolkit.
Toggle main menu visibility
Loading...
Searching...
No Matches
DescriptorSetLayout.hpp
1
#pragma once
2
3
#include <vector>
4
5
#include <Common/Hash.hpp>
6
#include "Formats.hpp"
7
8
namespace
Grindstone:: GraphicsAPI {
14
class
DescriptorSetLayout
{
15
public
:
16
struct
Binding
{
17
uint32_t bindingId;
18
uint32_t count;
19
BindingType type;
20
ShaderStageBit stages;
21
22
bool
operator==(
const
Binding
& o)
const
{
23
return
24
bindingId == o.bindingId &&
25
count == o.count &&
26
type == o.type &&
27
stages == o.stages;
28
}
29
30
bool
operator!=(
const
Binding
& o)
const
{
31
return
!(*
this
== o);
32
}
33
};
34
35
struct
CreateInfo
{
36
const
char
* debugName =
nullptr
;
37
Binding
* bindings =
nullptr
;
38
uint32_t bindingCount = 0;
39
40
bool
operator==(
const
CreateInfo
& o)
const
{
41
if
(bindingCount != o.bindingCount) {
42
return
false
;
43
}
44
45
for
(uint32_t i = 0; i < bindingCount; ++i) {
46
if
(bindings[i] != o.bindings[i]) {
47
return
false
;
48
}
49
}
50
51
return
true
;
52
}
53
54
bool
operator!=(
const
CreateInfo
& o)
const
{
55
return
!(*
this
== o);
56
}
57
};
58
59
std::vector<Binding> bindings;
60
size_t
bindingCount = 0;
61
62
};
63
}
64
65
namespace
std {
66
template
<>
67
struct
hash<Grindstone::GraphicsAPI::DescriptorSetLayout::Binding> {
68
std::size_t operator()(
const
Grindstone::GraphicsAPI::DescriptorSetLayout::Binding
& binding)
const
noexcept
{
69
size_t
result = std::hash<uint32_t>{}(binding.bindingId);
70
Grindstone::Hash::Combine<uint32_t>(result, binding.count);
71
Grindstone::Hash::Combine<uint8_t>(result,
static_cast<
uint8_t
>
(binding.stages));
72
Grindstone::Hash::Combine<uint8_t>(result,
static_cast<
uint8_t
>
(binding.type));
73
74
return
result;
75
}
76
};
77
78
template
<>
79
struct
hash<Grindstone::GraphicsAPI::DescriptorSetLayout> {
80
std::size_t operator()(
const
Grindstone::GraphicsAPI::DescriptorSetLayout
& descriptorSetLayout)
const
noexcept
{
81
size_t
result = std::hash<size_t>{}(descriptorSetLayout.bindingCount);
82
for
(uint8_t i = 0; i < descriptorSetLayout.bindingCount; ++i) {
83
result ^= std::hash<Grindstone::GraphicsAPI::DescriptorSetLayout::Binding>{}(descriptorSetLayout.bindings[i]);
84
}
85
86
return
result;
87
}
88
};
89
90
template
<>
91
struct
hash<Grindstone::GraphicsAPI::DescriptorSetLayout::CreateInfo> {
92
std::size_t operator()(
const
Grindstone::GraphicsAPI::DescriptorSetLayout::CreateInfo
& createInfo)
const
noexcept
{
93
size_t
result = std::hash<size_t>{}(createInfo.bindingCount);
94
for
(uint8_t i = 0; i < createInfo.bindingCount; ++i) {
95
Grindstone::Hash::Combine<Grindstone::GraphicsAPI::DescriptorSetLayout::Binding>(result, createInfo.bindings[i]);
96
}
97
98
return
result;
99
}
100
};
101
}
Grindstone::GraphicsAPI::DescriptorSetLayout
Definition
DescriptorSetLayout.hpp:14
Grindstone::GraphicsAPI::DescriptorSetLayout::Binding
Definition
DescriptorSetLayout.hpp:16
Grindstone::GraphicsAPI::DescriptorSetLayout::CreateInfo
Definition
DescriptorSetLayout.hpp:35
sources
code
Common
Graphics
DescriptorSetLayout.hpp
Generated by
1.17.0