Add new SpirvToolsDisassemble API interface + Improve Doc on existing API interface (#2442)

* Add new SpirvToolsDisassemble API interface + Improve Doc on existing API interface (#2408)

* Add more flexible SpirvToolsDisassemble interface to allow specifying spv_target_env for disassembly output.
Improve documentation on existing SpirvToolsDisassemble interface.

* Update pre-processor check - following existing ENABLE_OPT checks.

* Fix not-found header paths for glslangValidator and glslangtests.

* Add spirv_tools/include path where there is an ENABLE_OPT=1 in the BUILD.gn configuration.
This commit is contained in:
pheonix 2020-11-02 13:40:50 -08:00 committed by GitHub
parent 56350cadfe
commit c897c3bc23
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 38 additions and 10 deletions

View File

@ -246,6 +246,8 @@ template("glslang_sources_common") {
] ]
} }
include_dirs = [ "${target_gen_dir}/include" ]
deps = [ ":glslang_build_info" ] deps = [ ":glslang_build_info" ]
if (invoker.enable_opt) { if (invoker.enable_opt) {
@ -253,10 +255,9 @@ template("glslang_sources_common") {
"${spirv_tools_dir}:spvtools_opt", "${spirv_tools_dir}:spvtools_opt",
"${spirv_tools_dir}:spvtools_val", "${spirv_tools_dir}:spvtools_val",
] ]
include_dirs += [ "${spirv_tools_dir}/include" ]
} }
include_dirs = [ "${target_gen_dir}/include" ]
configs -= _configs_to_remove configs -= _configs_to_remove
configs += _configs_to_add configs += _configs_to_add
} }
@ -302,7 +303,10 @@ executable("glslang_validator") {
] ]
public_configs = [ ":glslang_hlsl" ] public_configs = [ ":glslang_hlsl" ]
include_dirs = [ "${target_gen_dir}/include" ] include_dirs = [
"${target_gen_dir}/include",
"${spirv_tools_dir}/include",
]
configs -= _configs_to_remove configs -= _configs_to_remove
configs += _configs_to_add configs += _configs_to_add
@ -313,6 +317,8 @@ executable("spirv-remap") {
defines = [ "ENABLE_OPT=1" ] defines = [ "ENABLE_OPT=1" ]
deps = [ ":glslang_sources" ] deps = [ ":glslang_sources" ]
include_dirs += [ "${spirv_tools_dir}/include" ]
configs -= _configs_to_remove configs -= _configs_to_remove
configs += _configs_to_add configs += _configs_to_add
} }

View File

@ -44,7 +44,6 @@
#include "SpvTools.h" #include "SpvTools.h"
#include "spirv-tools/optimizer.hpp" #include "spirv-tools/optimizer.hpp"
#include "spirv-tools/libspirv.h"
namespace glslang { namespace glslang {
@ -114,11 +113,18 @@ void OptimizerMesssageConsumer(spv_message_level_t level, const char *source,
out << std::endl; out << std::endl;
} }
// Use the SPIRV-Tools disassembler to print SPIR-V. // Use the SPIRV-Tools disassembler to print SPIR-V using a SPV_ENV_UNIVERSAL_1_3 environment.
void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv) void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv)
{
SpirvToolsDisassemble(out, spirv, spv_target_env::SPV_ENV_UNIVERSAL_1_3);
}
// Use the SPIRV-Tools disassembler to print SPIR-V with a provided SPIR-V environment.
void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv,
spv_target_env requested_context)
{ {
// disassemble // disassemble
spv_context context = spvContextCreate(SPV_ENV_UNIVERSAL_1_3); spv_context context = spvContextCreate(requested_context);
spv_text text; spv_text text;
spv_diagnostic diagnostic = nullptr; spv_diagnostic diagnostic = nullptr;
spvBinaryToText(context, spirv.data(), spirv.size(), spvBinaryToText(context, spirv.data(), spirv.size(),

View File

@ -41,9 +41,10 @@
#ifndef GLSLANG_SPV_TOOLS_H #ifndef GLSLANG_SPV_TOOLS_H
#define GLSLANG_SPV_TOOLS_H #define GLSLANG_SPV_TOOLS_H
#ifdef ENABLE_OPT #if ENABLE_OPT
#include <vector> #include <vector>
#include <ostream> #include <ostream>
#include "spirv-tools/libspirv.h"
#endif #endif
#include "glslang/MachineIndependent/localintermediate.h" #include "glslang/MachineIndependent/localintermediate.h"
@ -62,11 +63,15 @@ struct SpvOptions {
bool validate; bool validate;
}; };
#ifdef ENABLE_OPT #if ENABLE_OPT
// Use the SPIRV-Tools disassembler to print SPIR-V. // Use the SPIRV-Tools disassembler to print SPIR-V using a SPV_ENV_UNIVERSAL_1_3 environment.
void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv); void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv);
// Use the SPIRV-Tools disassembler to print SPIR-V with a provided SPIR-V environment.
void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv,
spv_target_env requested_context);
// Apply the SPIRV-Tools validator to generated SPIR-V. // Apply the SPIRV-Tools validator to generated SPIR-V.
void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv, void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
spv::SpvBuildLogger*, bool prelegalization); spv::SpvBuildLogger*, bool prelegalization);

View File

@ -41,7 +41,6 @@ target_include_directories(glslang-default-resource-limits
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>) PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>)
set(SOURCES StandAlone.cpp DirStackFileIncluder.h) set(SOURCES StandAlone.cpp DirStackFileIncluder.h)
add_executable(glslangValidator ${SOURCES}) add_executable(glslangValidator ${SOURCES})
@ -70,6 +69,12 @@ target_include_directories(glslangValidator PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/External>) $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/External>)
if(ENABLE_OPT)
target_include_directories(glslangValidator
PRIVATE ${spirv-tools_SOURCE_DIR}/include
)
endif(ENABLE_OPT)
if(ENABLE_SPVREMAPPER) if(ENABLE_SPVREMAPPER)
set(REMAPPER_SOURCES spirv-remap.cpp) set(REMAPPER_SOURCES spirv-remap.cpp)
add_executable(spirv-remap ${REMAPPER_SOURCES}) add_executable(spirv-remap ${REMAPPER_SOURCES})

View File

@ -83,6 +83,12 @@ if(BUILD_TESTING)
${gmock_SOURCE_DIR}/include ${gmock_SOURCE_DIR}/include
${gtest_SOURCE_DIR}/include) ${gtest_SOURCE_DIR}/include)
if(ENABLE_OPT)
target_include_directories(glslangtests
PRIVATE ${spirv-tools_SOURCE_DIR}/include
)
endif(ENABLE_OPT)
set(LIBRARIES set(LIBRARIES
glslang OSDependent OGLCompiler glslang glslang OSDependent OGLCompiler glslang
SPIRV glslang-default-resource-limits) SPIRV glslang-default-resource-limits)