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 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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue