Skip to content

Commit 4244af9

Browse files
committed
adding SpvOptimizerMessageConsumer and SpvTargetEnvFromSPIRV to the SPIRVTools.hpp, ConvertUBOToPushConstantPass-> move in the anonymous namespace
1 parent 774c370 commit 4244af9

File tree

3 files changed

+84
-94
lines changed

3 files changed

+84
-94
lines changed

Graphics/ShaderTools/include/SPIRVTools.hpp

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,90 @@
2929
#include <vector>
3030
#include <string>
3131

32+
#include "../../Primitives/interface/Errors.hpp"
3233
#include "FlagEnum.h"
3334

3435
#include "spirv-tools/libspirv.h"
3536

3637
namespace Diligent
3738
{
3839

40+
namespace
41+
{
42+
43+
void SpvOptimizerMessageConsumer(
44+
spv_message_level_t level,
45+
const char* /* source */,
46+
const spv_position_t& /* position */,
47+
const char* message)
48+
{
49+
const char* LevelText = "message";
50+
DEBUG_MESSAGE_SEVERITY MsgSeverity = DEBUG_MESSAGE_SEVERITY_INFO;
51+
switch (level)
52+
{
53+
case SPV_MSG_FATAL:
54+
// Unrecoverable error due to environment (e.g. out of memory)
55+
LevelText = "fatal error";
56+
MsgSeverity = DEBUG_MESSAGE_SEVERITY_FATAL_ERROR;
57+
break;
58+
59+
case SPV_MSG_INTERNAL_ERROR:
60+
// Unrecoverable error due to SPIRV-Tools internals (e.g. unimplemented feature)
61+
LevelText = "internal error";
62+
MsgSeverity = DEBUG_MESSAGE_SEVERITY_ERROR;
63+
break;
64+
65+
case SPV_MSG_ERROR:
66+
// Normal error due to user input.
67+
LevelText = "error";
68+
MsgSeverity = DEBUG_MESSAGE_SEVERITY_ERROR;
69+
break;
70+
71+
case SPV_MSG_WARNING:
72+
LevelText = "warning";
73+
MsgSeverity = DEBUG_MESSAGE_SEVERITY_WARNING;
74+
break;
75+
76+
case SPV_MSG_INFO:
77+
LevelText = "info";
78+
MsgSeverity = DEBUG_MESSAGE_SEVERITY_INFO;
79+
break;
80+
81+
case SPV_MSG_DEBUG:
82+
LevelText = "debug";
83+
MsgSeverity = DEBUG_MESSAGE_SEVERITY_INFO;
84+
break;
85+
}
86+
87+
if (level == SPV_MSG_FATAL || level == SPV_MSG_INTERNAL_ERROR || level == SPV_MSG_ERROR || level == SPV_MSG_WARNING)
88+
LOG_DEBUG_MESSAGE(MsgSeverity, "Spirv optimizer ", LevelText, ": ", message);
89+
}
90+
91+
spv_target_env SpvTargetEnvFromSPIRV(const std::vector<uint32_t>& SPIRV)
92+
{
93+
if (SPIRV.size() < 2)
94+
{
95+
// Invalid SPIRV
96+
return SPV_ENV_VULKAN_1_0;
97+
}
98+
99+
#define SPV_SPIRV_VERSION_WORD(MAJOR, MINOR) ((uint32_t(uint8_t(MAJOR)) << 16) | (uint32_t(uint8_t(MINOR)) << 8))
100+
switch (SPIRV[1])
101+
{
102+
case SPV_SPIRV_VERSION_WORD(1, 0): return SPV_ENV_VULKAN_1_0;
103+
case SPV_SPIRV_VERSION_WORD(1, 1): return SPV_ENV_VULKAN_1_0;
104+
case SPV_SPIRV_VERSION_WORD(1, 2): return SPV_ENV_VULKAN_1_0;
105+
case SPV_SPIRV_VERSION_WORD(1, 3): return SPV_ENV_VULKAN_1_1;
106+
case SPV_SPIRV_VERSION_WORD(1, 4): return SPV_ENV_VULKAN_1_1_SPIRV_1_4;
107+
case SPV_SPIRV_VERSION_WORD(1, 5): return SPV_ENV_VULKAN_1_2;
108+
case SPV_SPIRV_VERSION_WORD(1, 6): return SPV_ENV_VULKAN_1_3;
109+
default: return SPV_ENV_VULKAN_1_3;
110+
}
111+
#undef SPV_SPIRV_VERSION_WORD
112+
}
113+
114+
} // namespace
115+
39116
enum SPIRV_OPTIMIZATION_FLAGS : Uint32
40117
{
41118
SPIRV_OPTIMIZATION_FLAG_NONE = 0u,

Graphics/ShaderTools/src/ConvertUBOToPushConstant.cpp

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -40,19 +40,9 @@
4040
namespace Diligent
4141
{
4242

43-
namespace SPIRVToolsUtil
43+
namespace
4444
{
4545

46-
//Forward declaration
47-
void SpvOptimizerMessageConsumer(
48-
spv_message_level_t level,
49-
const char* /* source */,
50-
const spv_position_t& /* position */,
51-
const char* message);
52-
53-
//Forward declaration
54-
spv_target_env SpvTargetEnvFromSPIRV(const std::vector<uint32_t>& SPIRV);
55-
5646
// A pass that converts a uniform buffer variable to a push constant.
5747
// This pass:
5848
// 1. Finds the variable with the specified block name
@@ -386,21 +376,21 @@ class ConvertUBOToPushConstantPass : public spvtools::opt::Pass
386376
std::string m_BlockName;
387377
};
388378

389-
} // namespace SPIRVToolsUtil
379+
} // namespace
390380

391381
std::vector<uint32_t> ConvertUBOToPushConstants(
392382
const std::vector<uint32_t>& SPIRV,
393383
const std::string& BlockName)
394384
{
395-
spv_target_env TargetEnv = SPIRVToolsUtil::SpvTargetEnvFromSPIRV(SPIRV);
385+
spv_target_env TargetEnv = SpvTargetEnvFromSPIRV(SPIRV);
396386

397387
spvtools::Optimizer optimizer(TargetEnv);
398388

399-
optimizer.SetMessageConsumer(SPIRVToolsUtil::SpvOptimizerMessageConsumer);
389+
optimizer.SetMessageConsumer(SpvOptimizerMessageConsumer);
400390

401391
// Register the pass to convert UBO to push constant using custom out-of-tree pass
402392
optimizer.RegisterPass(spvtools::Optimizer::PassToken(
403-
std::make_unique<SPIRVToolsUtil::ConvertUBOToPushConstantPass>(BlockName)));
393+
std::make_unique<ConvertUBOToPushConstantPass>(BlockName)));
404394

