From 52588c3547f71702a58e7d5b0506868fa8308bc7 Mon Sep 17 00:00:00 2001 From: Jacob Heider Date: Tue, 30 Apr 2024 17:00:54 -0400 Subject: [PATCH] +spirv-tools --- projects/khronos.org/SPIRV-Tools/main.cpp | 65 ++++++++++++++++++++ projects/khronos.org/SPIRV-Tools/package.yml | 52 ++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 projects/khronos.org/SPIRV-Tools/main.cpp create mode 100644 projects/khronos.org/SPIRV-Tools/package.yml diff --git a/projects/khronos.org/SPIRV-Tools/main.cpp b/projects/khronos.org/SPIRV-Tools/main.cpp new file mode 100644 index 00000000..a1e22c73 --- /dev/null +++ b/projects/khronos.org/SPIRV-Tools/main.cpp @@ -0,0 +1,65 @@ +// Copyright (c) 2016 Google Inc. +// +// 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. + +// This program demonstrates basic SPIR-V module processing using +// SPIRV-Tools C++ API: +// * Assembling +// * Validating +// * Optimizing +// * Disassembling + +#include +#include +#include + +#include "spirv-tools/libspirv.hpp" +#include "spirv-tools/optimizer.hpp" + +int main() { + const std::string source = + " OpCapability Linkage " + " OpCapability Shader " + " OpMemoryModel Logical GLSL450 " + " OpSource GLSL 450 " + " OpDecorate %spec SpecId 1 " + " %int = OpTypeInt 32 1 " + " %spec = OpSpecConstant %int 0 " + "%const = OpConstant %int 42"; + + spvtools::SpirvTools core(SPV_ENV_UNIVERSAL_1_3); + spvtools::Optimizer opt(SPV_ENV_UNIVERSAL_1_3); + + auto print_msg_to_stderr = [](spv_message_level_t, const char*, + const spv_position_t&, const char* m) { + std::cerr << "error: " << m << std::endl; + }; + core.SetMessageConsumer(print_msg_to_stderr); + opt.SetMessageConsumer(print_msg_to_stderr); + + std::vector spirv; + if (!core.Assemble(source, &spirv)) return 1; + if (!core.Validate(spirv)) return 1; + + opt.RegisterPass(spvtools::CreateSetSpecConstantDefaultValuePass({{1, "42"}})) + .RegisterPass(spvtools::CreateFreezeSpecConstantValuePass()) + .RegisterPass(spvtools::CreateUnifyConstantPass()) + .RegisterPass(spvtools::CreateStripDebugInfoPass()); + if (!opt.Run(spirv.data(), spirv.size(), &spirv)) return 1; + + std::string disassembly; + if (!core.Disassemble(spirv, &disassembly)) return 1; + std::cout << disassembly << "\n"; + + return 0; +} diff --git a/projects/khronos.org/SPIRV-Tools/package.yml b/projects/khronos.org/SPIRV-Tools/package.yml new file mode 100644 index 00000000..eca6b7dd --- /dev/null +++ b/projects/khronos.org/SPIRV-Tools/package.yml @@ -0,0 +1,52 @@ +distributable: + url: https://github.com/KhronosGroup/SPIRV-Tools/archive/{{version.tag}}.tar.gz + strip-components: 1 + +versions: + github: KhronosGroup/SPIRV-Tools + +build: + dependencies: + cmake.org: '*' + python.org: ~3.11 + git-scm.org: 2 + script: + - git clone https://github.com/KhronosGroup/SPIRV-Headers external/spirv-headers + - cmake -S . -B build $ARGS + - cmake --build build + - cmake --install build + env: + ARGS: + - -DBUILD_SHARED_LIBS=ON + - -DPython3_EXECUTABLE={{deps.python.org.prefix}}/bin/python + - -DSPIRV_SKIP_TESTSS=ON + - -DSPIRV_TOOLS_BUILD_STATIC=ON + - -DCMAKE_INSTALL_PREFIX={{prefix}} + - -DCMAKE_INSTALL_LIBDIR={{prefix}}/lib + - -DCMAKE_BUILD_TYPE=Release + - -Wno-dev + linux: + ARGS: + - -DCMAKE_EXE_LINKER_FLAGS=-lstdc++fs + +provides: + - bin/spirv-as + - bin/spirv-cfg + - bin/spirv-dis + - bin/spirv-lesspipe.sh + - bin/spirv-link + - bin/spirv-lint + - bin/spirv-objdump + - bin/spirv-opt + - bin/spirv-reduce + - bin/spirv-val + +test: + script: + - cc -o test main.cpp -std=c++11 -lSPIRV-Tools -lSPIRV-Tools-link -lSPIRV-Tools-opt $LIBS + - ./test + env: + linux: + LIBS: -lstdc++ -lm + darwin: + LIBS: -lc++