Skip to content

Commit 84d9aca

Browse files
Merge pull request #646 from Devsh-Graphics-Programming/vulkan_1_3_example_06_fix
Vulkan_1_3 example 06 fix
2 parents 74b67eb + 8dc8690 commit 84d9aca

File tree

4 files changed

+20
-18
lines changed

4 files changed

+20
-18
lines changed

include/nbl/asset/IImageView.h

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -102,20 +102,14 @@ class IImageView : public IDescriptor
102102
return false;
103103

104104
const auto& imgParams = _params.image->getCreationParameters();
105-
/* TODO: LAter
106-
image must have been created with a usage value containing at least one of VK_IMAGE_USAGE_SAMPLED_BIT,
107-
VK_IMAGE_USAGE_STORAGE_BIT, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
108-
VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV, or VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT
109-
if (imgParams.)
110-
return false;
111-
*/
112-
105+
#if 0 // extremely annoying
113106
const auto kValidUsages = IImage::EUF_SAMPLED_BIT|IImage::EUF_STORAGE_BIT|
114107
IImage::EUF_RENDER_ATTACHMENT_BIT|IImage::EUF_TRANSIENT_ATTACHMENT_BIT|IImage::EUF_INPUT_ATTACHMENT_BIT|
115108
IImage::EUF_SHADING_RATE_ATTACHMENT_BIT|IImage::EUF_FRAGMENT_DENSITY_MAP_BIT;
116109
// https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageViewCreateInfo.html#VUID-VkImageViewCreateInfo-image-04441
117110
if ((imgParams.usage.value&kValidUsages)==0u)
118111
return false;
112+
#endif
119113

120114
const auto& subresourceRange = _params.subresourceRange;
121115
// declared some usages but they are not a subset

include/nbl/video/ILogicalDevice.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1068,14 +1068,14 @@ inline bool ILogicalDevice::validateMemoryBarrier(const uint32_t queueFamilyInde
10681068
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageMemoryBarrier2-aspectMask-08703
10691069
// and we check the following all at once:
10701070
case IGPUImage::LAYOUT::ATTACHMENT_OPTIMAL:
1071-
if (srcStageIsHost)
1071+
if (!dst && srcStageIsHost)
10721072
return true;
10731073
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageMemoryBarrier2-srcQueueFamilyIndex-03938
10741074
if (aspectMask && !params.usage.hasFlags(IGPUImage::E_USAGE_FLAGS::EUF_RENDER_ATTACHMENT_BIT))
10751075
return true;
10761076
break;
10771077
case IGPUImage::LAYOUT::READ_ONLY_OPTIMAL:
1078-
if (srcStageIsHost)
1078+
if (!dst && srcStageIsHost)
10791079
return true;
10801080
{
10811081
constexpr auto ValidUsages = IGPUImage::E_USAGE_FLAGS::EUF_SAMPLED_BIT|IGPUImage::E_USAGE_FLAGS::EUF_INPUT_ATTACHMENT_BIT;
@@ -1091,12 +1091,12 @@ inline bool ILogicalDevice::validateMemoryBarrier(const uint32_t queueFamilyInde
10911091
break;
10921092
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageMemoryBarrier2-oldLayout-01212
10931093
case IGPUImage::LAYOUT::TRANSFER_SRC_OPTIMAL:
1094-
if (srcStageIsHost || !params.usage.hasFlags(IGPUImage::E_USAGE_FLAGS::EUF_TRANSFER_SRC_BIT))
1094+
if (!dst && srcStageIsHost || !params.usage.hasFlags(IGPUImage::E_USAGE_FLAGS::EUF_TRANSFER_SRC_BIT))
10951095
return true;
10961096
break;
10971097
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageMemoryBarrier2-oldLayout-01213
10981098
case IGPUImage::LAYOUT::TRANSFER_DST_OPTIMAL:
1099-
if (srcStageIsHost || !params.usage.hasFlags(IGPUImage::E_USAGE_FLAGS::EUF_TRANSFER_DST_BIT))
1099+
if (!dst && srcStageIsHost || !params.usage.hasFlags(IGPUImage::E_USAGE_FLAGS::EUF_TRANSFER_DST_BIT))
11001100
return true;
11011101
break;
11021102
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageMemoryBarrier2-oldLayout-01198

src/nbl/video/IGPUCommandBuffer.cpp

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1236,17 +1236,25 @@ bool IGPUCommandBuffer::drawMeshBuffer(const IGPUMeshBuffer* const meshBuffer)
12361236
}
12371237
}
12381238
*/
1239-
1239+
template<bool dst>
12401240
static bool disallowedLayoutForBlitAndResolve(const IGPUImage::LAYOUT layout)
12411241
{
12421242
switch (layout)
12431243
{
12441244
case IGPUImage::LAYOUT::GENERAL:
1245+
return false;
12451246
case IGPUImage::LAYOUT::TRANSFER_SRC_OPTIMAL:
1246-
case IGPUImage::LAYOUT::SHARED_PRESENT:
1247+
if (!dst)
1248+
return false;
12471249
break;
1248-
default:
1250+
case IGPUImage::LAYOUT::TRANSFER_DST_OPTIMAL:
1251+
if (dst)
1252+
return false;
1253+
break;
1254+
case IGPUImage::LAYOUT::SHARED_PRESENT:
12491255
return false;
1256+
default:
1257+
break;
12501258
}
12511259
return true;
12521260
}
@@ -1256,7 +1264,7 @@ bool IGPUCommandBuffer::blitImage(const IGPUImage* const srcImage, const IGPUIma
12561264
if (!checkStateBeforeRecording(queue_flags_t::GRAPHICS_BIT,RENDERPASS_SCOPE::OUTSIDE))
12571265
return false;
12581266

1259-
if (regionCount==0u || !pRegions || disallowedLayoutForBlitAndResolve(srcImageLayout) || disallowedLayoutForBlitAndResolve(dstImageLayout))
1267+
if (regionCount==0u || !pRegions || disallowedLayoutForBlitAndResolve<false>(srcImageLayout) || disallowedLayoutForBlitAndResolve<true>(dstImageLayout))
12601268
return false;
12611269

12621270
const auto* physDev = getOriginDevice()->getPhysicalDevice();
@@ -1289,7 +1297,7 @@ bool IGPUCommandBuffer::resolveImage(const IGPUImage* const srcImage, const IGPU
12891297
if (!checkStateBeforeRecording(queue_flags_t::GRAPHICS_BIT,RENDERPASS_SCOPE::OUTSIDE))
12901298
return false;
12911299

1292-
if (regionCount==0u || !pRegions || disallowedLayoutForBlitAndResolve(srcImageLayout) || disallowedLayoutForBlitAndResolve(dstImageLayout))
1300+
if (regionCount==0u || !pRegions || disallowedLayoutForBlitAndResolve<false>(srcImageLayout) || disallowedLayoutForBlitAndResolve<true>(dstImageLayout))
12931301
return false;
12941302

12951303
const auto* physDev = getOriginDevice()->getPhysicalDevice();

0 commit comments

Comments
 (0)