From cc69b20e14eb9ef923c1c5b3cd45d422a5ec8ace Mon Sep 17 00:00:00 2001 From: bkaradzic Date: Thu, 14 Feb 2013 17:27:10 -0800 Subject: [PATCH] Fixed 'unexpected EOL' when building shaders. Added error message for missing shader entry point. --- examples/06-bump/fs_bump.sc | 10 - examples/runtime/shaders/gles/fs_bump.bin | Bin 4255 -> 4132 bytes examples/runtime/shaders/glsl/fs_bump.bin | Bin 4216 -> 4093 bytes makefile | 10 + src/dds.cpp | 20 +- tools/bin/shaderc.exe | Bin 1083904 -> 1084416 bytes tools/shaderc/shaderc.cpp | 351 +++++++++++----------- 7 files changed, 201 insertions(+), 190 deletions(-) diff --git a/examples/06-bump/fs_bump.sc b/examples/06-bump/fs_bump.sc index fe530bd1..e1e508d6 100644 --- a/examples/06-bump/fs_bump.sc +++ b/examples/06-bump/fs_bump.sc @@ -41,16 +41,6 @@ vec4 powRgba(vec4 _rgba, float _pow) return result; } -vec4 toLinear(vec4 _rgba) -{ - return powRgba(_rgba, 2.2); -} - -vec4 toGamma(vec4 _rgba) -{ - return powRgba(_rgba, 1.0/2.2); -} - vec3 calcLight(int _idx, mat3 _tbn, vec3 _wpos, vec3 _normal, vec3 _view) { vec3 lp = u_lightPosRadius[_idx].xyz - _wpos; diff --git a/examples/runtime/shaders/gles/fs_bump.bin b/examples/runtime/shaders/gles/fs_bump.bin index cef661ba803504b2484aeb0805d1a34b59963a04..b1296e55fe7e05b31ac8af992a99437f63b64ee3 100644 GIT binary patch delta 68 zcmbQQxI|$C7w_g>ys}KJ1^ML)8k046l_%HpN=<&kuQZvTS8TG3fGcN7Zb4aMQM|Fy R!oFj3-ZeqG~fnJ_UD(9MO9V~R0NmTE8on`vKy5E delta 207 zcmew>|3hKJW1h+J{L;({whEJ3`IWP+xfB%2Qj<*-ic*V9b4uckjX@%Cj$TD&6;NqG zez}51Np3+|Vo|)Y5lB!6q{~>tNY6+|0Y+$QqUtRN>O^QN-+Z4(k%1Pw=bp!+F+RwOm{b02skQCIA2c diff --git a/makefile b/makefile index e0380817..a1b7297a 100755 --- a/makefile +++ b/makefile @@ -78,6 +78,16 @@ osx-release64: make -C .build/projects/gmake-osx config=release64 osx: osx-debug32 osx-release32 osx-debug64 osx-release64 +rebuild-shaders: + make -C examples/01-cubes rebuild + make -C examples/02-metaballs rebuild + make -C examples/03-raymarch rebuild + make -C examples/04-mesh rebuild + make -C examples/05-instancing rebuild + make -C examples/06-bump rebuild + make -C examples/07-callback rebuild + make -C examples/08-update rebuild + docs: markdown README.md > .build/docs/readme.html diff --git a/src/dds.cpp b/src/dds.cpp index 1a6eb0cf..6c0e99da 100644 --- a/src/dds.cpp +++ b/src/dds.cpp @@ -21,7 +21,9 @@ namespace bgfx #define DDS_DXT4 BX_MAKEFOURCC('D', 'X', 'T', '4') #define DDS_DXT5 BX_MAKEFOURCC('D', 'X', 'T', '5') #define DDS_ATI1 BX_MAKEFOURCC('A', 'T', 'I', '1') +#define DDS_BC4U BX_MAKEFOURCC('B', 'C', '4', 'U') #define DDS_ATI2 BX_MAKEFOURCC('A', 'T', 'I', '2') +#define DDS_BC5U BX_MAKEFOURCC('B', 'C', '5', 'U') #define D3DFMT_A16B16G16R16 36 #define D3DFMT_A16B16G16R16F 113 @@ -466,34 +468,36 @@ bool parseDds(Dds& _dds, const Memory* _mem) { case DDS_DXT1: type = TextureFormat::BC1; - blockSize = 8; bpp = 4; + blockSize = 4*4*bpp/8; break; case DDS_DXT2: case DDS_DXT3: type = TextureFormat::BC2; - blockSize = 16; - bpp = 4; + bpp = 8; + blockSize = 4*4*bpp/8; break; case DDS_DXT4: case DDS_DXT5: type = TextureFormat::BC3; - blockSize = 16; - bpp = 4; + bpp = 8; + blockSize = 4*4*bpp/8; break; case DDS_ATI1: + case DDS_BC4U: type = TextureFormat::BC4; - blockSize = 16; bpp = 4; + blockSize = 4*4*bpp/8; break; case DDS_ATI2: + case DDS_BC5U: type = TextureFormat::BC5; - blockSize = 16; - bpp = 4; + bpp = 8; + blockSize = 4*4*bpp/8; break; case D3DFMT_A16B16G16R16: diff --git a/tools/bin/shaderc.exe b/tools/bin/shaderc.exe index 1b6a01703f7067dcd5c4c87fff364f33340b45df..070af950dc718a9a4385c1540b1ee303dda8f528 100644 GIT binary patch delta 33297 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 - const char* name = var.m_name.c_str(); - if (0 == strncmp(name, "a_", 2) - || 0 == strncmp(name, "i_", 2) ) - { - preprocessor.writef("attribute %s %s;\n", var.m_type.c_str(), name); - } - else - { - preprocessor.writef("varying %s %s;\n", var.m_type.c_str(), name); - } + str += 5; + inputHash = parseInOut(shaderInputs, str, eol); + } + else if (0 == strncmp(str, "output", 6) ) + { + str += 6; + outputHash = parseInOut(shaderOutputs, str, eol); } } - for (InOut::const_iterator it = shaderOutputs.begin(), itEnd = shaderOutputs.end(); it != itEnd; ++it) + if (glsl) { - VaryingMap::const_iterator varyingIt = varyingMap.find(*it); - if (varyingIt != varyingMap.end() ) + preprocessor.writef( + "#define ivec2 vec2\n" + "#define ivec3 vec3\n" + "#define ivec4 vec4\n" + ); + + + for (InOut::const_iterator it = shaderInputs.begin(), itEnd = shaderInputs.end(); it != itEnd; ++it) { - const Varying& var = varyingIt->second; - preprocessor.writef("varying %s %s;\n", var.m_type.c_str(), var.m_name.c_str() ); + VaryingMap::const_iterator varyingIt = varyingMap.find(*it); + if (varyingIt != varyingMap.end() ) + { + const Varying& var = varyingIt->second; + const char* name = var.m_name.c_str(); + if (0 == strncmp(name, "a_", 2) + || 0 == strncmp(name, "i_", 2) ) + { + preprocessor.writef("attribute %s %s;\n", var.m_type.c_str(), name); + } + else + { + preprocessor.writef("varying %s %s;\n", var.m_type.c_str(), name); + } + } + } + + for (InOut::const_iterator it = shaderOutputs.begin(), itEnd = shaderOutputs.end(); it != itEnd; ++it) + { + VaryingMap::const_iterator varyingIt = varyingMap.find(*it); + if (varyingIt != varyingMap.end() ) + { + const Varying& var = varyingIt->second; + preprocessor.writef("varying %s %s;\n", var.m_type.c_str(), var.m_name.c_str() ); + } } } - } - else - { - preprocessor.writef( - "#define lowp\n" - "#define mediump\n" - "#define highp\n" - "#define ivec2 int2\n" - "#define ivec3 int3\n" - "#define ivec4 int4\n" - "#define vec2 float2\n" - "#define vec3 float3\n" - "#define vec4 float4\n" - "#define mat2 float2x2\n" - "#define mat3 float3x3\n" - "#define mat4 float4x4\n" - ); - - char* entry = strstr(data, "void main()"); - if (NULL != entry) + else { + preprocessor.writef( + "#define lowp\n" + "#define mediump\n" + "#define highp\n" + "#define ivec2 int2\n" + "#define ivec3 int3\n" + "#define ivec4 int4\n" + "#define vec2 float2\n" + "#define vec3 float3\n" + "#define vec4 float4\n" + "#define mat2 float2x2\n" + "#define mat3 float3x3\n" + "#define mat4 float4x4\n" + ); + entry[4] = '_'; if (fragment) @@ -1667,109 +1674,109 @@ int main(int _argc, const char* _argv[]) ); } } - } - if (preprocessor.run(input) ) - { - BX_TRACE("Input file: %s", filePath); - BX_TRACE("Output file: %s", outFilePath); - - if (preprocessOnly) + if (preprocessor.run(input) ) { - bx::CrtFileWriter writer; + BX_TRACE("Input file: %s", filePath); + BX_TRACE("Output file: %s", outFilePath); - if (0 != writer.open(outFilePath) ) + if (preprocessOnly) { - fprintf(stderr, "Unable to open output file '%s'.", outFilePath); - return false; - } - - if (glsl) - { - const char* profile = cmdLine.findOption('p', "profile"); - if (NULL == profile) - { - writef(&writer, "#ifdef GL_ES\n"); - writef(&writer, "precision highp float;\n"); - writef(&writer, "#endif // GL_ES\n\n"); - } - else - { - writef(&writer, "#version %s\n\n", profile); - } - } - writer.write(preprocessor.m_preprocessed.c_str(), (int32_t)preprocessor.m_preprocessed.size() ); - writer.close(); - - return EXIT_SUCCESS; - } - - bool compiled = false; - - { - bx::CrtFileWriter* writer = NULL; - - if (NULL != bin2c) - { - writer = new Bin2cWriter(bin2c); - } - else - { - writer = new bx::CrtFileWriter; - } - - if (0 != writer->open(outFilePath) ) - { - fprintf(stderr, "Unable to open output file '%s'.", outFilePath); - return false; - } - - if (fragment) - { - bx::write(writer, BGFX_CHUNK_MAGIC_FSH); - bx::write(writer, inputHash); - } - else - { - bx::write(writer, BGFX_CHUNK_MAGIC_VSH); - bx::write(writer, outputHash); - } - - if (glsl) - { - compiled = compileGLSLShader(cmdLine, preprocessor.m_preprocessed, writer); - } - else - { - if (hlsl > 3) - { - compiled = compileHLSLShaderDx11(cmdLine, preprocessor.m_preprocessed, writer); - } - else - { - compiled = compileHLSLShaderDx9(cmdLine, preprocessor.m_preprocessed, writer); - } - } - - writer->close(); - delete writer; - } - - if (compiled) - { - if (depends) - { - std::string ofp = outFilePath; - ofp += ".d"; bx::CrtFileWriter writer; - if (0 == writer.open(ofp.c_str() ) ) + + if (0 != writer.open(outFilePath) ) { - writef(&writer, "%s : %s\n", outFilePath, preprocessor.m_depends.c_str() ); - writer.close(); + fprintf(stderr, "Unable to open output file '%s'.", outFilePath); + return false; } + + if (glsl) + { + const char* profile = cmdLine.findOption('p', "profile"); + if (NULL == profile) + { + writef(&writer, "#ifdef GL_ES\n"); + writef(&writer, "precision highp float;\n"); + writef(&writer, "#endif // GL_ES\n\n"); + } + else + { + writef(&writer, "#version %s\n\n", profile); + } + } + writer.write(preprocessor.m_preprocessed.c_str(), (int32_t)preprocessor.m_preprocessed.size() ); + writer.close(); + + return EXIT_SUCCESS; } - return EXIT_SUCCESS; + bool compiled = false; + + { + bx::CrtFileWriter* writer = NULL; + + if (NULL != bin2c) + { + writer = new Bin2cWriter(bin2c); + } + else + { + writer = new bx::CrtFileWriter; + } + + if (0 != writer->open(outFilePath) ) + { + fprintf(stderr, "Unable to open output file '%s'.", outFilePath); + return false; + } + + if (fragment) + { + bx::write(writer, BGFX_CHUNK_MAGIC_FSH); + bx::write(writer, inputHash); + } + else + { + bx::write(writer, BGFX_CHUNK_MAGIC_VSH); + bx::write(writer, outputHash); + } + + if (glsl) + { + compiled = compileGLSLShader(cmdLine, preprocessor.m_preprocessed, writer); + } + else + { + if (hlsl > 3) + { + compiled = compileHLSLShaderDx11(cmdLine, preprocessor.m_preprocessed, writer); + } + else + { + compiled = compileHLSLShaderDx9(cmdLine, preprocessor.m_preprocessed, writer); + } + } + + writer->close(); + delete writer; + } + + if (compiled) + { + if (depends) + { + std::string ofp = outFilePath; + ofp += ".d"; + bx::CrtFileWriter writer; + if (0 == writer.open(ofp.c_str() ) ) + { + writef(&writer, "%s : %s\n", outFilePath, preprocessor.m_depends.c_str() ); + writer.close(); + } + } + + return EXIT_SUCCESS; + } } }