18#ifndef INCLUDED_RENDERER_BACKEND_VULKAN_SHADERPROGRAM
19#define INCLUDED_RENDERER_BACKEND_VULKAN_SHADERPROGRAM
28#include <glad/vulkan.h>
31#include <unordered_map>
47class CRingCommandContext;
55 static uint32_t m_LastAvailableUID = 1;
56 m_UID = m_LastAvailableUID++;
60 ENSURE(attribute.stride > 0);
107 const int32_t bindingSlot,
110 const int32_t bindingSlot,
111 const float valueX,
const float valueY);
113 const int32_t bindingSlot,
114 const float valueX,
const float valueY,
117 const int32_t bindingSlot,
118 const float valueX,
const float valueY,
119 const float valueZ,
const float valueW);
138 const int32_t bindingSlot,
const uint32_t dataSize);
140 static std::unique_ptr<CShaderProgram>
Create(
149 std::vector<VkPipelineShaderStageCreateInfo>
m_Stages;
Represents a mapping of name strings to value strings, for use with #if and #ifdef and similar condit...
Definition: ShaderDefines.h:147
Interned 8-bit strings.
Definition: CStrIntern.h:38
Simplifed version of std::span (C++20) as we don't support the original one yet.
Definition: Span.h:37
IShaderProgram is a container for multiple shaders of different types.
Definition: IShaderProgram.h:81
A simple helper class to decouple command buffers rotation from frames presenting.
Definition: RingCommandContext.h:48
Definition: ShaderProgram.h:82
std::array< std::byte, 128 > m_PushConstantData
Definition: ShaderProgram.h:171
std::unordered_map< CStrIntern, uint32_t > m_UniformMapping
Definition: ShaderProgram.h:176
CDevice * m_Device
Definition: ShaderProgram.h:146
IDevice * GetDevice() override
Definition: ShaderProgram.cpp:597
uint32_t GetMaterialConstantsDataSize() const
Definition: ShaderProgram.h:130
VkPipelineLayout m_PipelineLayout
Definition: ShaderProgram.h:150
void PreDispatch(CRingCommandContext &commandContext)
Definition: ShaderProgram.cpp:665
std::unordered_map< CStrIntern, uint32_t > m_PushConstantMapping
Definition: ShaderProgram.h:177
std::vector< Uniform > m_Uniforms
Definition: ShaderProgram.h:175
std::array< VkShaderStageFlags, 32 > m_PushConstantDataFlags
Definition: ShaderProgram.h:173
void SetUniform(const int32_t bindingSlot, const float value)
Definition: ShaderProgram.cpp:731
~CShaderProgram() override
Definition: ShaderProgram.cpp:588
std::pair< std::byte *, uint32_t > GetUniformData(const int32_t bindingSlot, const uint32_t dataSize)
Definition: ShaderProgram.cpp:773
std::vector< VfsPath > m_FileDependencies
Definition: ShaderProgram.h:153
uint32_t GetStreamLocation(const VertexAttributeStream stream) const
Definition: ShaderProgram.cpp:620
std::optional< CSingleTypeDescriptorSetBinding< CTexture > > m_StorageImageBinding
Definition: ShaderProgram.h:180
std::byte * GetMaterialConstantsData() const
Definition: ShaderProgram.h:129
void SetStorageTexture(const int32_t bindingSlot, CTexture *texture)
Definition: ShaderProgram.cpp:821
std::unordered_map< VertexAttributeStream, uint32_t > m_StreamLocations
Definition: ShaderProgram.h:182
void Bind()
Definition: ShaderProgram.cpp:626
uint32_t m_PushConstantDataMask
Definition: ShaderProgram.h:172
void SetTexture(const int32_t bindingSlot, CTexture *texture)
Definition: ShaderProgram.cpp:796
bool IsMaterialConstantsDataOutdated() const
Definition: ShaderProgram.h:127
void PreDraw(CRingCommandContext &commandContext)
Definition: ShaderProgram.cpp:640
bool m_MaterialConstantsDataOutdated
Definition: ShaderProgram.h:170
std::vector< VfsPath > GetFileDependencies() const override
Definition: ShaderProgram.cpp:615
const std::vector< VkPipelineShaderStageCreateInfo > & GetStages() const
Definition: ShaderProgram.h:94
int32_t GetBindingSlot(const CStrIntern name) const override
Definition: ShaderProgram.cpp:602
uint32_t m_MaterialConstantsDataSize
Definition: ShaderProgram.h:169
void Unbind()
Definition: ShaderProgram.cpp:632
std::vector< VkPipelineShaderStageCreateInfo > m_Stages
Definition: ShaderProgram.h:149
void BindOutdatedDescriptorSets(CRingCommandContext &commandContext)
Definition: ShaderProgram.cpp:707
std::vector< VkShaderModule > m_ShaderModules
Definition: ShaderProgram.h:148
static std::unique_ptr< CShaderProgram > Create(CDevice *device, const CStr &name, const CShaderDefines &defines)
Definition: ShaderProgram.cpp:143
VkPipelineBindPoint m_PipelineBindPoint
Definition: ShaderProgram.h:151
VkPipelineBindPoint GetPipelineBindPoint() const
Definition: ShaderProgram.h:104
void UpdateMaterialConstantsData()
Definition: ShaderProgram.h:128
VkPipelineLayout GetPipelineLayout() const
Definition: ShaderProgram.h:103
void PostDispatch(CRingCommandContext &commandContext)
Definition: ShaderProgram.cpp:689
std::unique_ptr< std::byte[]> m_MaterialConstantsData
Definition: ShaderProgram.h:168
std::vector< PushConstant > m_PushConstants
Definition: ShaderProgram.h:174
std::optional< CSingleTypeDescriptorSetBinding< CTexture > > m_TextureBinding
Definition: ShaderProgram.h:179
#define ENSURE(expr)
ensure the expression <expr> evaluates to non-zero.
Definition: debug.h:277
VertexAttributeStream
Definition: IShaderProgram.h:33
Backend
Definition: Backend.h:28
Definition: VideoMode.h:29
Definition: ShaderProgram.h:156
uint32_t size
Definition: ShaderProgram.h:159
VkShaderStageFlags stageFlags
Definition: ShaderProgram.h:160
uint32_t offset
Definition: ShaderProgram.h:158
CStrIntern name
Definition: ShaderProgram.h:157
unsigned int uint32_t
Definition: wposix_types.h:53