Engine²
Open-source game engine written in C++.
Loading...
Searching...
No Matches
BufferBindGroupLayoutEntry.hpp
Go to the documentation of this file.
1#pragma once
2
4#include "utils/webgpu.hpp"
5
6namespace Graphic::Utils {
7class BufferBindGroupLayoutEntry : public ABindGroupLayoutEntry<BufferBindGroupLayoutEntry> {
8 public:
10 {
11 this->getEntry().buffer.type = wgpu::BufferBindingType::Undefined;
12 }
13 ~BufferBindGroupLayoutEntry() override = default;
14
17
18 std::vector<ValidationError> validate(void) const override
19 {
20 std::vector<ValidationError> errors = ABindGroupLayoutEntry::validate();
21 if (!this->isTypeSet)
22 {
23 errors.emplace_back("Type is not set", fmt::format("BufferBindGroupLayoutEntry({})", this->getName()),
25 }
26 if (!this->isMinBindingSizeSet)
27 {
28 errors.emplace_back("Min binding size is not set",
29 fmt::format("BufferBindGroupLayoutEntry({})", this->getName()),
31 }
32 return errors;
33 }
34
35 inline BufferBindGroupLayoutEntry &setType(wgpu::BufferBindingType type)
36 {
37 this->getEntry().buffer.type = type;
38 this->isTypeSet = true;
39 return *this;
40 }
41
42 template <typename... TBuffer> inline BufferBindGroupLayoutEntry &setMinBindingSize(void)
43 {
44 uint64_t size = 0;
46 this->getEntry().buffer.minBindingSize = size;
47 this->isMinBindingSizeSet = true;
48 return *this;
49 }
50
52 {
53 this->getEntry().buffer.minBindingSize = size;
54 this->isMinBindingSizeSet = true;
55 return *this;
56 }
57
58 inline BufferBindGroupLayoutEntry &setHasDynamicOffset(bool hasDynamicOffset)
59 {
60 this->getEntry().buffer.hasDynamicOffset = hasDynamicOffset;
61 return *this;
62 }
63
64 private:
65 template <typename T> void computeMinBindingSize(uint64_t &size) { size += sizeof(T); }
66
67 bool isTypeSet = false;
68 bool isMinBindingSizeSet = false;
69};
70} // namespace Graphic::Utils
const wgpu::BindGroupLayoutEntry & getEntry() const override
Definition ABindGroupLayoutEntry.hpp:21
const std::string & getName() const override
Definition ABindGroupLayoutEntry.hpp:19
std::vector< ValidationError > validate(void) const override
Definition ABindGroupLayoutEntry.hpp:37
ABindGroupLayoutEntry(const std::string &name_)
Definition ABindGroupLayoutEntry.hpp:10
std::string name
Definition ABindGroupLayoutEntry.hpp:60
BufferBindGroupLayoutEntry & setType(wgpu::BufferBindingType type)
Definition BufferBindGroupLayoutEntry.hpp:35
std::vector< ValidationError > validate(void) const override
Definition BufferBindGroupLayoutEntry.hpp:18
BufferBindGroupLayoutEntry(const std::string &name)
Definition BufferBindGroupLayoutEntry.hpp:9
BufferBindGroupLayoutEntry & operator=(const BufferBindGroupLayoutEntry &other)=default
BufferBindGroupLayoutEntry(const BufferBindGroupLayoutEntry &other)=default
void computeMinBindingSize(uint64_t &size)
Definition BufferBindGroupLayoutEntry.hpp:65
bool isMinBindingSizeSet
Definition BufferBindGroupLayoutEntry.hpp:68
BufferBindGroupLayoutEntry & setHasDynamicOffset(bool hasDynamicOffset)
Definition BufferBindGroupLayoutEntry.hpp:58
BufferBindGroupLayoutEntry & setMinBindingSize(uint64_t size)
Definition BufferBindGroupLayoutEntry.hpp:51
BufferBindGroupLayoutEntry & setMinBindingSize(void)
Definition BufferBindGroupLayoutEntry.hpp:42
bool isTypeSet
Definition BufferBindGroupLayoutEntry.hpp:67
Definition DefaultSampler.hpp:6
@ Warning
Definition IValidable.hpp:13
@ Error
Definition IValidable.hpp:14