Grindstone Game Engine v0.2.0
An open source game engine and toolkit.
Loading...
Searching...
No Matches
DescriptorSetLayout.hpp
1#pragma once
2
3#include <vector>
4
5#include <Common/Hash.hpp>
6#include "Formats.hpp"
7
8namespace Grindstone:: GraphicsAPI {
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
65namespace 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}
Definition DescriptorSetLayout.hpp:14
Definition DescriptorSetLayout.hpp:16