Skip to content

Commit 8b57210

Browse files
Fixed a few code scanning issues
1 parent 94c1722 commit 8b57210

File tree

5 files changed

+82
-72
lines changed

5 files changed

+82
-72
lines changed

Graphics/GraphicsAccessories/src/ColorConversion.cpp

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2019-2023 Diligent Graphics LLC
2+
* Copyright 2019-2024 Diligent Graphics LLC
33
* Copyright 2015-2019 Egor Yusov
44
*
55
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -38,41 +38,43 @@ namespace
3838
class LinearToGammaMap
3939
{
4040
public:
41-
LinearToGammaMap() noexcept
42-
{
43-
for (Uint32 i = 0; i < m_ToGamma.size(); ++i)
44-
{
45-
m_ToGamma[i] = LinearToGamma(static_cast<float>(i) / 255.f);
46-
}
47-
}
48-
4941
float operator[](Uint8 x) const
5042
{
5143
return m_ToGamma[x];
5244
}
5345

5446
private:
55-
std::array<float, 256> m_ToGamma;
47+
const std::array<float, 256> m_ToGamma{
48+
[]() {
49+
std::array<float, 256> ToGamma;
50+
for (Uint32 i = 0; i < ToGamma.size(); ++i)
51+
{
52+
ToGamma[i] = LinearToGamma(static_cast<float>(i) / 255.f);
53+
}
54+
return ToGamma;
55+
}(),
56+
};
5657
};
5758

5859
class GammaToLinearMap
5960
{
6061
public:
61-
GammaToLinearMap() noexcept
62-
{
63-
for (Uint32 i = 0; i < m_ToLinear.size(); ++i)
64-
{
65-
m_ToLinear[i] = GammaToLinear(static_cast<float>(i) / 255.f);
66-
}
67-
}
68-
6962
float operator[](Uint8 x) const
7063
{
7164
return m_ToLinear[x];
7265
}
7366

7467
private:
75-
std::array<float, 256> m_ToLinear;
68+
const std::array<float, 256> m_ToLinear{
69+
[]() {
70+
std::array<float, 256> ToLinear;
71+
for (Uint32 i = 0; i < ToLinear.size(); ++i)
72+
{
73+
ToLinear[i] = GammaToLinear(static_cast<float>(i) / 255.f);
74+
}
75+
return ToLinear;
76+
}(),
77+
};
7678
};
7779

7880
} // namespace

Graphics/GraphicsEngineD3D12/src/D3D12TypeConversions.cpp

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2019-2023 Diligent Graphics LLC
2+
* Copyright 2019-2024 Diligent Graphics LLC
33
* Copyright 2015-2019 Egor Yusov
44
*
55
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -402,24 +402,26 @@ static D3D12_RESOURCE_STATES ResourceStateFlagToD3D12ResourceState(RESOURCE_STAT
402402
class StateFlagBitPosToD3D12ResourceState
403403
{
404404
public:
405-
StateFlagBitPosToD3D12ResourceState()
406-
{
407-
static_assert((1 << MaxFlagBitPos) == RESOURCE_STATE_MAX_BIT, "This function must be updated to handle new resource state flag");
408-
for (Uint32 bit = 0; bit < FlagBitPosToResStateMap.size(); ++bit)
409-
{
410-
FlagBitPosToResStateMap[bit] = ResourceStateFlagToD3D12ResourceState(static_cast<RESOURCE_STATE>(1 << bit));
411-
}
412-
}
413-
414405
D3D12_RESOURCE_STATES operator()(Uint32 BitPos) const
415406
{
416407
VERIFY(BitPos <= MaxFlagBitPos, "Resource state flag bit position (", BitPos, ") exceeds max bit position (", MaxFlagBitPos, ")");
417408
return FlagBitPosToResStateMap[BitPos];
418409
}
419410

420411
private:
421-
static constexpr Uint32 MaxFlagBitPos = 21;
422-
std::array<D3D12_RESOURCE_STATES, MaxFlagBitPos + 1> FlagBitPosToResStateMap;
412+
static constexpr Uint32 MaxFlagBitPos = 21;
413+
414+
const std::array<D3D12_RESOURCE_STATES, MaxFlagBitPos + 1> FlagBitPosToResStateMap{
415+
[]() {
416+
std::array<D3D12_RESOURCE_STATES, MaxFlagBitPos + 1> BitPosToStateMap;
417+
static_assert((1 << MaxFlagBitPos) == RESOURCE_STATE_MAX_BIT, "This function must be updated to handle new resource state flag");
418+
for (Uint32 bit = 0; bit < BitPosToStateMap.size(); ++bit)
419+
{
420+
BitPosToStateMap[bit] = ResourceStateFlagToD3D12ResourceState(static_cast<RESOURCE_STATE>(1 << bit));
421+
}
422+
return BitPosToStateMap;
423+
}(),
424+
};
423425
};
424426

425427
D3D12_RESOURCE_STATES ResourceStateFlagsToD3D12ResourceStates(RESOURCE_STATE StateFlags)
@@ -515,23 +517,25 @@ static RESOURCE_STATE D3D12ResourceStateToResourceStateFlags(D3D12_RESOURCE_STAT
515517
class D3D12StateFlagBitPosToResourceState
516518
{
517519
public:
518-
D3D12StateFlagBitPosToResourceState()
519-
{
520-
for (Uint32 bit = 0; bit < FlagBitPosToResStateMap.size(); ++bit)
521-
{
522-
FlagBitPosToResStateMap[bit] = D3D12ResourceStateToResourceStateFlags(static_cast<D3D12_RESOURCE_STATES>(1 << bit));
523-
}
524-
}
525-
526520
RESOURCE_STATE operator()(Uint32 BitPos) const
527521
{
528522
VERIFY(BitPos <= MaxFlagBitPos, "Resource state flag bit position (", BitPos, ") exceeds max bit position (", MaxFlagBitPos, ")");
529523
return FlagBitPosToResStateMap[BitPos];
530524
}
531525

532526
private:
533-
static constexpr Uint32 MaxFlagBitPos = 13;
534-
std::array<RESOURCE_STATE, MaxFlagBitPos + 1> FlagBitPosToResStateMap;
527+
static constexpr Uint32 MaxFlagBitPos = 13;
528+
529+
const std::array<RESOURCE_STATE, MaxFlagBitPos + 1> FlagBitPosToResStateMap{
530+
[]() {
531+
std::array<RESOURCE_STATE, MaxFlagBitPos + 1> BitPosToStateMap;
532+
for (Uint32 bit = 0; bit < BitPosToStateMap.size(); ++bit)
533+
{
534+
BitPosToStateMap[bit] = D3D12ResourceStateToResourceStateFlags(static_cast<D3D12_RESOURCE_STATES>(1 << bit));
535+
}
536+
return BitPosToStateMap;
537+
}(),
538+
};
535539
};
536540

537541
RESOURCE_STATE D3D12ResourceStatesToResourceStateFlags(D3D12_RESOURCE_STATES StateFlags)

Graphics/GraphicsEngineD3D12/src/PipelineStateD3D12Impl.cpp

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -118,24 +118,25 @@ class PrimitiveTopology_To_D3D12_PRIMITIVE_TOPOLOGY_TYPE
118118
std::array<D3D12_PRIMITIVE_TOPOLOGY_TYPE, PRIMITIVE_TOPOLOGY_NUM_TOPOLOGIES> m_Map;
119119
};
120120

121-
template <typename TShaderStages>
122121
void BuildRTPipelineDescription(const RayTracingPipelineStateCreateInfo& CreateInfo,
123122
std::vector<D3D12_STATE_SUBOBJECT>& Subobjects,
124123
DynamicLinearAllocator& TempPool,
125-
TShaderStages& ShaderStages) noexcept(false)
124+
PipelineStateD3D12Impl::TShaderStages& ShaderStages) noexcept(false)
126125
{
127126
#define LOG_PSO_ERROR_AND_THROW(...) LOG_ERROR_AND_THROW("Description of ray tracing PSO '", (CreateInfo.PSODesc.Name ? CreateInfo.PSODesc.Name : ""), "' is invalid: ", ##__VA_ARGS__)
128127

129128
Uint32 UnnamedExportIndex = 0;
130129

131130
std::unordered_map<IShader*, LPCWSTR> UniqueShaders;
132131

133-
std::array<typename TShaderStages::value_type*, MAX_SHADERS_IN_PIPELINE> StagesPtr = {};
134-
std::array<Uint32, MAX_SHADERS_IN_PIPELINE> ShaderIndices = {};
132+
using ShaderStageInfo = PipelineStateD3D12Impl::ShaderStageInfo;
135133

136-
for (auto& Stage : ShaderStages)
134+
std::array<ShaderStageInfo*, MAX_SHADERS_IN_PIPELINE> StagesPtr = {};
135+
std::array<Uint32, MAX_SHADERS_IN_PIPELINE> ShaderIndices = {};
136+
137+
for (ShaderStageInfo& Stage : ShaderStages)
137138
{
138-
const auto Idx = GetShaderTypePipelineIndex(Stage.Type, PIPELINE_TYPE_RAY_TRACING);
139+
const Int32 Idx = GetShaderTypePipelineIndex(Stage.Type, PIPELINE_TYPE_RAY_TRACING);
139140
VERIFY_EXPR(StagesPtr[Idx] == nullptr);
140141
StagesPtr[Idx] = &Stage;
141142
}
@@ -147,18 +148,18 @@ void BuildRTPipelineDescription(const RayTracingPipelineStateCreateInfo& CreateI
147148
auto it_inserted = UniqueShaders.emplace(pShader, nullptr);
148149
if (it_inserted.second)
149150
{
150-
const auto StageIdx = GetShaderTypePipelineIndex(pShader->GetDesc().ShaderType, PIPELINE_TYPE_RAY_TRACING);
151-
const auto& Stage = *StagesPtr[StageIdx];
152-
auto& ShaderIndex = ShaderIndices[StageIdx];
151+
const Int32 StageIdx = GetShaderTypePipelineIndex(pShader->GetDesc().ShaderType, PIPELINE_TYPE_RAY_TRACING);
152+
const ShaderStageInfo& Stage = *StagesPtr[StageIdx];
153+
Uint32& ShaderIndex = ShaderIndices[StageIdx];
153154

154155
// shaders must be in same order as in ExtractShaders()
155156
RefCntAutoPtr<ShaderD3D12Impl> pShaderD3D12{pShader, ShaderD3D12Impl::IID_InternalImpl};
156157
VERIFY(pShaderD3D12, "Unexpected shader object implementation");
157158
VERIFY_EXPR(Stage.Shaders[ShaderIndex] == pShaderD3D12);
158159

159-
auto& LibDesc = *TempPool.Construct<D3D12_DXIL_LIBRARY_DESC>();
160-
auto& ExportDesc = *TempPool.Construct<D3D12_EXPORT_DESC>();
161-
const IDataBlob* pByteCode = Stage.ByteCodes[ShaderIndex];
160+
D3D12_DXIL_LIBRARY_DESC& LibDesc = *TempPool.Construct<D3D12_DXIL_LIBRARY_DESC>();
161+
D3D12_EXPORT_DESC& ExportDesc = *TempPool.Construct<D3D12_EXPORT_DESC>();
162+
const IDataBlob* pByteCode = Stage.ByteCodes[ShaderIndex];
162163
++ShaderIndex;
163164

164165
LibDesc.DXILLibrary.BytecodeLength = pByteCode->GetSize();
@@ -189,15 +190,15 @@ void BuildRTPipelineDescription(const RayTracingPipelineStateCreateInfo& CreateI
189190

190191
for (Uint32 i = 0; i < CreateInfo.GeneralShaderCount; ++i)
191192
{
192-
const auto& GeneralShader = CreateInfo.pGeneralShaders[i];
193+
const RayTracingGeneralShaderGroup& GeneralShader = CreateInfo.pGeneralShaders[i];
193194
AddDxilLib(GeneralShader.pShader, GeneralShader.Name);
194195
}
195196

196197
for (Uint32 i = 0; i < CreateInfo.TriangleHitShaderCount; ++i)
197198
{
198-
const auto& TriHitShader = CreateInfo.pTriangleHitShaders[i];
199+
const RayTracingTriangleHitShaderGroup& TriHitShader = CreateInfo.pTriangleHitShaders[i];
199200

200-
auto& HitGroupDesc = *TempPool.Construct<D3D12_HIT_GROUP_DESC>();
201+
D3D12_HIT_GROUP_DESC& HitGroupDesc = *TempPool.Construct<D3D12_HIT_GROUP_DESC>();
201202
HitGroupDesc.HitGroupExport = TempPool.CopyWString(TriHitShader.Name);
202203
HitGroupDesc.Type = D3D12_HIT_GROUP_TYPE_TRIANGLES;
203204
HitGroupDesc.ClosestHitShaderImport = AddDxilLib(TriHitShader.pClosestHitShader, nullptr);
@@ -209,9 +210,9 @@ void BuildRTPipelineDescription(const RayTracingPipelineStateCreateInfo& CreateI
209210

210211
for (Uint32 i = 0; i < CreateInfo.ProceduralHitShaderCount; ++i)
211212
{
212-
const auto& ProcHitShader = CreateInfo.pProceduralHitShaders[i];
213+
const RayTracingProceduralHitShaderGroup& ProcHitShader = CreateInfo.pProceduralHitShaders[i];
213214

214-
auto& HitGroupDesc = *TempPool.Construct<D3D12_HIT_GROUP_DESC>();
215+
D3D12_HIT_GROUP_DESC& HitGroupDesc = *TempPool.Construct<D3D12_HIT_GROUP_DESC>();
215216
HitGroupDesc.HitGroupExport = TempPool.CopyWString(ProcHitShader.Name);
216217
HitGroupDesc.Type = D3D12_HIT_GROUP_TYPE_PROCEDURAL_PRIMITIVE;
217218
HitGroupDesc.ClosestHitShaderImport = AddDxilLib(ProcHitShader.pClosestHitShader, nullptr);
@@ -223,14 +224,14 @@ void BuildRTPipelineDescription(const RayTracingPipelineStateCreateInfo& CreateI
223224

224225
constexpr Uint32 DefaultPayloadSize = sizeof(float) * 8;
225226

226-
auto& PipelineConfig = *TempPool.Construct<D3D12_RAYTRACING_PIPELINE_CONFIG>();
227+
D3D12_RAYTRACING_PIPELINE_CONFIG& PipelineConfig = *TempPool.Construct<D3D12_RAYTRACING_PIPELINE_CONFIG>();
227228

228229
PipelineConfig.MaxTraceRecursionDepth = CreateInfo.RayTracingPipeline.MaxRecursionDepth;
229230
Subobjects.push_back({D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG, &PipelineConfig});
230231

231-
auto& ShaderConfig = *TempPool.Construct<D3D12_RAYTRACING_SHADER_CONFIG>();
232-
ShaderConfig.MaxAttributeSizeInBytes = CreateInfo.MaxAttributeSize == 0 ? D3D12_RAYTRACING_MAX_ATTRIBUTE_SIZE_IN_BYTES : CreateInfo.MaxAttributeSize;
233-
ShaderConfig.MaxPayloadSizeInBytes = CreateInfo.MaxPayloadSize == 0 ? DefaultPayloadSize : CreateInfo.MaxPayloadSize;
232+
D3D12_RAYTRACING_SHADER_CONFIG& ShaderConfig = *TempPool.Construct<D3D12_RAYTRACING_SHADER_CONFIG>();
233+
ShaderConfig.MaxAttributeSizeInBytes = CreateInfo.MaxAttributeSize == 0 ? D3D12_RAYTRACING_MAX_ATTRIBUTE_SIZE_IN_BYTES : CreateInfo.MaxAttributeSize;
234+
ShaderConfig.MaxPayloadSizeInBytes = CreateInfo.MaxPayloadSize == 0 ? DefaultPayloadSize : CreateInfo.MaxPayloadSize;
234235
Subobjects.push_back({D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_SHADER_CONFIG, &ShaderConfig});
235236
#undef LOG_PSO_ERROR_AND_THROW
236237
}

Graphics/GraphicsEngineVulkan/src/VulkanTypeConversions.cpp

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1371,23 +1371,25 @@ static RESOURCE_STATE VkAccessFlagToResourceStates(VkAccessFlagBits AccessFlagBi
13711371
class VkAccessFlagBitPosToResourceState
13721372
{
13731373
public:
1374-
VkAccessFlagBitPosToResourceState()
1375-
{
1376-
for (Uint32 bit = 0; bit < FlagBitPosToResourceState.size(); ++bit)
1377-
{
1378-
FlagBitPosToResourceState[bit] = VkAccessFlagToResourceStates(static_cast<VkAccessFlagBits>(1 << bit));
1379-
}
1380-
}
1381-
13821374
RESOURCE_STATE operator()(Uint32 BitPos) const
13831375
{
13841376
VERIFY(BitPos <= MaxFlagBitPos, "Resource state flag bit position (", BitPos, ") exceeds max bit position (", Uint32{MaxFlagBitPos}, ")");
13851377
return FlagBitPosToResourceState[BitPos];
13861378
}
13871379

13881380
private:
1389-
static constexpr const Uint32 MaxFlagBitPos = 20;
1390-
std::array<RESOURCE_STATE, MaxFlagBitPos + 1> FlagBitPosToResourceState;
1381+
static constexpr const Uint32 MaxFlagBitPos = 20;
1382+
1383+
const std::array<RESOURCE_STATE, MaxFlagBitPos + 1> FlagBitPosToResourceState{
1384+
[]() {
1385+
std::array<RESOURCE_STATE, MaxFlagBitPos + 1> BitPosToState;
1386+
for (Uint32 bit = 0; bit < BitPosToState.size(); ++bit)
1387+
{
1388+
BitPosToState[bit] = VkAccessFlagToResourceStates(static_cast<VkAccessFlagBits>(1 << bit));
1389+
}
1390+
return BitPosToState;
1391+
}(),
1392+
};
13911393
};
13921394

13931395

Graphics/ShaderTools/src/GLSLParsingTools.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ static TEXTURE_FORMAT ParseStandardGLSLImageFormat(const std::string& Format)
102102
case 2: return TEX_FORMAT_RG32_FLOAT;
103103
case 3: return TEX_FORMAT_RGB32_FLOAT;
104104
case 4: return TEX_FORMAT_RGBA32_FLOAT;
105+
default: return TEX_FORMAT_UNKNOWN;
105106
}
106107

107108
default: return TEX_FORMAT_UNKNOWN;

0 commit comments

Comments
 (0)