Skip to content

Commit aba7807

Browse files
committed
add logging to secondary functions
1 parent b209889 commit aba7807

File tree

1 file changed

+105
-32
lines changed

1 file changed

+105
-32
lines changed

include/nbl/video/ILogicalDevice.h

Lines changed: 105 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -105,16 +105,19 @@ class NBL_API2 ILogicalDevice : public core::IReferenceCounted, public IDeviceMe
105105
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageMemoryBarrier2-srcStageMask-03854
106106
constexpr auto HostBit = asset::PIPELINE_STAGE_FLAGS::HOST_BIT;
107107
if (barrier.dep.srcStageMask.hasFlags(HostBit)||barrier.dep.dstStageMask.hasFlags(HostBit))
108+
m_logger.log("Source and destination queue family index should be equal, HOST_BIT is set [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
108109
return false;
109110
// spec doesn't require it now, but we do
110111
switch (barrier.ownershipOp)
111112
{
112113
case IGPUCommandBuffer::SOwnershipTransferBarrier::OWNERSHIP_OP::ACQUIRE:
113114
if (barrier.dep.srcStageMask || barrier.dep.srcAccessMask)
115+
m_logger.log("Ownership operation ACQUIRE requires, srcStageMask and srcAccessMask being set to 0, in [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
114116
return false;
115117
break;
116118
case IGPUCommandBuffer::SOwnershipTransferBarrier::OWNERSHIP_OP::RELEASE:
117119
if (barrier.dep.dstStageMask || barrier.dep.dstAccessMask)
120+
m_logger.log("Ownership operation RELEASE requires, dstStageMask and dstAccessMask being set to 0, in [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
118121
return false;
119122
break;
120123
default:
@@ -134,12 +137,15 @@ class NBL_API2 ILogicalDevice : public core::IReferenceCounted, public IDeviceMe
134137
const auto& range = barrier.range;
135138
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkBufferMemoryBarrier2-buffer-parameter
136139
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkBufferMemoryBarrier2-offset-01188
137-
if (!range.buffer || range.size==0u)
140+
if (!range.buffer || range.size == 0u) {
141+
m_logger.log("No buffer was specified [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
138142
return false;
143+
}
139144
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkBufferMemoryBarrier2-offset-01187
140145
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkBufferMemoryBarrier2-offset-01189
141146
const size_t remain = range.size!=IGPUCommandBuffer::SBufferMemoryBarrier<ResourceBarrier>{}.range.size ? range.size:1ull;
142147
if (range.offset+remain>range.buffer->getSize())
148+
m_logger.log("Invalid range was specified [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
143149
return false;
144150

145151
if constexpr(std::is_same_v<IGPUCommandBuffer::SOwnershipTransferBarrier,ResourceBarrier>)
@@ -1030,38 +1036,54 @@ class NBL_API2 ILogicalDevice : public core::IReferenceCounted, public IDeviceMe
10301036
template<typename CreationParams, typename ExtraLambda>
10311037
inline CreationParams::SSpecializationValidationResult commonCreatePipelines(IGPUPipelineCache* const pipelineCache, const std::span<const CreationParams> params, ExtraLambda&& extra)
10321038
{
1033-
if (pipelineCache && !pipelineCache->wasCreatedBy(this))
1039+
if (pipelineCache && !pipelineCache->wasCreatedBy(this)) {
1040+
m_logger.log("Invalid pipelineCache was given [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
10341041
return {};
1035-
if (params.empty())
1042+
}
1043+
if (params.empty()) {
1044+
m_logger.log("No parameters were given [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
10361045
return {};
1046+
}
10371047

10381048
typename CreationParams::SSpecializationValidationResult retval = {.count=0,.dataSize=0};
10391049
for (auto i=0; i<params.size(); i++)
10401050
{
10411051
const auto& ci = params[i];
10421052

10431053
const auto validation = ci.valid();
1044-
if (!validation)
1054+
if (!validation) {
1055+
m_logger.log("Invalid parameters were given (params[%d]) [%s - %s:%p]", system::ILogger::ELL_ERROR, i, __FUNCTION__, __FILE__, __LINE__);
10451056
return {};
1057+
}
10461058

1047-
if (!ci.layout->wasCreatedBy(this))
1059+
if (!ci.layout->wasCreatedBy(this)) {
1060+
m_logger.log("Invalid layout was given (params[%d]) [%s - %s:%p]", system::ILogger::ELL_ERROR, i, __FUNCTION__, __FILE__, __LINE__);
10481061
return {};
1062+
}
10491063

10501064
constexpr auto AllowDerivativesFlag = CreationParams::FLAGS::ALLOW_DERIVATIVES;
10511065
if (ci.basePipeline)
10521066
{
1053-
if (!ci.basePipeline->wasCreatedBy(this))
1067+
if (!ci.basePipeline->wasCreatedBy(this)) {
1068+
m_logger.log("Invalid basePipeline was specified (params[%d]) [%s - %s:%p]", system::ILogger::ELL_ERROR, i, __FUNCTION__, __FILE__, __LINE__);
10541069
return {};
1055-
if (!ci.basePipeline->getCreationFlags().hasFlags(AllowDerivativesFlag))
1070+
}
1071+
if (!ci.basePipeline->getCreationFlags().hasFlags(AllowDerivativesFlag)) {
1072+
m_logger.log("Invalid basePipeline was specified (params[%d]) [%s - %s:%p]", system::ILogger::ELL_ERROR, i, __FUNCTION__, __FILE__, __LINE__);
10561073
return {};
1074+
}
10571075
}
10581076
// https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkComputePipelineCreateInfo.html#VUID-VkComputePipelineCreateInfo-flags-07985
1059-
else if (ci.basePipelineIndex<-1 || ci.basePipelineIndex>=i || ci.basePipelineIndex>=0 && !params[ci.basePipelineIndex].flags.hasFlags(AllowDerivativesFlag))
1077+
else if (ci.basePipelineIndex < -1 || ci.basePipelineIndex >= i || ci.basePipelineIndex >= 0 && !params[ci.basePipelineIndex].flags.hasFlags(AllowDerivativesFlag)) {
1078+
m_logger.log("Invalid basePipeline was specified (params[%d]) [%s - %s:%p]", system::ILogger::ELL_ERROR, i, __FUNCTION__, __FILE__, __LINE__);
10601079
return {};
1080+
}
10611081

10621082
for (auto info : ci.getShaders())
1063-
if (info.shader && !extra(info))
1064-
return {};
1083+
if (info.shader && !extra(info)) {
1084+
m_logger.log("Invalid shader were specified (params[%d]) [%s - %s:%p]", system::ILogger::ELL_ERROR, i, __FUNCTION__, __FILE__, __LINE__);
1085+
return {};
1086+
}
10651087

10661088
retval += validation;
10671089
}
@@ -1158,30 +1180,44 @@ class NBL_API2 ILogicalDevice : public core::IReferenceCounted, public IDeviceMe
11581180

11591181
inline bool invalidCreationParams(const IGPUAccelerationStructure::SCreationParams& params)
11601182
{
1161-
if (!getEnabledFeatures().accelerationStructure)
1183+
if (!getEnabledFeatures().accelerationStructure) {
1184+
m_logger.log("Acceleration structure feature is not enabled [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
11621185
return true;
1186+
}
11631187
constexpr size_t MinAlignment = 256u;
1164-
if (!params.bufferRange.isValid() || !params.bufferRange.buffer->wasCreatedBy(this) || (params.bufferRange.offset&(MinAlignment-1))!=0u)
1188+
if (!params.bufferRange.isValid() || !params.bufferRange.buffer->wasCreatedBy(this) || (params.bufferRange.offset & (MinAlignment - 1)) != 0u) {
1189+
m_logger.log("Invalid bufferRange was given [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
11651190
return true;
1191+
}
11661192
const auto bufferUsages = params.bufferRange.buffer->getCreationParams().usage;
1167-
if (!bufferUsages.hasFlags(IGPUBuffer::EUF_ACCELERATION_STRUCTURE_STORAGE_BIT))
1193+
if (!bufferUsages.hasFlags(IGPUBuffer::EUF_ACCELERATION_STRUCTURE_STORAGE_BIT)) {
1194+
m_logger.log("Invalid bufferRange was given [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
11681195
return true;
1169-
if (params.flags.hasFlags(IGPUAccelerationStructure::SCreationParams::FLAGS::MOTION_BIT) && !getEnabledFeatures().rayTracingMotionBlur)
1196+
}
1197+
if (params.flags.hasFlags(IGPUAccelerationStructure::SCreationParams::FLAGS::MOTION_BIT) && !getEnabledFeatures().rayTracingMotionBlur) {
1198+
m_logger.log("Ray tracing motion blur feature is not enabled [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
11701199
return true;
1200+
}
11711201
return false;
11721202
}
11731203
template<class BufferType>
11741204
bool invalidFeaturesForASBuild(const bool motionBlur) const
11751205
{
11761206
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-vkGetAccelerationStructureBuildSizesKHR-accelerationStructure-08933
1177-
if (!m_enabledFeatures.accelerationStructure)
1207+
if (!m_enabledFeatures.accelerationStructure) {
1208+
m_logger.log("Acceleration structure feature is not enabled [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
11781209
return true;
1210+
}
11791211
// not sure of VUID
1180-
if (std::is_same_v<BufferType,asset::ICPUBuffer> && !m_enabledFeatures.accelerationStructureHostCommands)
1212+
if (std::is_same_v<BufferType, asset::ICPUBuffer> && !m_enabledFeatures.accelerationStructureHostCommands) {
1213+
m_logger.log("Acceleration structure host commands feature is not enabled [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
11811214
return true;
1215+
}
11821216
// not sure of VUID
1183-
if (motionBlur && !m_enabledFeatures.rayTracingMotionBlur)
1217+
if (motionBlur && !m_enabledFeatures.rayTracingMotionBlur) {
1218+
m_logger.log("Ray tracing motion blur feature is not enabled [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
11841219
return true;
1220+
}
11851221

11861222
return false;
11871223
}
@@ -1196,16 +1232,22 @@ template<typename ResourceBarrier>
11961232
inline bool ILogicalDevice::validateMemoryBarrier(const uint32_t queueFamilyIndex, const IGPUCommandBuffer::SImageMemoryBarrier<ResourceBarrier>& barrier) const
11971233
{
11981234
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageMemoryBarrier2-image-parameter
1199-
if (!barrier.image)
1235+
if (!barrier.image) {
1236+
m_logger.log("Invalid image handle [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
12001237
return false;
1238+
}
12011239
const auto& params = barrier.image->getCreationParameters();
12021240

12031241
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageMemoryBarrier2-subresourceRange-01486
1204-
if (barrier.subresourceRange.baseMipLevel>=params.mipLevels)
1242+
if (barrier.subresourceRange.baseMipLevel >= params.mipLevels) {
1243+
m_logger.log("Invalid Mip level [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
12051244
return false;
1245+
}
12061246
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageMemoryBarrier2-subresourceRange-01488
1207-
if (barrier.subresourceRange.baseArrayLayer>=params.arrayLayers)
1247+
if (barrier.subresourceRange.baseArrayLayer >= params.arrayLayers) {
1248+
m_logger.log("Invalid array layer [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
12081249
return false;
1250+
}
12091251
// TODO: https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageMemoryBarrier2-subresourceRange-01724
12101252
// TODO: https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageMemoryBarrier2-subresourceRange-01725
12111253

@@ -1214,14 +1256,20 @@ inline bool ILogicalDevice::validateMemoryBarrier(const uint32_t queueFamilyInde
12141256
{
12151257
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageMemoryBarrier2-image-03319
12161258
constexpr auto DepthStencilAspects = IGPUImage::EAF_DEPTH_BIT|IGPUImage::EAF_STENCIL_BIT;
1217-
if (aspectMask.value&(~DepthStencilAspects))
1259+
if (aspectMask.value & (~DepthStencilAspects)) {
1260+
m_logger.log("Invalid aspect mask [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
12181261
return false;
1219-
if (bool(aspectMask.value&DepthStencilAspects))
1262+
}
1263+
if (bool(aspectMask.value & DepthStencilAspects)) {
1264+
m_logger.log("Invalid aspect mask [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
12201265
return false;
1266+
}
12211267
}
12221268
//https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageMemoryBarrier2-image-01671
1223-
else if (aspectMask!=IGPUImage::EAF_COLOR_BIT)
1269+
else if (aspectMask != IGPUImage::EAF_COLOR_BIT) {
1270+
m_logger.log("Invalid aspect mask [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
12241271
return false;
1272+
}
12251273

12261274
const bool layoutTransform = barrier.oldLayout!=barrier.newLayout;
12271275
bool ownershipTransfer = false;
@@ -1238,7 +1286,8 @@ inline bool ILogicalDevice::validateMemoryBarrier(const uint32_t queueFamilyInde
12381286
if (layoutTransform || ownershipTransfer)
12391287
{
12401288
const bool srcStageIsHost = inner->srcStageMask.hasFlags(asset::PIPELINE_STAGE_FLAGS::HOST_BIT);
1241-
auto mismatchedLayout = [&params,aspectMask,srcStageIsHost]<bool dst>(const IGPUImage::LAYOUT layout) -> bool
1289+
const auto logger = m_logger.get();
1290+
auto mismatchedLayout = [&params,aspectMask,srcStageIsHost, logger]<bool dst>(const IGPUImage::LAYOUT layout) -> bool
12421291
{
12431292
switch (layout)
12441293
{
@@ -1256,42 +1305,66 @@ inline bool ILogicalDevice::validateMemoryBarrier(const uint32_t queueFamilyInde
12561305
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageMemoryBarrier2-aspectMask-08703
12571306
// and we check the following all at once:
12581307
case IGPUImage::LAYOUT::ATTACHMENT_OPTIMAL:
1259-
if (!dst && srcStageIsHost)
1308+
if (!dst && srcStageIsHost) {
1309+
logger->log("Invalid srcStageMask, must not include HOST_BIT [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
12601310
return true;
1311+
}
12611312
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageMemoryBarrier2-srcQueueFamilyIndex-03938
1262-
if (aspectMask && !params.usage.hasFlags(IGPUImage::E_USAGE_FLAGS::EUF_RENDER_ATTACHMENT_BIT))
1313+
if (aspectMask && !params.usage.hasFlags(IGPUImage::E_USAGE_FLAGS::EUF_RENDER_ATTACHMENT_BIT)) {
1314+
logger->log("Invalid image usage [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
12631315
return true;
1316+
}
12641317
break;
12651318
case IGPUImage::LAYOUT::READ_ONLY_OPTIMAL:
1266-
if (!dst && srcStageIsHost)
1319+
if (!dst && srcStageIsHost) {
1320+
logger->log("Invalid srcStageMask, must not include HOST_BIT [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
12671321
return true;
1322+
}
12681323
{
12691324
constexpr auto ValidUsages = IGPUImage::E_USAGE_FLAGS::EUF_SAMPLED_BIT|IGPUImage::E_USAGE_FLAGS::EUF_INPUT_ATTACHMENT_BIT;
12701325
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageMemoryBarrier2-oldLayout-01211
12711326
if (aspectMask.hasFlags(IGPUImage::EAF_STENCIL_BIT))
12721327
{
1273-
if (!bool(params.actualStencilUsage()&ValidUsages))
1328+
if (!bool(params.actualStencilUsage() & ValidUsages)) {
1329+
logger->log("Invalid stencil usages [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
12741330
return true;
1331+
}
12751332
}
1276-
else if (!bool(params.usage&ValidUsages))
1333+
else if (!bool(params.usage & ValidUsages)) {
1334+
logger->log("Invalid image usages [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
12771335
return true;
1336+
}
12781337
}
12791338
break;
12801339
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageMemoryBarrier2-oldLayout-01212
12811340
case IGPUImage::LAYOUT::TRANSFER_SRC_OPTIMAL:
1282-
if (!dst && srcStageIsHost || !params.usage.hasFlags(IGPUImage::E_USAGE_FLAGS::EUF_TRANSFER_SRC_BIT))
1341+
if (!dst && srcStageIsHost) {
1342+
logger->log("Invalid srcStageMask, must not include HOST_BIT [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
12831343
return true;
1344+
}
1345+
if (!params.usage.hasFlags(IGPUImage::E_USAGE_FLAGS::EUF_TRANSFER_SRC_BIT)) {
1346+
logger->log("Invalid image usage [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
1347+
return true;
1348+
}
12841349
break;
12851350
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageMemoryBarrier2-oldLayout-01213
12861351
case IGPUImage::LAYOUT::TRANSFER_DST_OPTIMAL:
1287-
if (!dst && srcStageIsHost || !params.usage.hasFlags(IGPUImage::E_USAGE_FLAGS::EUF_TRANSFER_DST_BIT))
1352+
if (!dst && srcStageIsHost) {
1353+
logger->log("Invalid srcStageMask, must not include HOST_BIT [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
12881354
return true;
1355+
}
1356+
if(!params.usage.hasFlags(IGPUImage::E_USAGE_FLAGS::EUF_TRANSFER_DST_BIT)) {
1357+
logger->log("Invalid image usage [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
1358+
return true;
1359+
}
12891360
break;
12901361
// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageMemoryBarrier2-oldLayout-01198
12911362
case IGPUImage::LAYOUT::UNDEFINED: [[fallthrough]];
12921363
case IGPUImage::LAYOUT::PREINITIALIZED:
1293-
if constexpr (dst)
1364+
if constexpr (dst) {
1365+
logger->log("Invalid newLayout [%s - %s:%p]", system::ILogger::ELL_ERROR, __FUNCTION__, __FILE__, __LINE__);
12941366
return true;
1367+
}
12951368
break;
12961369
// TODO: https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageMemoryBarrier2-oldLayout-02088
12971370
// TODO: https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-VkImageMemoryBarrier2-srcQueueFamilyIndex-07006

0 commit comments

Comments
 (0)