summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/bgfx/3rdparty/glslang/StandAlone/spirv-remap.cpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/bgfx/3rdparty/glslang/StandAlone/spirv-remap.cpp')
-rw-r--r--3rdparty/bgfx/3rdparty/glslang/StandAlone/spirv-remap.cpp48
1 files changed, 40 insertions, 8 deletions
diff --git a/3rdparty/bgfx/3rdparty/glslang/StandAlone/spirv-remap.cpp b/3rdparty/bgfx/3rdparty/glslang/StandAlone/spirv-remap.cpp
index 5e2ed0aeafc..15c3ac513bd 100644
--- a/3rdparty/bgfx/3rdparty/glslang/StandAlone/spirv-remap.cpp
+++ b/3rdparty/bgfx/3rdparty/glslang/StandAlone/spirv-remap.cpp
@@ -105,6 +105,32 @@ namespace {
}
}
+ // Read strings from a file
+ void read(std::vector<std::string>& strings, const std::string& inFilename, int verbosity)
+ {
+ std::ifstream fp;
+
+ if (verbosity > 0)
+ logHandler(std::string(" reading: ") + inFilename);
+
+ strings.clear();
+ fp.open(inFilename, std::fstream::in);
+
+ if (fp.fail())
+ errHandler("error opening file for read: ");
+
+ std::string line;
+ while (std::getline(fp, line))
+ {
+ // Ignore empty lines and lines starting with the comment marker '#'.
+ if (line.length() == 0 || line[0] == '#') {
+ continue;
+ }
+
+ strings.push_back(line);
+ }
+ }
+
void write(std::vector<SpvWord>& spv, const std::string& outFile, int verbosity)
{
if (outFile.empty())
@@ -144,6 +170,7 @@ namespace {
<< " [--dce (all|types|funcs)]"
<< " [--opt (all|loadstore)]"
<< " [--strip-all | --strip all | -s]"
+ << " [--strip-white-list]"
<< " [--do-everything]"
<< " --input | -i file1 [file2...] --output|-o DESTDIR"
<< std::endl;
@@ -156,16 +183,18 @@ namespace {
// grind through each SPIR in turn
void execute(const std::vector<std::string>& inputFile, const std::string& outputDir,
- int opts, int verbosity)
+ const std::string& whiteListFile, int opts, int verbosity)
{
+ std::vector<std::string> whiteListStrings;
+ if(!whiteListFile.empty())
+ read(whiteListStrings, whiteListFile, verbosity);
+
for (auto it = inputFile.cbegin(); it != inputFile.cend(); ++it) {
const std::string &filename = *it;
std::vector<SpvWord> spv;
read(spv, filename, verbosity);
- spv::spirvbin_t(verbosity).remap(spv, opts);
-
+ spv::spirvbin_t(verbosity).remap(spv, whiteListStrings, opts);
const std::string outfile = outputDir + path_sep_char() + basename(filename);
-
write(spv, outfile, verbosity);
}
@@ -176,6 +205,7 @@ namespace {
// Parse command line options
void parseCmdLine(int argc, char** argv, std::vector<std::string>& inputFile,
std::string& outputDir,
+ std::string& stripWhiteListFile,
int& options,
int& verbosity)
{
@@ -245,6 +275,9 @@ namespace {
options = options | spv::spirvbin_t::STRIP;
++a;
}
+ } else if (arg == "--strip-white-list") {
+ ++a;
+ stripWhiteListFile = argv[a++];
} else if (arg == "--dce") {
// Parse comma (or colon, etc) separated list of things to dce
++a;
@@ -315,6 +348,7 @@ int main(int argc, char** argv)
{
std::vector<std::string> inputFile;
std::string outputDir;
+ std::string whiteListFile;
int opts;
int verbosity;
@@ -329,15 +363,13 @@ int main(int argc, char** argv)
if (argc < 2)
usage(argv[0]);
- parseCmdLine(argc, argv, inputFile, outputDir, opts, verbosity);
+ parseCmdLine(argc, argv, inputFile, outputDir, whiteListFile, opts, verbosity);
if (outputDir.empty())
usage(argv[0], "Output directory required");
- std::string errmsg;
-
// Main operations: read, remap, and write.
- execute(inputFile, outputDir, opts, verbosity);
+ execute(inputFile, outputDir, whiteListFile, opts, verbosity);
// If we get here, everything went OK! Nothing more to be done.
}