diff options
author | 2019-10-13 13:50:38 +0200 | |
---|---|---|
committer | 2019-10-13 07:50:38 -0400 | |
commit | 0837e7451a84f95c29dbdb9bd6b8b931fee1635d (patch) | |
tree | 626bcbd250a7fbebdf5958a288d2f438d4f9fb5a /3rdparty/bgfx/tools/shaderc/shaderc_glsl.cpp | |
parent | c913ccb59d713ce0b91135520719ac5385e54358 (diff) |
WIP: sync bgfx, bx and bimg with latest upstream (#5723)
* Sync with bgfx upstream revision b91d0b6
* Sync with bx upstream revision d60912b
* Sync with bimg upstream revision bd81f60
* Add astc-codec decoder
* Rename VertexDecl to VertexLayout
* Rename UniformType enum Int1 to Sampler.
* Add NVN stub
* Fix unused-const-variable error on macOS
* Drop redundant explicit language parameters
buildoptions_cpp are only applied to c++ files and buildoptions_objcpp are only
applied to objective c++ files. As such, hardcoding -x offers no benefit while
preventing overrides (such as one needed by 3rdparty/bgfx/src/renderer_vk.cpp on
macOS) from working.
* Re-introduce -x c++ in places where C code is compiled as C++ to prevent clang from throwing a warning
* Build bgfx as Objective-C++ on macOS
It is needed due to included headers
* Enable Direct3D12 and Vulkan bgfx rendering backends
* Enable building of spirv shaders
* Properly escape /c in cmd call
* Comment out dx12 bgfx renderer
* Honor VERBOSE setting during shaders build
* Only invert hlsl shader XYZ_TO_sRGB matrix for opengl
* Add spirv shaders
* OpenGL ES needs transposed matrix too
* Metal needs transposed matrix as well
Diffstat (limited to '3rdparty/bgfx/tools/shaderc/shaderc_glsl.cpp')
-rw-r--r-- | 3rdparty/bgfx/tools/shaderc/shaderc_glsl.cpp | 61 |
1 files changed, 58 insertions, 3 deletions
diff --git a/3rdparty/bgfx/tools/shaderc/shaderc_glsl.cpp b/3rdparty/bgfx/tools/shaderc/shaderc_glsl.cpp index 1547b3beab5..411b12cb2ad 100644 --- a/3rdparty/bgfx/tools/shaderc/shaderc_glsl.cpp +++ b/3rdparty/bgfx/tools/shaderc/shaderc_glsl.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2018 Branimir Karadzic. All rights reserved. + * Copyright 2011-2019 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -216,8 +216,9 @@ namespace bgfx { namespace glsl const char* typen = parse.getPtr(); char uniformType[256]; - parse = bx::strWord(parse).getPtr(); - bx::strCopy(uniformType, int32_t(parse.getPtr()-typen+1), typen); + parse = bx::strWord(parse); + bx::strCopy(uniformType, parse.getLength()+1, typen); + parse.set(parse.getPtr()+parse.getLength(),optShader.getTerm()); const char* name = bx::strLTrimSpace(parse).getPtr(); parse.set(name, optShader.getTerm() ); @@ -257,6 +258,60 @@ namespace bgfx { namespace glsl parse = eol.getPtr() + 1; } } + + bx::StringView mainEntry("xlatMtlShaderOutput xlatMtlMain ("); + parse = bx::strFind(optimizedShader, mainEntry); + end = parse; + if (!parse.isEmpty()) + { + parse.set(parse.getPtr() + mainEntry.getLength(), optShader.getTerm()); + end = bx::strFind(parse, "{"); + } + + while (parse.getPtr() < end.getPtr() + && !parse.isEmpty()) + { + parse.set(bx::strLTrimSpace(parse).getPtr(), optShader.getTerm()); + const bx::StringView textureNameMark("[[texture("); + const bx::StringView textureName = bx::strFind(parse, textureNameMark); + + if (!textureName.isEmpty()) + { + Uniform un; + un.type = nameToUniformTypeEnum("int"); // int for sampler + const char* varNameEnd = textureName.getPtr() - 1; + parse.set(parse.getPtr(), varNameEnd - 1); + const char* varNameBeg = parse.getPtr(); + for (int ii = parse.getLength() - 1; 0 <= ii; --ii) + { + if (varNameBeg[ii] == ' ') + { + parse.set(varNameBeg + ii + 1, varNameEnd); + break; + } + } + char uniformName[256]; + bx::strCopy(uniformName, parse.getLength() + 1, parse); + un.name = uniformName; + const char* regIndexBeg = textureName.getPtr() + textureNameMark.getLength(); + bx::StringView regIndex = bx::strFind(regIndexBeg, ")"); + + regIndex.set(regIndexBeg, regIndex.getPtr()); + uint32_t tmp; + bx::fromString(&tmp, regIndex); + un.regIndex = uint16_t(tmp); + un.num = 1; + un.regCount = 1; + + uniforms.push_back(un); + + parse = regIndex.getPtr() + 1; + } + else + { + parse = textureName; + } + } } uint16_t count = (uint16_t)uniforms.size(); |