MCPcopy Create free account
hub / github.com/RavEngine/RavEngine / TransitionImageLayout

Method TransitionImageLayout

deps/LLGL/sources/Renderer/Vulkan/VKDevice.cpp:185–233  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

183}
184
185void VKDevice::TransitionImageLayout(
186 VkCommandBuffer commandBuffer,
187 VkImage image,
188 VkFormat /*format*/,
189 VkImageLayout oldLayout,
190 VkImageLayout newLayout,
191 const TextureSubresource& subresource)
192{
193 /* Initialize image memory barrier descriptor */
194 VkImageMemoryBarrier barrier;
195 {
196 barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
197 barrier.pNext = nullptr;
198 barrier.srcAccessMask = 0;
199 barrier.dstAccessMask = 0;
200 barrier.oldLayout = oldLayout;
201 barrier.newLayout = newLayout;
202 barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
203 barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
204 barrier.image = image;
205 barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
206 barrier.subresourceRange.baseMipLevel = subresource.baseMipLevel;
207 barrier.subresourceRange.levelCount = subresource.numMipLevels;
208 barrier.subresourceRange.baseArrayLayer = subresource.baseArrayLayer;
209 barrier.subresourceRange.layerCount = subresource.numArrayLayers;
210 }
211
212 /* Initialize pipeline state flags */
213 VkPipelineStageFlags srcStageMask = 0;
214 VkPipelineStageFlags dstStageMask = 0;
215
216 if (oldLayout == VK_IMAGE_LAYOUT_UNDEFINED && newLayout == VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL)
217 {
218 barrier.srcAccessMask = 0;
219 barrier.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
220 srcStageMask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;
221 dstStageMask = VK_PIPELINE_STAGE_TRANSFER_BIT;
222 }
223 else if (oldLayout == VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL && newLayout == VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL)
224 {
225 barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
226 barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
227 srcStageMask = VK_PIPELINE_STAGE_TRANSFER_BIT;
228 dstStageMask = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
229 }
230
231 /* Record image barrier command */
232 vkCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, 0, 0, nullptr, 0, nullptr, 1, &barrier);
233}
234
235void VKDevice::CopyBuffer(
236 VkCommandBuffer commandBuffer,

Callers 3

CreateTextureMethod · 0.80
WriteTextureMethod · 0.80
ReadTextureMethod · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected