Skip to content

Commit 9f6115d

Browse files
JustAlejandropixar-oss
authored andcommitted
Autodesk: [hgiVulkan] Add support for VK_EXT_host_image_copy, used for texture initialization when it wouldn't harm performance.
Closes #3818 (Internal change: 2387120)
1 parent 486aadd commit 9f6115d

File tree

10 files changed

+573
-275
lines changed

10 files changed

+573
-275
lines changed

pxr/imaging/hgiVulkan/blitCmds.cpp

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -154,9 +154,8 @@ HgiVulkanBlitCmds::CopyTextureGpuToCpu(
154154
const VkImageLayout oldLayout = srcTexture->GetImageLayout();
155155
const auto [srcAccess, srcStage] =
156156
_GetOldAccessAndPipelineStageFlags(oldLayout);
157-
HgiVulkanTexture::TransitionImageBarrier(
157+
srcTexture->LayoutBarrier(
158158
_commandBuffer,
159-
srcTexture,
160159
oldLayout,
161160
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, // transition tex to this layout
162161
srcAccess,
@@ -183,9 +182,8 @@ HgiVulkanBlitCmds::CopyTextureGpuToCpu(
183182
// Transition image back to what it was.
184183
VkAccessFlags access = HgiVulkanTexture::GetDefaultAccessFlags(
185184
srcTexture->GetDescriptor().usage);
186-
HgiVulkanTexture::TransitionImageBarrier(
185+
srcTexture->LayoutBarrier(
187186
_commandBuffer,
188-
srcTexture,
189187
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
190188
oldLayout, // transition tex to this layout
191189
HgiVulkanTexture::NO_PENDING_WRITES, // no pending writes
@@ -349,9 +347,8 @@ void HgiVulkanBlitCmds::BlitTexture(HgiTextureHandle src, HgiTextureHandle dst)
349347
const VkImageLayout oldLayoutSrc = srcTexture->GetImageLayout();
350348
const auto [srcAccessSrc, srcStageSrc] =
351349
_GetOldAccessAndPipelineStageFlags(oldLayoutSrc);
352-
HgiVulkanTexture::TransitionImageBarrier(
350+
srcTexture->LayoutBarrier(
353351
_commandBuffer,
354-
srcTexture,
355352
oldLayoutSrc,
356353
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
357354
srcAccessSrc,
@@ -363,9 +360,8 @@ void HgiVulkanBlitCmds::BlitTexture(HgiTextureHandle src, HgiTextureHandle dst)
363360
const VkImageLayout oldLayoutDst = dstTexture->GetImageLayout();
364361
const auto [srcAccessDst, srcStageDst] =
365362
_GetOldAccessAndPipelineStageFlags(oldLayoutDst);
366-
HgiVulkanTexture::TransitionImageBarrier(
363+
dstTexture->LayoutBarrier(
367364
_commandBuffer,
368-
dstTexture,
369365
oldLayoutDst,
370366
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
371367
srcAccessDst,
@@ -385,9 +381,8 @@ void HgiVulkanBlitCmds::BlitTexture(HgiTextureHandle src, HgiTextureHandle dst)
385381
// Transition src image back to what it was.
386382
const VkAccessFlags accessSrc = HgiVulkanTexture::GetDefaultAccessFlags(
387383
srcTexture->GetDescriptor().usage);
388-
HgiVulkanTexture::TransitionImageBarrier(
384+
srcTexture->LayoutBarrier(
389385
_commandBuffer,
390-
srcTexture,
391386
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
392387
oldLayoutSrc,
393388
HgiVulkanTexture::NO_PENDING_WRITES,
@@ -398,9 +393,8 @@ void HgiVulkanBlitCmds::BlitTexture(HgiTextureHandle src, HgiTextureHandle dst)
398393
// Transition dst image back to what it was.
399394
const VkAccessFlags accessDst = HgiVulkanTexture::GetDefaultAccessFlags(
400395
dstTexture->GetDescriptor().usage);
401-
HgiVulkanTexture::TransitionImageBarrier(
396+
dstTexture->LayoutBarrier(
402397
_commandBuffer,
403-
dstTexture,
404398
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
405399
oldLayoutDst,
406400
VK_ACCESS_TRANSFER_WRITE_BIT,
@@ -557,9 +551,8 @@ HgiVulkanBlitCmds::CopyTextureToBuffer(HgiTextureToBufferOp const& copyOp)
557551
VkImageLayout oldLayout = srcTexture->GetImageLayout();
558552
const auto [srcAccess, srcStage] =
559553
_GetOldAccessAndPipelineStageFlags(oldLayout);
560-
HgiVulkanTexture::TransitionImageBarrier(
554+
srcTexture->LayoutBarrier(
561555
_commandBuffer,
562-
srcTexture,
563556
/*oldLayout*/oldLayout,
564557
/*newLayout*/VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
565558
/*producerAccess*/srcAccess,
@@ -604,9 +597,8 @@ HgiVulkanBlitCmds::CopyTextureToBuffer(HgiTextureToBufferOp const& copyOp)
604597
// Transition image layout back to original layout.
605598
const VkAccessFlags access = HgiVulkanTexture::GetDefaultAccessFlags(
606599
srcTexture->GetDescriptor().usage);
607-
HgiVulkanTexture::TransitionImageBarrier(
600+
srcTexture->LayoutBarrier(
608601
_commandBuffer,
609-
srcTexture,
610602
/*oldLayout*/VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
611603
/*newLayout*/oldLayout,
612604
/*producerAccess*/VK_ACCESS_TRANSFER_WRITE_BIT,
@@ -646,9 +638,8 @@ HgiVulkanBlitCmds::CopyBufferToTexture(HgiBufferToTextureOp const& copyOp)
646638
VkImageLayout oldLayout = dstTexture->GetImageLayout();
647639
const auto [srcAccess, srcStage] =
648640
_GetOldAccessAndPipelineStageFlags(oldLayout);
649-
HgiVulkanTexture::TransitionImageBarrier(
641+
dstTexture->LayoutBarrier(
650642
_commandBuffer,
651-
dstTexture,
652643
/*oldLayout*/oldLayout,
653644
/*newLayout*/VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
654645
/*producerAccess*/srcAccess,
@@ -692,9 +683,8 @@ HgiVulkanBlitCmds::CopyBufferToTexture(HgiBufferToTextureOp const& copyOp)
692683
// Transition image layout back to original layout.
693684
const VkAccessFlags access = HgiVulkanTexture::GetDefaultAccessFlags(
694685
dstTexture->GetDescriptor().usage);
695-
HgiVulkanTexture::TransitionImageBarrier(
686+
dstTexture->LayoutBarrier(
696687
_commandBuffer,
697-
dstTexture,
698688
/*oldLayout*/VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
699689
/*newLayout*/oldLayout,
700690
/*producerAccess*/VK_ACCESS_TRANSFER_WRITE_BIT,
@@ -738,9 +728,8 @@ HgiVulkanBlitCmds::GenerateMipMaps(HgiTextureHandle const& texture)
738728
const VkImageLayout oldLayout = vkTex->GetImageLayout();
739729
const auto [srcAccess, srcStage] =
740730
_GetOldAccessAndPipelineStageFlags(oldLayout);
741-
HgiVulkanTexture::TransitionImageBarrier(
731+
vkTex->LayoutBarrier(
742732
_commandBuffer,
743-
vkTex,
744733
oldLayout,
745734
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
746735
srcAccess,
@@ -770,9 +759,8 @@ HgiVulkanBlitCmds::GenerateMipMaps(HgiTextureHandle const& texture)
770759
imageBlit.dstOffsets[1].z = 1;
771760

772761
// Transition current mip level to image blit destination
773-
HgiVulkanTexture::TransitionImageBarrier(
762+
vkTex->LayoutBarrier(
774763
_commandBuffer,
775-
vkTex,
776764
oldLayout,
777765
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
778766
srcAccess,
@@ -793,9 +781,8 @@ HgiVulkanBlitCmds::GenerateMipMaps(HgiTextureHandle const& texture)
793781
VK_FILTER_LINEAR);
794782

795783
// Prepare current mip level as image blit source for next level
796-
HgiVulkanTexture::TransitionImageBarrier(
784+
vkTex->LayoutBarrier(
797785
_commandBuffer,
798-
vkTex,
799786
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
800787
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
801788
VK_ACCESS_TRANSFER_WRITE_BIT,
@@ -808,9 +795,8 @@ HgiVulkanBlitCmds::GenerateMipMaps(HgiTextureHandle const& texture)
808795
// Return all mips from TRANSFER_SRC to their original layout
809796
const VkAccessFlags access = HgiVulkanTexture::GetDefaultAccessFlags(
810797
vkTex->GetDescriptor().usage);
811-
HgiVulkanTexture::TransitionImageBarrier(
798+
vkTex->LayoutBarrier(
812799
_commandBuffer,
813-
vkTex,
814800
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
815801
oldLayout,
816802
VK_ACCESS_TRANSFER_READ_BIT,

0 commit comments

Comments
 (0)