Renderer/ShaderBinder: Make Update take a pointer and size
This commit is contained in:
parent
e6ada6846d
commit
c76d6505b0
|
|
@ -30,7 +30,7 @@ namespace Nz
|
||||||
inline std::size_t GetPoolIndex() const;
|
inline std::size_t GetPoolIndex() const;
|
||||||
inline const OpenGLRenderPipelineLayout& GetOwner() 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=(const OpenGLShaderBinding&) = delete;
|
||||||
OpenGLShaderBinding& operator=(OpenGLShaderBinding&&) = delete;
|
OpenGLShaderBinding& operator=(OpenGLShaderBinding&&) = delete;
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,8 @@ namespace Nz
|
||||||
ShaderBinding(ShaderBinding&&) = delete;
|
ShaderBinding(ShaderBinding&&) = delete;
|
||||||
virtual ~ShaderBinding();
|
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=(const ShaderBinding&) = delete;
|
||||||
ShaderBinding& operator=(ShaderBinding&&) = delete;
|
ShaderBinding& operator=(ShaderBinding&&) = delete;
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,11 @@
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
|
inline void ShaderBinding::Update(std::initializer_list<Binding> bindings)
|
||||||
|
{
|
||||||
|
Update(bindings.begin(), bindings.size());
|
||||||
|
}
|
||||||
|
|
||||||
inline void ShaderBindingDeleter::operator()(ShaderBinding* binding)
|
inline void ShaderBindingDeleter::operator()(ShaderBinding* binding)
|
||||||
{
|
{
|
||||||
binding->Release();
|
binding->Release();
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ namespace Nz
|
||||||
inline std::size_t GetPoolIndex() const;
|
inline std::size_t GetPoolIndex() const;
|
||||||
inline const VulkanRenderPipelineLayout& GetOwner() 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=(const VulkanShaderBinding&) = delete;
|
||||||
VulkanShaderBinding& operator=(VulkanShaderBinding&&) = delete;
|
VulkanShaderBinding& operator=(VulkanShaderBinding&&) = delete;
|
||||||
|
|
|
||||||
|
|
@ -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();
|
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());
|
assert(binding.bindingIndex < layoutInfo.bindings.size());
|
||||||
const auto& bindingDesc = layoutInfo.bindings[binding.bindingIndex];
|
const auto& bindingDesc = layoutInfo.bindings[binding.bindingIndex];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,14 +13,16 @@
|
||||||
|
|
||||||
namespace Nz
|
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<VkDescriptorBufferInfo> bufferBinding = NazaraStackVector(VkDescriptorBufferInfo, bindingCount);
|
||||||
StackVector<VkDescriptorImageInfo> imageBinding = NazaraStackVector(VkDescriptorImageInfo, bindings.size());
|
StackVector<VkDescriptorImageInfo> imageBinding = NazaraStackVector(VkDescriptorImageInfo, bindingCount);
|
||||||
StackVector<VkWriteDescriptorSet> writeOps = NazaraStackVector(VkWriteDescriptorSet, bindings.size());
|
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();
|
VkWriteDescriptorSet& writeOp = writeOps.emplace_back();
|
||||||
writeOp.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
|
writeOp.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
|
||||||
writeOp.dstSet = m_descriptorSet;
|
writeOp.dstSet = m_descriptorSet;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue