MCPcopy Create free account
hub / github.com/comaps/comaps / MakeImageLayoutTransition

Method MakeImageLayoutTransition

libs/drape/vulkan/vulkan_texture.cpp:219–298  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

217}
218
219void VulkanTexture::MakeImageLayoutTransition(VkCommandBuffer commandBuffer, VkImageLayout newLayout,
220 VkPipelineStageFlags srcStageMask,
221 VkPipelineStageFlags dstStageMask) const
222{
223 VkAccessFlags srcAccessMask = 0;
224 VkAccessFlags dstAccessMask = 0;
225
226 VkPipelineStageFlags const noAccessMask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT | VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT |
227 VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT | VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
228 VkPipelineStageFlags srcRemainingMask = srcStageMask & ~noAccessMask;
229 VkPipelineStageFlags dstRemainingMask = dstStageMask & ~noAccessMask;
230
231 auto const srcTestAndRemoveBit = [&](VkPipelineStageFlagBits stageBit, VkAccessFlags accessBits)
232 {
233 if (srcStageMask & stageBit)
234 {
235 srcAccessMask |= accessBits;
236 srcRemainingMask &= ~stageBit;
237 }
238 };
239
240 srcTestAndRemoveBit(VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT);
241
242 srcTestAndRemoveBit(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT);
243
244 srcTestAndRemoveBit(VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, VK_ACCESS_SHADER_READ_BIT);
245
246 srcTestAndRemoveBit(VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
247 VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_INPUT_ATTACHMENT_READ_BIT);
248
249 srcTestAndRemoveBit(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_WRITE_BIT);
250
251 srcTestAndRemoveBit(VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT,
252 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT);
253
254 CHECK(srcRemainingMask == 0, ("Not implemented transition for src pipeline stage"));
255
256 auto const dstTestAndRemoveBit = [&](VkPipelineStageFlagBits stageBit, VkAccessFlags accessBits)
257 {
258 if (dstStageMask & stageBit)
259 {
260 dstAccessMask |= accessBits;
261 dstRemainingMask &= ~stageBit;
262 }
263 };
264
265 dstTestAndRemoveBit(VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT);
266
267 dstTestAndRemoveBit(VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT,
268 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT);
269
270 dstTestAndRemoveBit(VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, VK_ACCESS_SHADER_READ_BIT);
271
272 dstTestAndRemoveBit(VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
273 VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_INPUT_ATTACHMENT_READ_BIT);
274
275 dstTestAndRemoveBit(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_WRITE_BIT);
276

Callers 2

SetFramebufferMethod · 0.80
ApplyFramebufferMethod · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected