Remove use of iostream in filamat (#549)

This commit is contained in:
Ben Doherty
2018-11-29 10:35:37 -08:00
committed by GitHub
parent 97d5f0f52c
commit fe4907d0ff
4 changed files with 58 additions and 50 deletions

View File

@@ -16,7 +16,6 @@
#include "GLSLPostProcessor.h"
#include <iostream>
#include <sstream>
#include <vector>
@@ -29,6 +28,8 @@
#include "sca/builtinResource.h"
#include "sca/GLSLTools.h"
#include <utils/Log.h>
using namespace glslang;
using namespace spirv_cross;
using namespace spvtools;
@@ -54,7 +55,7 @@ static uint32_t shaderVersionFromModel(filament::driver::ShaderModel model) {
}
static void errorHandler(const std::string& str) {
std::cerr << str << std::endl;
utils::slog.e << str << utils::io::endl;
}
static std::string stringifySpvOptimizerMessage(spv_message_level_t level, const char* source,
@@ -136,7 +137,7 @@ bool GLSLPostProcessor::process(const std::string& inputShader,
if (targetApi == TargetApi::OPENGL && mOptimization == MaterialBuilder::Optimization::NONE) {
*outputGlsl = inputShader;
if (mPrintShaders) {
std::cout << *outputGlsl << std::endl;
utils::slog.i << *outputGlsl << utils::io::endl;
}
return true;
}
@@ -164,7 +165,7 @@ bool GLSLPostProcessor::process(const std::string& inputShader,
EShMessages msg = GLSLTools::glslangFlagsFromTargetApi(targetApi);
bool ok = tShader.parse(&DefaultTBuiltInResource, mLangVersion, false, msg);
if (!ok) {
std::cerr << tShader.getInfoLog() << std::endl;
utils::slog.e << tShader.getInfoLog() << utils::io::endl;
return false;
}
@@ -173,7 +174,7 @@ bool GLSLPostProcessor::process(const std::string& inputShader,
// SPIR-V types
bool linkOk = program.link(msg);
if (!linkOk) {
std::cerr << tShader.getInfoLog() << std::endl;
utils::slog.e << tShader.getInfoLog() << utils::io::endl;
return false;
}
@@ -182,8 +183,8 @@ bool GLSLPostProcessor::process(const std::string& inputShader,
if (mSpirvOutput) {
GlslangToSpv(*program.getIntermediate(mShLang), *mSpirvOutput);
} else {
std::cerr << "GLSL post-processor invoked with optimization level NONE"
<< std::endl;
utils::slog.e << "GLSL post-processor invoked with optimization level NONE"
<< utils::io::endl;
}
break;
case MaterialBuilder::Optimization::PREPROCESSOR:
@@ -198,7 +199,7 @@ bool GLSLPostProcessor::process(const std::string& inputShader,
if (mGlslOutput) {
*mGlslOutput = shrinkString(*mGlslOutput);
if (mPrintShaders) {
std::cout << *mGlslOutput << std::endl;
utils::slog.i << *mGlslOutput << utils::io::endl;
}
}
return true;
@@ -218,7 +219,7 @@ void GLSLPostProcessor::preprocessOptimization(glslang::TShader& tShader,
msg, &glsl, forbidIncluder);
if (!ok) {
std::cerr << tShader.getInfoLog() << std::endl;
utils::slog.e << tShader.getInfoLog() << utils::io::endl;
}
if (mSpirvOutput) {
@@ -233,7 +234,7 @@ void GLSLPostProcessor::preprocessOptimization(glslang::TShader& tShader,
// SPIR-V types
bool linkOk = program.link(msg);
if (!ok || !linkOk) {
std::cerr << spirvShader.getInfoLog() << std::endl;
utils::slog.e << spirvShader.getInfoLog() << utils::io::endl;
} else {
GlslangToSpv(*program.getIntermediate(mShLang), *mSpirvOutput);
}
@@ -255,7 +256,8 @@ void GLSLPostProcessor::fullOptimization(const TShader& tShader,
Optimizer optimizer(SPV_ENV_UNIVERSAL_1_3);
optimizer.SetMessageConsumer([](spv_message_level_t level,
const char* source, const spv_position_t& position, const char* message) {
std::cerr << stringifySpvOptimizerMessage(level, source, position, message) << std::endl;
utils::slog.e << stringifySpvOptimizerMessage(level, source, position, message)
<< utils::io::endl;
});
if (mOptimization == MaterialBuilder::Optimization::SIZE) {
@@ -265,7 +267,7 @@ void GLSLPostProcessor::fullOptimization(const TShader& tShader,
}
if (!optimizer.Run(spirv.data(), spirv.size(), &spirv)) {
std::cerr << "SPIR-V optimizer pass failed" << std::endl;
utils::slog.e << "SPIR-V optimizer pass failed" << utils::io::endl;
return;
}

View File

@@ -18,10 +18,11 @@
#include "GLSLTools.h"
#include <iostream>
#include <intermediate.h>
#include <localintermediate.h>
#include <utils/Log.h>
using namespace glslang;
namespace ASTUtils {
@@ -232,67 +233,67 @@ public:
void pad() {
for (int i = 0; i < depth; ++i) {
std::cerr << " ";
utils::slog.e << " ";
}
}
bool visitBinary(TVisit, TIntermBinary* node) override {
pad();
std::cerr << "Binary " << op2Str(node->getOp());
std::cerr << std::endl;
utils::slog.e << "Binary " << op2Str(node->getOp());
utils::slog.e << utils::io::endl;
return true;
}
bool visitUnary(TVisit, TIntermUnary* node) override {
pad();
std::cerr << "Unary" << op2Str(node->getOp());
std::cerr << std::endl;
utils::slog.e << "Unary" << op2Str(node->getOp());
utils::slog.e << utils::io::endl;
return true;
}
bool visitAggregate(TVisit, TIntermAggregate* node) override {
pad();
std::cerr << "Aggregate" << op2Str(node->getOp());
std::cerr << std::endl;
utils::slog.e << "Aggregate" << op2Str(node->getOp());
utils::slog.e << utils::io::endl;
return true;
}
bool visitSelection(TVisit, TIntermSelection* node) override {
pad();
std::cerr << "Selection";
std::cerr << std::endl;
utils::slog.e << "Selection";
utils::slog.e << utils::io::endl;
return true;
}
void visitConstantUnion(TIntermConstantUnion* node) override {
pad();
std::cerr << "ConstantUnion";
std::cerr << std::endl;
utils::slog.e << "ConstantUnion";
utils::slog.e << utils::io::endl;
}
void visitSymbol(TIntermSymbol* node) override {
pad();
std::cerr << "Symbol " << node->getAsSymbolNode()->getName().c_str();
std::cerr << std::endl;
utils::slog.e << "Symbol " << node->getAsSymbolNode()->getName().c_str();
utils::slog.e << utils::io::endl;
}
bool visitLoop(TVisit, TIntermLoop* node) override {
pad();
std::cerr << "Loop";
std::cerr << std::endl;
utils::slog.e << "Loop";
utils::slog.e << utils::io::endl;
return true;
}
bool visitBranch(TVisit, TIntermBranch* node) override {
pad();
std::cerr << "Branch";
std::cerr << std::endl;
utils::slog.e << "Branch";
utils::slog.e << utils::io::endl;
return true;
}
bool visitSwitch(TVisit, TIntermSwitch* node) override {
std::cerr << "Binary ";
std::cerr << std::endl;
utils::slog.e << "Binary ";
utils::slog.e << utils::io::endl;
return true;
}
};

View File

@@ -66,8 +66,8 @@ bool GLSLTools::analyzeFragmentShader(const std::string& shaderCode, ShaderModel
EShMessages msg = glslangFlagsFromTargetApi(targetApi);
bool ok = tShader.parse(&DefaultTBuiltInResource, version, false, msg);
if (!ok) {
std::cerr << "ERROR: Unable to parse fragment shader:" << std::endl;
std::cerr << tShader.getInfoLog() << std::flush;
utils::slog.e << "ERROR: Unable to parse fragment shader:" << utils::io::endl;
utils::slog.e << tShader.getInfoLog() << utils::io::flush;
return false;
}
@@ -75,8 +75,8 @@ bool GLSLTools::analyzeFragmentShader(const std::string& shaderCode, ShaderModel
// Check there is a material function definition in this shader.
TIntermNode* materialFctNode = ASTUtils::getFunctionByNameOnly("material", *root);
if (materialFctNode == nullptr) {
std::cerr << "ERROR: Invalid fragment shader:" << std::endl;
std::cerr << "ERROR: Unable to find material() function" << std::endl;
utils::slog.e << "ERROR: Invalid fragment shader:" << utils::io::endl;
utils::slog.e << "ERROR: Unable to find material() function" << utils::io::endl;
return false;
}
@@ -84,8 +84,8 @@ bool GLSLTools::analyzeFragmentShader(const std::string& shaderCode, ShaderModel
TIntermAggregate* prepareMaterialNode = ASTUtils::getFunctionByNameOnly("prepareMaterial",
*root);
if (prepareMaterialNode == nullptr) {
std::cerr << "ERROR: Invalid fragment shader:" << std::endl;
std::cerr << "ERROR: Unable to find prepareMaterial() function" << std::endl;
utils::slog.e << "ERROR: Invalid fragment shader:" << utils::io::endl;
utils::slog.e << "ERROR: Unable to find prepareMaterial() function" << utils::io::endl;
return false;
}
@@ -93,8 +93,8 @@ bool GLSLTools::analyzeFragmentShader(const std::string& shaderCode, ShaderModel
bool prepareMaterialCalled = isFunctionCalled(prepareMaterialSignature,
*materialFctNode, *root);
if (!prepareMaterialCalled) {
std::cerr << "ERROR: Invalid fragment shader:" << std::endl;
std::cerr << "ERROR: prepareMaterial() is not called" << std::endl;
utils::slog.e << "ERROR: Invalid fragment shader:" << utils::io::endl;
utils::slog.e << "ERROR: prepareMaterial() is not called" << utils::io::endl;
return false;
}
@@ -115,8 +115,8 @@ bool GLSLTools::analyzeVertexShader(const std::string& shaderCode, ShaderModel m
EShMessages msg = glslangFlagsFromTargetApi(targetApi);
bool ok = tShader.parse(&DefaultTBuiltInResource, version, false, msg);
if (!ok) {
std::cerr << "ERROR: Unable to parse vertex shader" << std::endl;
std::cerr << tShader.getInfoLog() << std::flush;
utils::slog.e << "ERROR: Unable to parse vertex shader" << utils::io::endl;
utils::slog.e << tShader.getInfoLog() << utils::io::flush;
return false;
}
@@ -124,8 +124,8 @@ bool GLSLTools::analyzeVertexShader(const std::string& shaderCode, ShaderModel m
// Check there is a material function definition in this shader.
TIntermNode* materialFctNode = ASTUtils::getFunctionByNameOnly("materialVertex", *root);
if (materialFctNode == nullptr) {
std::cerr << "ERROR: Invalid vertex shader" << std::endl;
std::cerr << "ERROR: Unable to find materialVertex() function" << std::endl;
utils::slog.e << "ERROR: Invalid vertex shader" << utils::io::endl;
utils::slog.e << "ERROR: Unable to find materialVertex() function" << utils::io::endl;
return false;
}
@@ -167,7 +167,7 @@ bool GLSLTools::findProperties(const filamat::MaterialBuilder& builderIn,
if (!ok) {
// Even with all properties set the shader doesn't build. This is likely a syntax error
// with user provided code.
std::cerr << tShader.getInfoLog() << std::endl;
utils::slog.e << tShader.getInfoLog() << utils::io::endl;
return false;
}
@@ -184,7 +184,8 @@ bool GLSLTools::findPropertyWritesOperations(const std::string& functionName, si
glslang::TIntermAggregate* functionMaterialDef =
ASTUtils::getFunctionBySignature(functionName, *rootNode);
if (functionMaterialDef == nullptr) {
std::cerr << "Unable to find function '" << functionName << "' definition." << std::endl;
utils::slog.e << "Unable to find function '" << functionName << "' definition."
<< utils::io::endl;
return false;
}
@@ -192,8 +193,8 @@ bool GLSLTools::findPropertyWritesOperations(const std::string& functionName, si
ASTUtils::getFunctionParameters(functionMaterialDef, functionMaterialParameters);
if (functionMaterialParameters.size() <= parameterIdx) {
std::cerr << "Unable to find function '" << functionName << "' parameterIndex: " <<
parameterIdx << std::endl;
utils::slog.e << "Unable to find function '" << functionName << "' parameterIndex: " <<
parameterIdx << utils::io::endl;
return false;
}
@@ -207,7 +208,8 @@ bool GLSLTools::findPropertyWritesOperations(const std::string& functionName, si
std::deque<Symbol> symbols;
bool ok = findSymbolsUsage(functionName, *rootNode, symbols);
if (!ok) {
std::cerr << "Unable to trace usage of symbols in function '" << functionName << std::endl;
utils::slog.e << "Unable to trace usage of symbols in function '" << functionName
<< utils::io::endl;
return false;
}

View File

@@ -86,6 +86,7 @@ private:
friend ostream& hex(ostream& s) noexcept;
friend ostream& dec(ostream& s) noexcept;
friend ostream& endl(ostream& s) noexcept;
friend ostream& flush(ostream& s) noexcept;
enum type {
SHORT, USHORT, INT, UINT, LONG, ULONG, LONG_LONG, ULONG_LONG, DOUBLE, LONG_DOUBLE
@@ -132,6 +133,7 @@ inline ostream& operator<<(ostream& stream, const VECTOR<T>& v) {
inline ostream& hex(ostream& s) noexcept { return s.hex(); }
inline ostream& dec(ostream& s) noexcept { return s.dec(); }
inline ostream& endl(ostream& s) noexcept { s << "\n"; return s.flush(); }
inline ostream& flush(ostream& s) noexcept { return s.flush(); }
#else // UTILS_TINY_IO
@@ -139,6 +141,7 @@ using ostream = std::ostream;
inline ostream& hex(ostream& s) noexcept { return s << std::hex; }
inline ostream& dec(ostream& s) noexcept { return s << std::dec; }
inline ostream& endl(ostream& s) noexcept { return s << std::endl; }
inline ostream& flush(ostream& s) noexcept { return s << std::flush; }
#endif // UTILS_TINY_IO
} // namespace io