405395
spvtools::OptimizerOptions options;
406396
#ifdef DILIGENT_DEVELOPMENT

Graphics/ShaderTools/src/SPIRVTools.cpp

Lines changed: 2 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -32,92 +32,15 @@
3232
namespace Diligent
3333
{
3434

35-
namespace SPIRVToolsUtil
36-
{
37-
38-
void SpvOptimizerMessageConsumer(
39-
spv_message_level_t level,
40-
const char* /* source */,
41-
const spv_position_t& /* position */,
42-
const char* message)
43-
{
44-
const char* LevelText = "message";
45-
DEBUG_MESSAGE_SEVERITY MsgSeverity = DEBUG_MESSAGE_SEVERITY_INFO;
46-
switch (level)
47-
{
48-
case SPV_MSG_FATAL:
49-
// Unrecoverable error due to environment (e.g. out of memory)
50-
LevelText = "fatal error";
51-
MsgSeverity = DEBUG_MESSAGE_SEVERITY_FATAL_ERROR;
52-
break;
53-
54-
case SPV_MSG_INTERNAL_ERROR:
55-
// Unrecoverable error due to SPIRV-Tools internals (e.g. unimplemented feature)
56-
LevelText = "internal error";
57-
MsgSeverity = DEBUG_MESSAGE_SEVERITY_ERROR;
58-
break;
59-
60-
case SPV_MSG_ERROR:
61-
// Normal error due to user input.
62-
LevelText = "error";
63-
MsgSeverity = DEBUG_MESSAGE_SEVERITY_ERROR;
64-
break;
65-
66-
case SPV_MSG_WARNING:
67-
LevelText = "warning";
68-
MsgSeverity = DEBUG_MESSAGE_SEVERITY_WARNING;
69-
break;
70-
71-
case SPV_MSG_INFO:
72-
LevelText = "info";
73-
MsgSeverity = DEBUG_MESSAGE_SEVERITY_INFO;
74-
break;
75-
76-
case SPV_MSG_DEBUG:
77-
LevelText = "debug";
78-
MsgSeverity = DEBUG_MESSAGE_SEVERITY_INFO;
79-
break;
80-
}
81-
82-
if (level == SPV_MSG_FATAL || level == SPV_MSG_INTERNAL_ERROR || level == SPV_MSG_ERROR || level == SPV_MSG_WARNING)
83-
LOG_DEBUG_MESSAGE(MsgSeverity, "Spirv optimizer ", LevelText, ": ", message);
84-
}
85-
86-
#define SPV_SPIRV_VERSION_WORD(MAJOR, MINOR) ((uint32_t(uint8_t(MAJOR)) << 16) | (uint32_t(uint8_t(MINOR)) << 8))
87-
88-
spv_target_env SpvTargetEnvFromSPIRV(const std::vector<uint32_t>& SPIRV)
89-
{
90-
if (SPIRV.size() < 2)
91-
{
92-
// Invalid SPIRV
93-
return SPV_ENV_VULKAN_1_0;
94-
}
95-
96-
switch (SPIRV[1])
97-
{
98-
case SPV_SPIRV_VERSION_WORD(1, 0): return SPV_ENV_VULKAN_1_0;
99-
case SPV_SPIRV_VERSION_WORD(1, 1): return SPV_ENV_VULKAN_1_0;
100-
case SPV_SPIRV_VERSION_WORD(1, 2): return SPV_ENV_VULKAN_1_0;
101-
case SPV_SPIRV_VERSION_WORD(1, 3): return SPV_ENV_VULKAN_1_1;
102-
case SPV_SPIRV_VERSION_WORD(1, 4): return SPV_ENV_VULKAN_1_1_SPIRV_1_4;
103-
case SPV_SPIRV_VERSION_WORD(1, 5): return SPV_ENV_VULKAN_1_2;
104-
case SPV_SPIRV_VERSION_WORD(1, 6): return SPV_ENV_VULKAN_1_3;
105-
default: return SPV_ENV_VULKAN_1_3;
106-
}
107-
}
108-
109-
} // namespace SPIRVToolsUtil
110-
111-
#undef SPV_SPIRV_VERSION_WORD
11235
std::vector<uint32_t> OptimizeSPIRV(const std::vector<uint32_t>& SrcSPIRV, spv_target_env TargetEnv, SPIRV_OPTIMIZATION_FLAGS Passes)
11336
{
11437
VERIFY_EXPR(Passes != SPIRV_OPTIMIZATION_FLAG_NONE);
11538

11639
if (TargetEnv == SPV_ENV_MAX)
117-
TargetEnv = SPIRVToolsUtil::SpvTargetEnvFromSPIRV(SrcSPIRV);
40+
TargetEnv = SpvTargetEnvFromSPIRV(SrcSPIRV);
11841

11942
spvtools::Optimizer SpirvOptimizer(TargetEnv);
120-
SpirvOptimizer.SetMessageConsumer(SPIRVToolsUtil::SpvOptimizerMessageConsumer);
43+
SpirvOptimizer.SetMessageConsumer(SpvOptimizerMessageConsumer);
12144

12245
spvtools::OptimizerOptions Options;
12346
#ifndef DILIGENT_DEVELOPMENT

0 commit comments

Comments
 (0)