Бранимир Караџић 2 ani în urmă
părinte
comite
03a2c26457
1 a modificat fișierele cu 70 adăugiri și 38 ștergeri
  1. 70 38
      tools/shaderc/shaderc.cpp

+ 70 - 38
tools/shaderc/shaderc.cpp

@@ -400,17 +400,17 @@ namespace bgfx
 
 		for (size_t ii = 0; ii < includeDirs.size(); ++ii)
 		{
-			BX_TRACE("\t  include :%s\n", includeDirs[ii].c_str());
+			BX_TRACE("\t  include :%s\n", includeDirs[ii].c_str() );
 		}
 
 		for (size_t ii = 0; ii < defines.size(); ++ii)
 		{
-			BX_TRACE("\t  define :%s\n", defines[ii].c_str());
+			BX_TRACE("\t  define :%s\n", defines[ii].c_str() );
 		}
 
 		for (size_t ii = 0; ii < dependencies.size(); ++ii)
 		{
-			BX_TRACE("\t  dependency :%s\n", dependencies[ii].c_str());
+			BX_TRACE("\t  dependency :%s\n", dependencies[ii].c_str() );
 		}
 	}
 
@@ -1345,7 +1345,7 @@ namespace bgfx
 
 				bx::StringView assign = bx::strSubstr(parse, 0, 1);
 				bx::StringView init;
-				if (0 == bx::strCmp(assign, "=", 1))
+				if (0 == bx::strCmp(assign, "=", 1) )
 				{
 					parse = bx::strLTrimSpace(bx::StringView(parse.getPtr() + 1, parse.getTerm() ) );
 					init.set(parse.getPtr(), eol.getPtr() );
@@ -1508,7 +1508,7 @@ namespace bgfx
 			{
 				bx::write(_shaderWriter, uint16_t(0), &err);
 
-				uint32_t shaderSize = (uint32_t)bx::strLen(input);
+				const uint32_t shaderSize = (uint32_t)bx::strLen(input);
 				bx::write(_shaderWriter, shaderSize, &err);
 				bx::write(_shaderWriter, input, shaderSize, &err);
 				bx::write(_shaderWriter, uint8_t(0), &err);
@@ -2352,11 +2352,11 @@ namespace bgfx
 											);
 									}
 
-									if (need130 || (glsl_profile >= 130))
+									if (need130 || (glsl_profile >= 130) )
 									{
 										bx::stringPrintf(code
-											, "#define bgfxShadow2D(_sampler, _coord)     vec4_splat(texture(_sampler, _coord))\n"
-											  "#define bgfxShadow2DProj(_sampler, _coord) vec4_splat(textureProj(_sampler, _coord))\n"
+											, "#define bgfxShadow2D(_sampler, _coord)     vec4_splat(texture(_sampler, _coord) )\n"
+											  "#define bgfxShadow2DProj(_sampler, _coord) vec4_splat(textureProj(_sampler, _coord) )\n"
 											);
 									}
 									else
@@ -2416,7 +2416,8 @@ namespace bgfx
 										bx::stringPrintf(code, "#extension GL_OES_texture_3D : enable\n");
 									}
 
-									if ((glsl_profile < 300) && (!bx::findIdentifierMatch(input, s_EXT_shadow_samplers).isEmpty()))
+									if (glsl_profile < 300
+									&&  !bx::findIdentifierMatch(input, s_EXT_shadow_samplers).isEmpty() )
 									{
 										bx::stringPrintf(code
 											, "#extension GL_EXT_shadow_samplers : enable\n"
@@ -2446,7 +2447,8 @@ namespace bgfx
 											);
 									}
 
-									if ((glsl_profile < 300) && (!bx::findIdentifierMatch(input, "gl_FragDepth").isEmpty() ))
+									if (glsl_profile < 300
+									&&  !bx::findIdentifierMatch(input, "gl_FragDepth").isEmpty() )
 									{
 										bx::stringPrintf(code
 											, "#extension GL_EXT_frag_depth : enable\n"
@@ -2539,8 +2541,8 @@ namespace bgfx
 									);
 
 								bx::stringPrintf(code
-									, "#define bgfxShadow2D(_sampler, _coord)     vec4_splat(texture(_sampler, _coord))\n"
-									  "#define bgfxShadow2DProj(_sampler, _coord) vec4_splat(textureProj(_sampler, _coord))\n"
+									, "#define bgfxShadow2D(_sampler, _coord)     vec4_splat(texture(_sampler, _coord) )\n"
+									  "#define bgfxShadow2DProj(_sampler, _coord) vec4_splat(textureProj(_sampler, _coord) )\n"
 									);
 							}
 
