Renderer/ShaderBinder: Make Update take a pointer and size

This commit is contained in:
Jérôme Leclercq 2021-01-22 23:15:31 +01:00
parent e6ada6846d
commit c76d6505b0
6 changed files with 20 additions and 10 deletions

View File

@ -30,7 +30,7 @@ namespace Nz
inline std::size_t GetPoolIndex() const;
inline const OpenGLRenderPipelineLayout& GetOwner() const;
void Update(std::initializer_list<Binding> bindings) override;
void Update(const Binding* bindings, std::size_t bindingCount) override;
OpenGLShaderBinding& operator=(const OpenGLShaderBinding&) = delete;
OpenGLShaderBinding& operator=(OpenGLShaderBinding&&) = delete;

View File

@ -34,7 +34,8 @@ namespace Nz
ShaderBinding(ShaderBinding&&) = delete;
virtual ~ShaderBinding();
virtual void Update(std::initializer_list<Binding> bindings) = 0;
virtual void Update(const Binding* bindings, std::size_t bindingCount) = 0;
inline void Update(std::initializer_list<Binding> bindings);
ShaderBinding& operator=(const ShaderBinding&) = delete;
ShaderBinding& operator=(ShaderBinding&&) = delete;

View File

@ -7,6 +7,11 @@
namespace Nz
{
inline void ShaderBinding::Update(std::initializer_list<Binding> bindings)
{
Update(bindings.begin(), bindings.size());
}
inline void ShaderBindingDeleter::operator()(ShaderBinding* binding)
{
binding->Release();

View File

@ -28,7 +28,7 @@ namespace Nz
inline std::size_t GetPoolIndex() const;
inline const VulkanRenderPipelineLayout& GetOwner() const;
void Update(std::initializer_list<Binding> bindings) override;
void Update(const Binding* bindings, std::size_t bindingCount) override;
VulkanShaderBinding& operator=(const VulkanShaderBinding&) = delete;
VulkanShaderBinding& operator=(VulkanShaderBinding&&) = delete;

View File

@ -39,12 +39,14 @@ namespace Nz
}
}
void OpenGLShaderBinding::Update(std::initializer_list<Binding> bindings)
void OpenGLShaderBinding::Update(const Binding* bindings, std::size_t bindingCount)
{
const auto& layoutInfo = m_owner.GetLayoutInfo();
for (const Binding& binding : bindings)
for (std::size_t i = 0; i < bindingCount; ++i)
{
const Binding& binding = bindings[i];
assert(binding.bindingIndex < layoutInfo.bindings.size());
const auto& bindingDesc = layoutInfo.bindings[binding.bindingIndex];

View File

@ -13,14 +13,16 @@
namespace Nz
{
void VulkanShaderBinding::Update(std::initializer_list<Binding> bindings)
void VulkanShaderBinding::Update(const Binding* bindings, std::size_t bindingCount)
{
StackVector<VkDescriptorBufferInfo> bufferBinding = NazaraStackVector(VkDescriptorBufferInfo, bindings.size());
StackVector<VkDescriptorImageInfo> imageBinding = NazaraStackVector(VkDescriptorImageInfo, bindings.size());
StackVector<VkWriteDescriptorSet> writeOps = NazaraStackVector(VkWriteDescriptorSet, bindings.size());
StackVector<VkDescriptorBufferInfo> bufferBinding = NazaraStackVector(VkDescriptorBufferInfo, bindingCount);
StackVector<VkDescriptorImageInfo> imageBinding = NazaraStackVector(VkDescriptorImageInfo, bindingCount);
StackVector<VkWriteDescriptorSet> writeOps = NazaraStackVector(VkWriteDescriptorSet, bindingCount);
for (const Binding& binding : bindings)
for (std::size_t i = 0; i < bindingCount; ++i)
{
const Binding& binding = bindings[i];
VkWriteDescriptorSet& writeOp = writeOps.emplace_back();
writeOp.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
writeOp.dstSet = m_descriptorSet;