@@ -1356,6 +1356,30 @@ pl_set_texture_usage(plBlitEncoder* ptEncoder, plTextureHandle tHandle, plTextur
13561356 pl__transition_image_layout (ptCmdBuffer -> tCmdBuffer , ptVulkanTexture -> tImage , pl__vulkan_layout (tOldUsage ), pl__vulkan_layout (tNewUsage ), tRange , VK_PIPELINE_STAGE_ALL_COMMANDS_BIT , VK_PIPELINE_STAGE_ALL_COMMANDS_BIT );
13571357}
13581358
1359+ void
1360+ pl_set_texture_usage_ex (plBlitEncoder * ptEncoder , plTextureHandle tHandle , plTextureUsage tNewUsage , plTextureUsage tOldUsage , plPipelineStageFlags tNewStages , plPipelineStageFlags tOldStages )
1361+ {
1362+ plCommandBuffer * ptCmdBuffer = ptEncoder -> ptCommandBuffer ;
1363+ plDevice * ptDevice = ptCmdBuffer -> ptDevice ;
1364+
1365+ plTexture * ptTexture = pl__get_texture (ptDevice , tHandle );
1366+ plVulkanTexture * ptVulkanTexture = & ptDevice -> sbtTexturesHot [tHandle .uIndex ];
1367+
1368+ VkImageAspectFlags tImageAspectFlags = ptTexture -> tDesc .tUsage & PL_TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_COLOR_BIT ;
1369+
1370+ if (pl__format_has_stencil (pl__vulkan_format (ptTexture -> tDesc .tFormat )))
1371+ tImageAspectFlags |= VK_IMAGE_ASPECT_STENCIL_BIT ;
1372+
1373+ VkImageSubresourceRange tRange = {
1374+ .baseMipLevel = 0 ,
1375+ .levelCount = ptTexture -> tDesc .uMips ,
1376+ .baseArrayLayer = 0 ,
1377+ .layerCount = ptTexture -> tDesc .uLayers ,
1378+ .aspectMask = tImageAspectFlags
1379+ };
1380+ pl__transition_image_layout (ptCmdBuffer -> tCmdBuffer , ptVulkanTexture -> tImage , pl__vulkan_layout (tOldUsage ), pl__vulkan_layout (tNewUsage ), tRange , pl_vulkan_pipeline_stage_flags (tOldStages ), pl_vulkan_pipeline_stage_flags (tNewStages ));
1381+ }
1382+
13591383void
13601384pl_bind_texture_to_memory (plDevice * ptDevice , plTextureHandle tHandle , const plDeviceMemoryAllocation * ptAllocation )
13611385{
@@ -4937,7 +4961,8 @@ pl__transition_image_layout(VkCommandBuffer tCommandBuffer, VkImage tImage, VkIm
49374961 // Image will be read in a shader (sampler, input attachment)
49384962 // Make sure any writes to the image have been finished
49394963 if (tBarrier .srcAccessMask == 0 )
4940- tBarrier .srcAccessMask = VK_ACCESS_HOST_WRITE_BIT | VK_ACCESS_TRANSFER_WRITE_BIT ;
4964+ tBarrier .srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT ;
4965+ // tBarrier.srcAccessMask = VK_ACCESS_HOST_WRITE_BIT | VK_ACCESS_TRANSFER_WRITE_BIT;
49414966 tBarrier .dstAccessMask = VK_ACCESS_SHADER_READ_BIT ;
49424967 break ;
49434968 default :
0 commit comments