@@ -2649,7 +2651,8 @@ namespace bgfx
 
 		bool consoleOut = cmdLine.hasArg("stdout");
 		const char* outFilePath = cmdLine.findOption('o');
-		if (NULL == outFilePath && !consoleOut)
+		if (NULL == outFilePath
+		&&  !consoleOut)
 		{
 			help("Output file name must be specified or use \"--stdout\" to output to stdout.");
 			return bx::kExitFailure;
@@ -2798,6 +2801,7 @@ namespace bgfx
 				const char* varyingdef = cmdLine.findOption("varyingdef", defaultVarying.c_str() );
 				attribdef.load(varyingdef);
 				varying = attribdef.getData();
+
 				if (NULL     != varying
 				&&  *varying != '\0')
 				{
@@ -2809,11 +2813,12 @@ namespace bgfx
 				}
 			}
 
-			const size_t padding    = 16384;
-			uint32_t size = (uint32_t)bx::getSize(&reader);
-			char* data = new char[size+padding+1];
-			size = (uint32_t)bx::read(&reader, data, size, bx::ErrorAssert{});
+			int32_t size = bx::getSize(&reader);
+			const int32_t total = size + 16384;
+			char* data = new char[total];
+			size = bx::read(&reader, data, size, bx::ErrorAssert{});
 
+			// Trim UTF-8 BOM
 			if (data[0] == '\xef'
 			&&  data[1] == '\xbb'
 			&&  data[2] == '\xbf')
@@ -2822,38 +2827,65 @@ namespace bgfx
 				size -= 3;
 			}
 
+			const char ch = data[0];
+			if (false // https://en.wikipedia.org/wiki/Byte_order_mark#Byte_order_marks_by_encoding
+			||  '\x00' == ch
+			||  '\x0e' == ch
+			||  '\x2b' == ch
+			||  '\x84' == ch
+			||  '\xdd' == ch
+			||  '\xf7' == ch
+			||  '\xfb' == ch
+			||  '\xfe' == ch
+			||  '\xff' == ch
+			   )
+			{
+				bx::printf("Shader input file has unsupported BOM.\n");
+				return bx::kExitFailure;
+			}
+
 			// Compiler generates "error X3000: syntax error: unexpected end of file"
 			// if input doesn't have empty line at EOF.
 			data[size] = '\n';
-			bx::memSet(&data[size+1], 0, padding);
+			bx::memSet(&data[size+1], 0, total-size-1);
 			bx::close(&reader);
 
-			bx::FileWriter* writer = NULL;
-
-			if (!consoleOut)
 			{
-				if (!bin2c.isEmpty())
-				{
-					writer = new Bin2cWriter(bin2c);
-				}
-				else
-				{
-					writer = new bx::FileWriter;
-				}
+				bx::FileWriter* writer = NULL;
 
-				if (!bx::open(writer, outFilePath))
+				if (!consoleOut)
 				{
-					bx::printf("Unable to open output file '%s'.\n", outFilePath);
-					return bx::kExitFailure;
+					if (!bin2c.isEmpty() )
+					{
+						writer = new Bin2cWriter(bin2c);
+					}
+					else
+					{
+						writer = new bx::FileWriter;
+					}
+
+					if (!bx::open(writer, outFilePath) )
+					{
+						bx::printf("Unable to open output file '%s'.\n", outFilePath);
+						return bx::kExitFailure;
+					}
 				}
-			}
 
-			compiled = compileShader(varying, commandLineComment.c_str(), data, size, options, consoleOut ? bx::getStdOut() : writer, bx::getStdOut());
+				compiled = compileShader(
+						  varying
+						, commandLineComment.c_str()
+						, data
+						, size
+						, options
+						, consoleOut ? bx::getStdOut() : writer
+						, bx::getStdOut()
+						);
 
-			if (!consoleOut)
-			{
-				bx::close(writer);
-				delete writer;
+				if (!consoleOut)
+				{
+					bx::close(writer);
+					delete writer;
+				}
 			}
 		}