MCPcopy Create free account
hub / github.com/WiVRn/WiVRn / frame_completed

Method frame_completed

client/decoder/raw_decoder.cpp:201–332  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

199}
200
201void raw_decoder::frame_completed(
202 const from_headset::feedback & feedback,
203 const to_headset::video_stream_data_shard::view_info_t & view_info)
204{
205 auto item = get_free();
206 if (not item)
207 {
208 spdlog::warn("No image available in pool, discard frame");
209 return;
210 }
211
212 auto handle = std::make_shared<raw_blit_handle>(
213 feedback,
214 view_info,
215 *item->view_full,
216 item->image,
217 extent,
218 item->current_layout,
219 *item->semaphore,
220 item->semaphore_val,
221 item->free);
222
223 auto res = device.waitForFences(*fence, true, UINT64_MAX);
224 if (res != vk::Result::eSuccess)
225 spdlog::warn("waitForFences failed");
226
227 cmd.reset();
228 cmd.begin({.flags = vk::CommandBufferUsageFlagBits::eOneTimeSubmit});
229
230 if (item->current_layout != vk::ImageLayout::eTransferDstOptimal)
231 {
232 item->current_layout = vk::ImageLayout::eTransferDstOptimal;
233 vk::ImageMemoryBarrier barrier{
234 .srcAccessMask = vk::AccessFlagBits::eNone,
235 .dstAccessMask = vk::AccessFlagBits::eMemoryWrite,
236 .oldLayout = vk::ImageLayout::eUndefined,
237 .newLayout = item->current_layout,
238 .image = item->image,
239 .subresourceRange = {
240 .aspectMask = vk::ImageAspectFlagBits::eColor,
241 .levelCount = 1,
242 .layerCount = 1,
243 },
244 };
245 cmd.pipelineBarrier(
246 vk::PipelineStageFlagBits::eAllCommands,
247 vk::PipelineStageFlagBits::eTransfer,
248 {},
249 {},
250 {},
251 barrier);
252 }
253
254 std::array regions{
255 vk::BufferImageCopy{
256 .imageSubresource = {
257 .aspectMask = vk::ImageAspectFlagBits::ePlane0,
258 .layerCount = 1,

Callers 1

try_submit_frameMethod · 0.45

Calls 8

push_blit_handleMethod · 0.80
resetMethod · 0.45
beginMethod · 0.45
dataMethod · 0.45
endMethod · 0.45
lockMethod · 0.45
getMethod · 0.45
mapMethod · 0.45

Tested by

no test coverage detected