20template<
typename LayoutT>
39template<
typename LayoutT>
44 align<LayoutT>(push_constant.type, push_constant.array_size, &offset);
59 uint32_t max_push_constants_size =
65template<
typename LayoutT>
84 storage_type_ = storage_type;
88 descriptor_set_location_ = location;
98 for (
const PushConstant &push_constant : push_constants) {
99 if (push_constant.location == location) {
100 return &push_constant;
108 std::ostream &stream = std::cout;
109 stream <<
"VKPushConstants::Layout::debug_print()\n";
110 for (
const PushConstant &push_constant : push_constants) {
111 stream <<
" - location:" << push_constant.location;
112 stream <<
", offset:" << push_constant.offset;
113 stream <<
", array_size:" << push_constant.array_size;
127 other.data_ =
nullptr;
132 if (data_ !=
nullptr) {
140 layout_ = other.layout_;
143 other.data_ =
nullptr;
152 if (!uniform_buffer_) {
153 uniform_buffer_ = std::make_unique<VKUniformBuffer>(layout_->size_in_bytes(),
154 "push constants buffer");
157 uniform_buffer_->reset_data_uploaded();
158 uniform_buffer_->update(data_);
165 return uniform_buffer_;
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
constexpr const char * c_str() const
void append(const T &value)
const VkPhysicalDeviceProperties & physical_device_properties_get() const
void update_uniform_buffer()
VKPushConstants & operator=(VKPushConstants &&other)
std::unique_ptr< VKUniformBuffer > & uniform_buffer_get()
virtual ~VKPushConstants()
void * MEM_mallocN(size_t len, const char *str)
void MEM_freeN(void *vmemh)
void init_struct(const shader::ShaderCreateInfo &info, const VKShaderInterface &interface, Vector< VKPushConstants::Layout::PushConstant > &r_struct, uint32_t *r_offset)
static void reserve(const shader::Type type, int32_t array_size, uint32_t *r_offset)
uint32_t struct_size(Span< shader::ShaderCreateInfo::PushConst > push_constants)
static VKPushConstants::Layout::PushConstant init_constant(const shader::ShaderCreateInfo::PushConst &push_constant, const ShaderInput &shader_input, uint32_t *r_offset)
static void align_end_of_struct(uint32_t *r_offset)
static void align(const shader::Type &type, const int32_t array_size, uint32_t *r_offset)
static constexpr StorageType STORAGE_TYPE_DEFAULT
static constexpr StorageType STORAGE_TYPE_FALLBACK
uint32_t size_in_bytes() const
static StorageType determine_storage_type(const shader::ShaderCreateInfo &info, const VKDevice &device)
const PushConstant * find(int32_t location) const
void init(const shader::ShaderCreateInfo &info, const VKShaderInterface &interface, StorageType storage_type, VKDescriptorSet::Location location)
Describe inputs & outputs, stage interfaces, resources and sources of a shader. If all data is correc...
Vector< PushConst > push_constants_