diff --git a/filament/src/MaterialParser.cpp b/filament/src/MaterialParser.cpp index 4a651baa21..923d564dfe 100644 --- a/filament/src/MaterialParser.cpp +++ b/filament/src/MaterialParser.cpp @@ -17,10 +17,8 @@ #include "MaterialParser.h" -#include #include #include -#include #include #include @@ -280,7 +278,7 @@ bool MaterialParser::getReflectionMode(ReflectionMode* value) const noexcept { return mImpl.getFromSimpleChunk(ChunkType::MaterialReflectionMode, (uint8_t*)value); } -bool MaterialParser::getShader(ShaderBuilder& shader, +bool MaterialParser::getShader(ShaderContent& shader, ShaderModel shaderModel, Variant variant, ShaderType stage) noexcept { return mImpl.mMaterialChunk.getShader(shader, mImpl.mBlobDictionary, (uint8_t)shaderModel, variant, stage); diff --git a/filament/src/MaterialParser.h b/filament/src/MaterialParser.h index 03832fba1e..20f4fbbda5 100644 --- a/filament/src/MaterialParser.h +++ b/filament/src/MaterialParser.h @@ -17,7 +17,6 @@ #ifndef TNT_FILAMENT_MATERIALPARSER_H #define TNT_FILAMENT_MATERIALPARSER_H -#include #include #include @@ -33,7 +32,6 @@ namespace filaflat { class ChunkContainer; -class ShaderBuilder; class Unflattener; } @@ -93,7 +91,7 @@ public: bool getSpecularAntiAliasingVariance(float* value) const noexcept; bool getSpecularAntiAliasingThreshold(float* value) const noexcept; - bool getShader(filaflat::ShaderBuilder& shader, backend::ShaderModel shaderModel, + bool getShader(filaflat::ShaderContent& shader, backend::ShaderModel shaderModel, Variant variant, backend::ShaderType stage) noexcept; private: diff --git a/filament/src/details/Engine.h b/filament/src/details/Engine.h index 27e51a0bfb..3d37a9b9f6 100644 --- a/filament/src/details/Engine.h +++ b/filament/src/details/Engine.h @@ -68,8 +68,6 @@ using MaterialKey = uint32_t; } // namespace filament #endif -#include - #include #include #include @@ -324,12 +322,14 @@ public: void prepare(); void gc(); - filaflat::ShaderBuilder& getVertexShaderBuilder() const noexcept { - return mVertexShaderBuilder; + using ShaderContent = utils::FixedCapacityVector; + + ShaderContent& getVertexShaderContent() const noexcept { + return mVertexShaderContent; } - filaflat::ShaderBuilder& getFragmentShaderBuilder() const noexcept { - return mFragmentShaderBuilder; + ShaderContent& getFragmentShaderContent() const noexcept { + return mFragmentShaderContent; } FDebugRegistry& getDebugRegistry() noexcept { @@ -453,8 +453,8 @@ private: mutable utils::CountDownLatch mDriverBarrier; - mutable filaflat::ShaderBuilder mVertexShaderBuilder; - mutable filaflat::ShaderBuilder mFragmentShaderBuilder; + mutable ShaderContent mVertexShaderContent; + mutable ShaderContent mFragmentShaderContent; FDebugRegistry mDebugRegistry; backend::Handle mDummyOneTexture; diff --git a/filament/src/details/Material.cpp b/filament/src/details/Material.cpp index 368206d5c3..d3402c4cf2 100644 --- a/filament/src/details/Material.cpp +++ b/filament/src/details/Material.cpp @@ -417,7 +417,7 @@ Program FMaterial::getProgramBuilderWithVariants( * Vertex shader */ - filaflat::ShaderBuilder& vsBuilder = mEngine.getVertexShaderBuilder(); + ShaderContent& vsBuilder = mEngine.getVertexShaderContent(); UTILS_UNUSED_IN_RELEASE bool vsOK = mMaterialParser->getShader(vsBuilder, sm, vertexVariant, ShaderType::VERTEX); @@ -431,7 +431,7 @@ Program FMaterial::getProgramBuilderWithVariants( * Fragment shader */ - filaflat::ShaderBuilder& fsBuilder = mEngine.getFragmentShaderBuilder(); + ShaderContent& fsBuilder = mEngine.getFragmentShaderContent(); UTILS_UNUSED_IN_RELEASE bool fsOK = mMaterialParser->getShader(fsBuilder, sm, fragmentVariant, ShaderType::FRAGMENT); diff --git a/filament/src/details/Material.h b/filament/src/details/Material.h index 464183dec1..0eee821a0d 100644 --- a/filament/src/details/Material.h +++ b/filament/src/details/Material.h @@ -28,8 +28,6 @@ #include #include -#include - #include #include diff --git a/libs/filaflat/CMakeLists.txt b/libs/filaflat/CMakeLists.txt index fb05079c7f..d593ef9ac7 100644 --- a/libs/filaflat/CMakeLists.txt +++ b/libs/filaflat/CMakeLists.txt @@ -13,7 +13,6 @@ set(SRCS src/ChunkContainer.cpp src/DictionaryReader.cpp src/MaterialChunk.cpp - src/ShaderBuilder.cpp src/Unflattener.cpp) # ================================================================================================== diff --git a/libs/filaflat/include/filaflat/BlobDictionary.h b/libs/filaflat/include/filaflat/BlobDictionary.h deleted file mode 100644 index 5ba90222e7..0000000000 --- a/libs/filaflat/include/filaflat/BlobDictionary.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef TNT_FILAFLAT_BLOBDICTIONARY_H -#define TNT_FILAFLAT_BLOBDICTIONARY_H - -#include -#include - -#include - -namespace filaflat { - -// Flat list of blobs that can be referenced by index. -class BlobDictionary { -public: - BlobDictionary() = default; - ~BlobDictionary() = default; - - using Blob = std::vector; - - inline void addBlob(const char* blob, size_t len) noexcept { - mBlobs.emplace_back(blob, blob + len); - } - - inline void addBlob(Blob&& blob) noexcept { - mBlobs.push_back(std::move(blob)); - } - - inline bool isEmpty() const noexcept { - return mBlobs.empty(); - } - - inline void reserve(size_t size) { - mBlobs.reserve(size); - } - - inline const char* getBlob(size_t index, size_t* size) const noexcept { - *size = mBlobs[index].size(); - return (const char*) mBlobs[index].data(); - } - - inline const char* getString(size_t index) const noexcept { - return (const char*) mBlobs[index].data(); - } - - inline size_t size() const noexcept { - return mBlobs.size(); - } - -private: - std::vector mBlobs; -}; - -} // namespace filaflat - -#endif // TNT_FILAFLAT_BLOBDICTIONARY_H diff --git a/libs/filaflat/include/filaflat/ChunkContainer.h b/libs/filaflat/include/filaflat/ChunkContainer.h index 93a0020b14..4b41817a15 100644 --- a/libs/filaflat/include/filaflat/ChunkContainer.h +++ b/libs/filaflat/include/filaflat/ChunkContainer.h @@ -22,10 +22,15 @@ #include +#include + #include namespace filaflat { +using ShaderContent = utils::FixedCapacityVector; +using BlobDictionary = utils::FixedCapacityVector; + class Unflattener; // Allows to build a map of chunks in a Package and get direct individual access based on chunk ID. diff --git a/libs/filaflat/include/filaflat/DictionaryReader.h b/libs/filaflat/include/filaflat/DictionaryReader.h index 04224016c0..df2f73fc0e 100644 --- a/libs/filaflat/include/filaflat/DictionaryReader.h +++ b/libs/filaflat/include/filaflat/DictionaryReader.h @@ -21,8 +21,6 @@ namespace filaflat { -class BlobDictionary; - struct DictionaryReader { static bool unflatten(ChunkContainer const& container, ChunkContainer::Type dictionaryTag, diff --git a/libs/filaflat/include/filaflat/MaterialChunk.h b/libs/filaflat/include/filaflat/MaterialChunk.h index 451f3f6b90..9955553517 100644 --- a/libs/filaflat/include/filaflat/MaterialChunk.h +++ b/libs/filaflat/include/filaflat/MaterialChunk.h @@ -20,6 +20,7 @@ #include +#include #include #include @@ -28,10 +29,6 @@ namespace filaflat { -class BlobDictionary; -class ChunkContainer; -class ShaderBuilder; - class MaterialChunk { public: explicit MaterialChunk(ChunkContainer const& container); @@ -41,7 +38,7 @@ public: bool readIndex(filamat::ChunkType materialTag); // call this as many times as needed - bool getShader(ShaderBuilder& shaderBuilder, + bool getShader(ShaderContent& shaderContent, BlobDictionary const& dictionary, uint8_t shaderModel, filament::Variant variant, uint8_t stage); @@ -53,11 +50,11 @@ private: tsl::robin_map mOffsets; bool getTextShader(Unflattener unflattener, - BlobDictionary const& dictionary, ShaderBuilder& shaderBuilder, + BlobDictionary const& dictionary, ShaderContent& shaderContent, uint8_t shaderModel, filament::Variant variant, uint8_t ps); bool getSpirvShader( - BlobDictionary const& dictionary, ShaderBuilder& shaderBuilder, + BlobDictionary const& dictionary, ShaderContent& shaderContent, uint8_t shaderModel, filament::Variant variant, uint8_t stage); }; diff --git a/libs/filaflat/include/filaflat/ShaderBuilder.h b/libs/filaflat/include/filaflat/ShaderBuilder.h deleted file mode 100644 index 7af0e772ab..0000000000 --- a/libs/filaflat/include/filaflat/ShaderBuilder.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef TNT_FILAFLAT_SHADERBUILDER_H -#define TNT_FILAFLAT_SHADERBUILDER_H - -#include - -#include -#include - -namespace filaflat { - -class ShaderBuilder { -public: - ShaderBuilder(); - ShaderBuilder(ShaderBuilder const& rhs) = delete; - ShaderBuilder& operator=(ShaderBuilder const&rhs) = delete; - ~ShaderBuilder(); - - // Before using a shader buffer to create a shader you should reset it. - void reset(); - - // Tells the buffer how many characters will be appended for the full shader. - void announce(size_t size); - - // Append a data blob to the shader. Returns true if successful. - void append(const char* data, size_t size) noexcept; - - // returns the shader blob. valid until next api call. - void const* data() const noexcept { return mShader; } - - size_t size() const { return mCursor; } - -private: - uint32_t mCapacity = 16384; - uint32_t mCursor = 0; - char* mShader = nullptr; -}; - -} // namespace filaflat -#endif // TNT_FILAFLAT_SHADERBUILDER_H diff --git a/libs/filaflat/src/DictionaryReader.cpp b/libs/filaflat/src/DictionaryReader.cpp index e33f92e255..3e7a23a877 100644 --- a/libs/filaflat/src/DictionaryReader.cpp +++ b/libs/filaflat/src/DictionaryReader.cpp @@ -16,7 +16,7 @@ #include -#include +#include #include #if defined (FILAMENT_DRIVER_SUPPORTS_VULKAN) @@ -68,11 +68,11 @@ bool DictionaryReader::unflatten(ChunkContainer const& container, if (spirvSize == 0) { return false; } - BlobDictionary::Blob spirv(spirvSize); + ShaderContent spirv(spirvSize); if (!smolv::Decode(compressed, compressedSize, spirv.data(), spirvSize)) { return false; } - dictionary.addBlob(std::move(spirv)); + dictionary.emplace_back(std::move(spirv)); #else return false; #endif @@ -93,7 +93,8 @@ bool DictionaryReader::unflatten(ChunkContainer const& container, } // BlobDictionary hold binary chunks and does not care if the data holds text, it is // therefore crucial to include the trailing null. - dictionary.addBlob(str, strlen(str) + 1); + dictionary.emplace_back(strlen(str) + 1); + memcpy(dictionary.back().data(), str, dictionary.back().size()); } return true; } diff --git a/libs/filaflat/src/MaterialChunk.cpp b/libs/filaflat/src/MaterialChunk.cpp index 546bc5f361..d26a34584d 100644 --- a/libs/filaflat/src/MaterialChunk.cpp +++ b/libs/filaflat/src/MaterialChunk.cpp @@ -15,9 +15,7 @@ */ #include -#include #include -#include #include @@ -85,13 +83,11 @@ bool MaterialChunk::readIndex(filamat::ChunkType materialTag) { } bool MaterialChunk::getTextShader(Unflattener unflattener, BlobDictionary const& dictionary, - ShaderBuilder& shaderBuilder, uint8_t shaderModel, filament::Variant variant, uint8_t ps) { + ShaderContent& shaderContent, uint8_t shaderModel, filament::Variant variant, uint8_t ps) { if (mBase == nullptr) { return false; } - shaderBuilder.reset(); - // Jump and read uint32_t key = makeKey(shaderModel, variant, ps); auto pos = mOffsets.find(key); @@ -112,35 +108,40 @@ bool MaterialChunk::getTextShader(Unflattener unflattener, BlobDictionary const& return false; } - // Add an extra char for the null terminator. - shaderBuilder.announce(shaderSize + 1); - // Read how many lines there are. uint32_t lineCount = 0; if (!unflattener.read(&lineCount)){ return false; } + shaderContent.reserve(shaderSize); + shaderContent.resize(shaderSize); + size_t cursor = 0; + // Read all lines. for(int32_t i = 0 ; i < lineCount; i++) { uint16_t lineIndex; if (!unflattener.read(&lineIndex)) { return false; } - const char* string = dictionary.getString(lineIndex); - shaderBuilder.append(string, strlen(string)); - shaderBuilder.append("\n", 1); + const auto& content = dictionary[lineIndex]; + + // Replace null with newline. + memcpy(&shaderContent[cursor], content.data(), content.size() - 1); + cursor += content.size() - 1; + shaderContent[cursor++] = '\n'; } // Write the terminating null character. - shaderBuilder.append("", 1); + shaderContent[cursor++] = 0; + assert_invariant(cursor == shaderSize); return true; } bool MaterialChunk::getSpirvShader(BlobDictionary const& dictionary, - ShaderBuilder& shaderBuilder, uint8_t shaderModel, filament::Variant variant, uint8_t stage) { + ShaderContent& shaderContent, uint8_t shaderModel, filament::Variant variant, uint8_t stage) { if (mBase == nullptr) { return false; @@ -152,24 +153,18 @@ bool MaterialChunk::getSpirvShader(BlobDictionary const& dictionary, return false; } - size_t index = pos->second; - size_t shaderSize; - const char* shaderContent = dictionary.getBlob(index, &shaderSize); - - shaderBuilder.reset(); - shaderBuilder.announce(shaderSize); - shaderBuilder.append(shaderContent, shaderSize); + shaderContent = dictionary[pos->second]; return true; } -bool MaterialChunk::getShader(ShaderBuilder& shaderBuilder, +bool MaterialChunk::getShader(ShaderContent& shaderContent, BlobDictionary const& dictionary, uint8_t shaderModel, filament::Variant variant, uint8_t stage) { switch (mMaterialTag) { case filamat::ChunkType::MaterialGlsl: case filamat::ChunkType::MaterialMetal: - return getTextShader(mUnflattener, dictionary, shaderBuilder, shaderModel, variant, stage); + return getTextShader(mUnflattener, dictionary, shaderContent, shaderModel, variant, stage); case filamat::ChunkType::MaterialSpirv: - return getSpirvShader(dictionary, shaderBuilder, shaderModel, variant, stage); + return getSpirvShader(dictionary, shaderContent, shaderModel, variant, stage); default: return false; } diff --git a/libs/filaflat/src/ShaderBuilder.cpp b/libs/filaflat/src/ShaderBuilder.cpp deleted file mode 100644 index 2b7f15c80a..0000000000 --- a/libs/filaflat/src/ShaderBuilder.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include - -#include -#include - -#include - -namespace filaflat { - -ShaderBuilder::ShaderBuilder() - : mShader(static_cast(malloc(mCapacity))) { -} - -ShaderBuilder::~ShaderBuilder() { - free(mShader); -} - -void ShaderBuilder::reset() { - mCursor = 0; -} - -void ShaderBuilder::announce(size_t size) { - if (size > mCapacity) { - mCapacity = (uint32_t)size; - mShader = (char*)realloc(mShader, size); - } -} - -void ShaderBuilder::append(const char* data, size_t size) noexcept { - assert(size <= (mCapacity - mCursor)); - memcpy(mShader + mCursor, data, size); - mCursor += size; -} - -} diff --git a/libs/matdbg/include/matdbg/ShaderExtractor.h b/libs/matdbg/include/matdbg/ShaderExtractor.h index 088e247b4d..4dc79d2168 100644 --- a/libs/matdbg/include/matdbg/ShaderExtractor.h +++ b/libs/matdbg/include/matdbg/ShaderExtractor.h @@ -19,16 +19,11 @@ #include #include -#include #include #include -namespace filaflat { -class BlobDictionary; -} - namespace filament { namespace matdbg { @@ -39,7 +34,7 @@ public: ShaderExtractor(backend::Backend backend, const void* data, size_t size); bool parse() noexcept; bool getShader(backend::ShaderModel shaderModel, - Variant variant, backend::ShaderType stage, filaflat::ShaderBuilder& shader) noexcept; + Variant variant, backend::ShaderType stage, filaflat::ShaderContent& shader) noexcept; bool getDictionary(filaflat::BlobDictionary& dictionary) noexcept; static utils::CString spirvToGLSL(const uint32_t* data, size_t wordCount); diff --git a/libs/matdbg/src/CommonWriter.h b/libs/matdbg/src/CommonWriter.h index 3607f56e5d..e7c469b270 100644 --- a/libs/matdbg/src/CommonWriter.h +++ b/libs/matdbg/src/CommonWriter.h @@ -14,11 +14,9 @@ * limitations under the License. */ -#include #include #include #include -#include #include #include diff --git a/libs/matdbg/src/DebugServer.cpp b/libs/matdbg/src/DebugServer.cpp index 99645b438f..468683db5c 100644 --- a/libs/matdbg/src/DebugServer.cpp +++ b/libs/matdbg/src/DebugServer.cpp @@ -300,11 +300,11 @@ public: } const auto& item = info[shaderIndex]; - filaflat::ShaderBuilder builder; - extractor.getShader(item.shaderModel, item.variant, item.pipelineStage, builder); + filaflat::ShaderContent content; + extractor.getShader(item.shaderModel, item.variant, item.pipelineStage, content); mg_printf(conn, kSuccessHeader.c_str(), "application/txt"); - mg_write(conn, builder.data(), builder.size() - 1); + mg_write(conn, content.data(), content.size() - 1); return true; } @@ -314,7 +314,7 @@ public: return error(__LINE__); } - filaflat::ShaderBuilder builder; + filaflat::ShaderContent content; FixedCapacityVector info(getShaderCount(package, ChunkType::MaterialSpirv)); if (!getVkShaderInfo(package, info.data())) { return error(__LINE__); @@ -326,15 +326,15 @@ public: } const auto& item = info[shaderIndex]; - extractor.getShader(item.shaderModel, item.variant, item.pipelineStage, builder); + extractor.getShader(item.shaderModel, item.variant, item.pipelineStage, content); if (language == spirv) { - spirvToAsm(conn, (const uint32_t*) builder.data(), builder.size()); + spirvToAsm(conn, (const uint32_t*) content.data(), content.size()); return true; } if (language == glsl) { - spirvToGlsl(conn, (const uint32_t*) builder.data(), builder.size()); + spirvToGlsl(conn, (const uint32_t*) content.data(), content.size()); return true; } @@ -347,7 +347,7 @@ public: return error(__LINE__); } - filaflat::ShaderBuilder builder; + filaflat::ShaderContent content; FixedCapacityVector info(getShaderCount(package, ChunkType::MaterialMetal)); if (!getMetalShaderInfo(package, info.data())) { return error(__LINE__); @@ -359,11 +359,11 @@ public: } const auto& item = info[shaderIndex]; - extractor.getShader(item.shaderModel, item.variant, item.pipelineStage, builder); + extractor.getShader(item.shaderModel, item.variant, item.pipelineStage, content); if (language == msl) { mg_printf(conn, kSuccessHeader.c_str(), "application/txt"); - mg_write(conn, builder.data(), builder.size() - 1); + mg_write(conn, content.data(), content.size() - 1); return true; } diff --git a/libs/matdbg/src/ShaderExtractor.cpp b/libs/matdbg/src/ShaderExtractor.cpp index cc1dd7ce12..ee134acc32 100644 --- a/libs/matdbg/src/ShaderExtractor.cpp +++ b/libs/matdbg/src/ShaderExtractor.cpp @@ -16,11 +16,9 @@ #include -#include #include #include #include -#include #include #include @@ -73,7 +71,7 @@ bool ShaderExtractor::getDictionary(BlobDictionary& dictionary) noexcept { } bool ShaderExtractor::getShader(ShaderModel shaderModel, - Variant variant, ShaderType stage, ShaderBuilder& shader) noexcept { + Variant variant, ShaderType stage, ShaderContent& shader) noexcept { ChunkContainer const& cc = mChunkContainer; if (!cc.hasChunk(mMaterialTag) || !cc.hasChunk(mDictionaryTag)) { diff --git a/libs/matdbg/src/ShaderInfo.cpp b/libs/matdbg/src/ShaderInfo.cpp index 5fecebe07e..4333727542 100644 --- a/libs/matdbg/src/ShaderInfo.cpp +++ b/libs/matdbg/src/ShaderInfo.cpp @@ -16,11 +16,9 @@ #include -#include #include #include #include -#include #include #include diff --git a/tools/matinfo/src/main.cpp b/tools/matinfo/src/main.cpp index 73a192561d..98b60b4f38 100644 --- a/tools/matinfo/src/main.cpp +++ b/tools/matinfo/src/main.cpp @@ -18,7 +18,6 @@ #include -#include #include #include @@ -404,7 +403,7 @@ static bool parseChunks(Config config, void* data, size_t size) { } if (config.printGLSL || config.printSPIRV || config.printMetal) { - filaflat::ShaderBuilder builder; + filaflat::ShaderContent content; std::vector info; if (config.printGLSL) { @@ -425,10 +424,10 @@ static bool parseChunks(Config config, void* data, size_t size) { } const auto& item = info[config.shaderIndex]; - parser.getShader(item.shaderModel, item.variant, item.pipelineStage, builder); + parser.getShader(item.shaderModel, item.variant, item.pipelineStage, content); // Casted to char* to print as a string rather than hex value. - std::cout << (const char*) builder.data(); + std::cout << (const char*) content.data(); return true; } @@ -451,12 +450,12 @@ static bool parseChunks(Config config, void* data, size_t size) { } const auto& item = info[config.shaderIndex]; - parser.getShader(item.shaderModel, item.variant, item.pipelineStage, builder); + parser.getShader(item.shaderModel, item.variant, item.pipelineStage, content); // Build std::vector since that's what the Khronos libraries consume. - uint32_t const* words = reinterpret_cast(builder.data()); - assert(0 == (builder.size() % 4)); - const std::vector spirv(words, words + builder.size() / 4); + uint32_t const* words = reinterpret_cast(content.data()); + assert(0 == (content.size() % 4)); + const std::vector spirv(words, words + content.size() / 4); if (config.transpile) { transpileSpirv(spirv); @@ -487,8 +486,8 @@ static bool parseChunks(Config config, void* data, size_t size) { } const auto& item = info[config.shaderIndex]; - parser.getShader(item.shaderModel, item.variant, item.pipelineStage, builder); - std::cout << (const char*) builder.data(); + parser.getShader(item.shaderModel, item.variant, item.pipelineStage, content); + std::cout << (const char*) content.data(); return true; } @@ -512,7 +511,7 @@ static bool parseChunks(Config config, void* data, size_t size) { } for (size_t i = 0; i < dictionary.size(); i++) { - std::cout << dictionary.getString(i) << std::endl; + std::cout << (const char*)dictionary[i].data() << std::endl; } return true;