@@ -98,57 +98,57 @@ static inline auto getVkImageSubresourceFrom(const SubresourceRange& range) -> s
98
98
99
99
template <typename ResourceBarrier>
100
100
VkDependencyInfoKHR fill (
101
- VkMemoryBarrier2* memoryBarriers, VkBufferMemoryBarrier2* bufferBarriers, VkImageMemoryBarrier2* imageBarriers,
101
+ VkMemoryBarrier2* const memoryBarriers, VkBufferMemoryBarrier2* const bufferBarriers, VkImageMemoryBarrier2* const imageBarriers,
102
102
const IGPUCommandBuffer::SDependencyInfo<ResourceBarrier>& depInfo, const uint32_t selfQueueFamilyIndex=IQueue::FamilyIgnored
103
103
) {
104
104
VkDependencyInfoKHR info = { VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR,nullptr };
105
- for (auto i=0 ; i<depInfo.memBarrierCount ; i++)
105
+ auto outMem = memoryBarriers;
106
+ for (const auto & in : depInfo.memBarriers )
106
107
{
107
- auto & out = memoryBarriers[i];
108
- out.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR;
109
- out.pNext = nullptr ;
110
- fill (out,depInfo.memBarriers [i],selfQueueFamilyIndex);
108
+ outMem->sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR;
109
+ outMem->pNext = nullptr ;
110
+ fill (*(outMem++),in,selfQueueFamilyIndex);
111
111
}
112
- for (auto i=0 ; i<depInfo.bufBarrierCount ; i++)
112
+ auto outBuf = bufferBarriers;
113
+ for (const auto & in : depInfo.bufBarriers )
113
114
{
114
- auto & out = bufferBarriers[i];
115
- out.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR;
116
- out.pNext = nullptr ; // VkExternalMemoryAcquireUnmodifiedEXT
117
-
118
- const auto & in = depInfo.bufBarriers [i];
119
- fill (out,in.barrier ,selfQueueFamilyIndex,in.range .buffer ->getCachedCreationParams ().isConcurrentSharing ());
120
- out.buffer = static_cast <const CVulkanBuffer*>(in.range .buffer .get ())->getInternalObject ();
121
- out.offset = in.range .offset ;
122
- out.size = in.range .size ;
115
+ outBuf->sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR;
116
+ outBuf->pNext = nullptr ; // VkExternalMemoryAcquireUnmodifiedEXT
117
+
118
+ fill (*outBuf,in.barrier ,selfQueueFamilyIndex,in.range .buffer ->getCachedCreationParams ().isConcurrentSharing ());
119
+ outBuf->buffer = static_cast <const CVulkanBuffer*>(in.range .buffer .get ())->getInternalObject ();
120
+ outBuf->offset = in.range .offset ;
121
+ outBuf->size = in.range .size ;
122
+ outBuf++;
123
123
}
124
- for (auto i=0 ; i<depInfo.imgBarrierCount ; i++)
124
+ auto outImg = imageBarriers;
125
+ for (const auto & in : depInfo.imgBarriers )
125
126
{
126
- auto & out = imageBarriers[i];
127
- out.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR;
128
- out.pNext = nullptr ; // VkExternalMemoryAcquireUnmodifiedEXT or VkSampleLocationsInfoEXT
129
-
130
- const auto & in = depInfo.imgBarriers [i];
131
- out.oldLayout = getVkImageLayoutFromImageLayout (in.oldLayout );
132
- out.newLayout = getVkImageLayoutFromImageLayout (in.newLayout );
133
- fill (out,in.barrier ,selfQueueFamilyIndex,in.image ->getCachedCreationParams ().isConcurrentSharing ());
134
- out.image = static_cast <const CVulkanImage*>(in.image )->getInternalObject ();
135
- out.subresourceRange = getVkImageSubresourceFrom (in.subresourceRange );
127
+ outImg->sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR;
128
+ outImg->pNext = nullptr ; // VkExternalMemoryAcquireUnmodifiedEXT or VkSampleLocationsInfoEXT
129
+
130
+ outImg->oldLayout = getVkImageLayoutFromImageLayout (in.oldLayout );
131
+ outImg->newLayout = getVkImageLayoutFromImageLayout (in.newLayout );
132
+ fill (*outImg,in.barrier ,selfQueueFamilyIndex,in.image ->getCachedCreationParams ().isConcurrentSharing ());
133
+ outImg->image = static_cast <const CVulkanImage*>(in.image )->getInternalObject ();
134
+ outImg->subresourceRange = getVkImageSubresourceFrom (in.subresourceRange );
135
+ outImg++;
136
136
}
137
137
info.dependencyFlags = 0u ;
138
- info.memoryBarrierCount = depInfo.memBarrierCount ;
138
+ info.memoryBarrierCount = depInfo.memBarriers . size () ;
139
139
info.pMemoryBarriers = memoryBarriers;
140
- info.bufferMemoryBarrierCount = depInfo.bufBarrierCount ;
140
+ info.bufferMemoryBarrierCount = depInfo.bufBarriers . size () ;
141
141
info.pBufferMemoryBarriers = bufferBarriers;
142
- info.imageMemoryBarrierCount = depInfo.imgBarrierCount ;
142
+ info.imageMemoryBarrierCount = depInfo.imgBarriers . size () ;
143
143
info.pImageMemoryBarriers = imageBarriers;
144
144
return info;
145
145
}
146
146
147
147
bool CVulkanCommandBuffer::setEvent_impl (IEvent* const _event, const SEventDependencyInfo& depInfo)
148
148
{
149
- IGPUCommandPool::StackAllocation<VkMemoryBarrier2KHR> memoryBarriers (m_cmdpool,depInfo.memBarrierCount );
150
- IGPUCommandPool::StackAllocation<VkBufferMemoryBarrier2KHR> bufferBarriers (m_cmdpool,depInfo.bufBarrierCount );
151
- IGPUCommandPool::StackAllocation<VkImageMemoryBarrier2KHR> imageBarriers (m_cmdpool,depInfo.imgBarrierCount );
149
+ IGPUCommandPool::StackAllocation<VkMemoryBarrier2KHR> memoryBarriers (m_cmdpool,depInfo.memBarriers . size () );
150
+ IGPUCommandPool::StackAllocation<VkBufferMemoryBarrier2KHR> bufferBarriers (m_cmdpool,depInfo.bufBarriers . size () );
151
+ IGPUCommandPool::StackAllocation<VkImageMemoryBarrier2KHR> imageBarriers (m_cmdpool,depInfo.imgBarriers . size () );
152
152
if (!memoryBarriers || !bufferBarriers || !imageBarriers)
153
153
return false ;
154
154
@@ -163,21 +163,22 @@ bool CVulkanCommandBuffer::resetEvent_impl(IEvent* const _event, const core::bit
163
163
return true ;
164
164
}
165
165
166
- bool CVulkanCommandBuffer::waitEvents_impl (const uint32_t eventCount, IEvent* const * const pEvents , const SEventDependencyInfo* depInfos)
166
+ bool CVulkanCommandBuffer::waitEvents_impl (const std::span< IEvent*> events , const SEventDependencyInfo* depInfos)
167
167
{
168
- IGPUCommandPool::StackAllocation<VkEvent> events (m_cmdpool,eventCount);
168
+ const uint32_t eventCount = events.size ();
169
+ IGPUCommandPool::StackAllocation<VkEvent> vk_events (m_cmdpool,eventCount);
169
170
IGPUCommandPool::StackAllocation<VkDependencyInfoKHR> infos (m_cmdpool,eventCount);
170
- if (!events || !infos)
171
+ if (!vk_events || !infos)
171
172
return false ;
172
173
173
174
uint32_t memBarrierCount = 0u ;
174
175
uint32_t bufBarrierCount = 0u ;
175
176
uint32_t imgBarrierCount = 0u ;
176
177
for (auto i=0u ; i<eventCount; i++)
177
178
{
178
- memBarrierCount += depInfos[i].memBarrierCount ;
179
- bufBarrierCount += depInfos[i].bufBarrierCount ;
180
- imgBarrierCount += depInfos[i].imgBarrierCount ;
179
+ memBarrierCount += depInfos[i].memBarriers . size () ;
180
+ bufBarrierCount += depInfos[i].bufBarriers . size () ;
181
+ imgBarrierCount += depInfos[i].imgBarriers . size () ;
181
182
}
182
183
IGPUCommandPool::StackAllocation<VkMemoryBarrier2KHR> memoryBarriers (m_cmdpool,memBarrierCount);
183
184
IGPUCommandPool::StackAllocation<VkBufferMemoryBarrier2KHR> bufferBarriers (m_cmdpool,bufBarrierCount);
@@ -190,21 +191,21 @@ bool CVulkanCommandBuffer::waitEvents_impl(const uint32_t eventCount, IEvent* co
190
191
imgBarrierCount = 0u ;
191
192
for (auto i=0u ; i<eventCount; i++)
192
193
{
193
- events [i] = static_cast <CVulkanEvent*>(pEvents [i])->getInternalObject ();
194
+ vk_events [i] = static_cast <CVulkanEvent*>(events [i])->getInternalObject ();
194
195
infos[i] = fill (memoryBarriers.data ()+memBarrierCount,bufferBarriers.data ()+bufBarrierCount,imageBarriers.data ()+imgBarrierCount,depInfos[i]);
195
196
memBarrierCount += infos[i].memoryBarrierCount ;
196
197
bufBarrierCount += infos[i].bufferMemoryBarrierCount ;
197
198
imgBarrierCount += infos[i].imageMemoryBarrierCount ;
198
199
}
199
- getFunctionTable ().vkCmdWaitEvents2 (m_cmdbuf,eventCount,events .data (),infos.data ());
200
+ getFunctionTable ().vkCmdWaitEvents2 (m_cmdbuf,eventCount,vk_events .data (),infos.data ());
200
201
return true ;
201
202
}
202
203
203
204
bool CVulkanCommandBuffer::pipelineBarrier_impl (const core::bitflag<asset::E_DEPENDENCY_FLAGS> dependencyFlags, const SPipelineBarrierDependencyInfo& depInfo)
204
205
{
205
- IGPUCommandPool::StackAllocation<VkMemoryBarrier2KHR> memoryBarriers (m_cmdpool,depInfo.memBarrierCount );
206
- IGPUCommandPool::StackAllocation<VkBufferMemoryBarrier2KHR> bufferBarriers (m_cmdpool,depInfo.bufBarrierCount );
207
- IGPUCommandPool::StackAllocation<VkImageMemoryBarrier2KHR> imageBarriers (m_cmdpool,depInfo.imgBarrierCount );
206
+ IGPUCommandPool::StackAllocation<VkMemoryBarrier2KHR> memoryBarriers (m_cmdpool,depInfo.memBarriers . size () );
207
+ IGPUCommandPool::StackAllocation<VkBufferMemoryBarrier2KHR> bufferBarriers (m_cmdpool,depInfo.bufBarriers . size () );
208
+ IGPUCommandPool::StackAllocation<VkImageMemoryBarrier2KHR> imageBarriers (m_cmdpool,depInfo.imgBarriers . size () );
208
209
if (!memoryBarriers || !bufferBarriers || !imageBarriers)
209
210
return false ;
210
211
0 commit comments