bgfx/tools/shaderc/shaderc.h

184 lines
4.5 KiB
C
Raw Normal View History

/*
2020-01-15 08:37:06 +03:00
* Copyright 2011-2020 Branimir Karadzic. All rights reserved.
2016-01-01 11:11:04 +03:00
* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
*/
#ifndef SHADERC_H_HEADER_GUARD
#define SHADERC_H_HEADER_GUARD
2016-02-01 03:00:02 +03:00
namespace bgfx
{
extern bool g_verbose;
}
#define _BX_TRACE(_format, ...) \
BX_MACRO_BLOCK_BEGIN \
2016-01-31 03:15:25 +03:00
if (bgfx::g_verbose) \
{ \
2016-10-01 22:38:41 +03:00
fprintf(stdout, BX_FILE_LINE_LITERAL "" _format "\n", ##__VA_ARGS__); \
} \
BX_MACRO_BLOCK_END
#define _BX_WARN(_condition, _format, ...) \
BX_MACRO_BLOCK_BEGIN \
if (!(_condition) ) \
{ \
BX_TRACE("WARN " _format, ##__VA_ARGS__); \
} \
BX_MACRO_BLOCK_END
#define _BX_CHECK(_condition, _format, ...) \
BX_MACRO_BLOCK_BEGIN \
if (!(_condition) ) \
{ \
BX_TRACE("CHECK " _format, ##__VA_ARGS__); \
bx::debugBreak(); \
} \
BX_MACRO_BLOCK_END
#define BX_TRACE _BX_TRACE
#define BX_WARN _BX_WARN
#define BX_CHECK _BX_CHECK
#ifndef SHADERC_CONFIG_HLSL
# define SHADERC_CONFIG_HLSL BX_PLATFORM_WINDOWS
#endif // SHADERC_CONFIG_HLSL
#include <alloca.h>
#include <stdint.h>
#include <string.h>
#include <algorithm>
#include <string>
#include <vector>
#include <unordered_map>
#include <bx/bx.h>
#include <bx/debug.h>
#include <bx/commandline.h>
#include <bx/endian.h>
#include <bx/uint32_t.h>
#include <bx/string.h>
#include <bx/hash.h>
2017-07-16 07:01:08 +03:00
#include <bx/file.h>
2020-03-29 06:06:03 +03:00
#include "../../src/vertexlayout.h"
2016-01-31 03:15:25 +03:00
namespace bgfx
{
2016-01-31 03:15:25 +03:00
extern bool g_verbose;
class LineReader : public bx::ReaderI
{
2016-01-31 03:15:25 +03:00
public:
LineReader(const char* _str)
: m_str(_str)
, m_pos(0)
, m_size(bx::strLen(_str) )
2016-01-31 03:15:25 +03:00
{
}
2017-07-15 10:17:29 +03:00
virtual int32_t read(void* _data, int32_t _size, bx::Error* _err) override
2016-01-31 03:15:25 +03:00
{
if (m_str[m_pos] == '\0'
|| m_pos == m_size)
{
BX_ERROR_SET(_err, BX_ERROR_READERWRITER_EOF, "LineReader: EOF.");
return 0;
}
uint32_t pos = m_pos;
const char* str = &m_str[pos];
const char* nl = bx::strFindNl(bx::StringView(str, str + (m_size - pos))).getPtr();
pos += (uint32_t)(nl - str);
2016-01-31 03:15:25 +03:00
const char* eol = &m_str[pos];
2016-01-31 03:15:25 +03:00
uint32_t size = bx::uint32_min(uint32_t(eol - str), _size);
2016-01-31 03:15:25 +03:00
bx::memCopy(_data, str, size);
m_pos += size;
2016-01-31 03:15:25 +03:00
return size;
2016-01-31 03:15:25 +03:00
}
const char* m_str;
uint32_t m_pos;
uint32_t m_size;
};
2018-10-26 08:16:10 +03:00
bx::StringView nextWord(bx::StringView& _parse);
2016-10-01 22:38:41 +03:00
#define BGFX_UNIFORM_FRAGMENTBIT UINT8_C(0x10)
#define BGFX_UNIFORM_SAMPLERBIT UINT8_C(0x20)
#define BGFX_UNIFORM_READONLYBIT UINT8_C(0x40)
#define BGFX_UNIFORM_COMPAREBIT UINT8_C(0x80)
#define BGFX_UNIFORM_MASK (BGFX_UNIFORM_FRAGMENTBIT|BGFX_UNIFORM_SAMPLERBIT|BGFX_UNIFORM_READONLYBIT|BGFX_UNIFORM_COMPAREBIT)
2016-01-31 03:15:25 +03:00
const char* getUniformTypeName(UniformType::Enum _enum);
UniformType::Enum nameToUniformTypeEnum(const char* _name);
2016-01-31 03:15:25 +03:00
struct Uniform
{
2016-01-31 03:15:25 +03:00
std::string name;
UniformType::Enum type;
uint8_t num;
uint16_t regIndex;
uint16_t regCount;
uint8_t texComponent;
uint8_t texDimension;
};
2017-11-24 21:01:13 +03:00
struct Options
{
Options();
void dump();
char shaderType;
std::string platform;
std::string profile;
std::string inputFilePath;
std::string outputFilePath;
std::vector<std::string> includeDirs;
std::vector<std::string> defines;
std::vector<std::string> dependencies;
bool disasm;
bool raw;
bool preprocessOnly;
bool depends;
bool debugInformation;
bool avoidFlowControl;
bool noPreshader;
bool partialPrecision;
bool preferFlowControl;
bool backwardsCompatibility;
bool warningsAreErrors;
bool keepIntermediate;
2017-11-24 21:01:13 +03:00
bool optimize;
uint32_t optimizationLevel;
};
2016-01-31 03:15:25 +03:00
typedef std::vector<Uniform> UniformArray;
2016-10-01 22:38:41 +03:00
void printCode(const char* _code, int32_t _line = 0, int32_t _start = 0, int32_t _end = INT32_MAX, int32_t _column = -1);
2016-01-31 03:15:25 +03:00
void strReplace(char* _str, const char* _find, const char* _replace);
int32_t writef(bx::WriterI* _writer, const char* _format, ...);
void writeFile(const char* _filePath, const void* _data, int32_t _size);
2017-11-24 21:01:13 +03:00
bool compileGLSLShader(const Options& _options, uint32_t _version, const std::string& _code, bx::WriterI* _writer);
bool compileHLSLShader(const Options& _options, uint32_t _version, const std::string& _code, bx::WriterI* _writer);
bool compileMetalShader(const Options& _options, uint32_t _version, const std::string& _code, bx::WriterI* _writer);
2017-11-24 21:01:13 +03:00
bool compilePSSLShader(const Options& _options, uint32_t _version, const std::string& _code, bx::WriterI* _writer);
bool compileSPIRVShader(const Options& _options, uint32_t _version, const std::string& _code, bx::WriterI* _writer);
2016-01-31 03:15:25 +03:00
const char* getPsslPreamble();
2016-01-31 03:15:25 +03:00
} // namespace bgfx
#endif // SHADERC_H_HEADER_GUARD