shader-slang: init at 2025.2 (#358202)
This commit is contained in:
commit
48d5c5fec2
77
pkgs/by-name/sh/shader-slang/1-find-packages.patch
Normal file
77
pkgs/by-name/sh/shader-slang/1-find-packages.patch
Normal file
@ -0,0 +1,77 @@
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index dc281211..c36b9bcb 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -154,6 +154,8 @@ advanced_option(
|
||||
"Build using system unordered dense"
|
||||
OFF
|
||||
)
|
||||
+advanced_option(SLANG_USE_SYSTEM_SPIRV_TOOLS "Build using system SPIR-V tools library" OFF)
|
||||
+advanced_option(SLANG_USE_SYSTEM_GLSLANG "Build using system glslang library" OFF)
|
||||
|
||||
option(
|
||||
SLANG_SPIRV_HEADERS_INCLUDE_DIR
|
||||
@@ -289,6 +291,34 @@ if(${SLANG_USE_SYSTEM_UNORDERED_DENSE})
|
||||
find_package(unordered_dense CONFIG QUIET)
|
||||
endif()
|
||||
|
||||
+if(${SLANG_USE_SYSTEM_MINIZ})
|
||||
+ find_package(miniz REQUIRED)
|
||||
+ add_library(miniz ALIAS miniz::miniz)
|
||||
+endif()
|
||||
+
|
||||
+if(${SLANG_USE_SYSTEM_LZ4})
|
||||
+ find_package(lz4 REQUIRED)
|
||||
+ add_library(lz4_static ALIAS LZ4::lz4)
|
||||
+endif()
|
||||
+
|
||||
+if(${SLANG_USE_SYSTEM_VULKAN_HEADERS})
|
||||
+ find_package(VulkanHeaders REQUIRED)
|
||||
+endif()
|
||||
+
|
||||
+if(${SLANG_USE_SYSTEM_SPIRV_HEADERS})
|
||||
+ find_package(SPIRV-Headers REQUIRED)
|
||||
+ add_library(SPIRV-Headers ALIAS SPIRV-Headers::SPIRV-Headers)
|
||||
+endif()
|
||||
+
|
||||
+if(${SLANG_USE_SYSTEM_SPIRV_TOOLS})
|
||||
+ find_package(SPIRV-Tools REQUIRED)
|
||||
+endif()
|
||||
+
|
||||
+if(${SLANG_USE_SYSTEM_GLSLANG})
|
||||
+ find_package(glslang REQUIRED)
|
||||
+ add_library(glslang ALIAS glslang::glslang)
|
||||
+endif()
|
||||
+
|
||||
add_subdirectory(external)
|
||||
|
||||
# webgpu_dawn is only available as a fetched shared library, since Dawn's nested source
|
||||
diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt
|
||||
index 43105a5f..8b9c0f14 100644
|
||||
--- a/external/CMakeLists.txt
|
||||
+++ b/external/CMakeLists.txt
|
||||
@@ -73,19 +73,24 @@ if(NOT ${SLANG_USE_SYSTEM_SPIRV_HEADERS})
|
||||
endif()
|
||||
|
||||
if(SLANG_ENABLE_SLANG_GLSLANG)
|
||||
+if(NOT ${SLANG_USE_SYSTEM_SPIRV_TOOLS})
|
||||
# SPIRV-Tools
|
||||
set(SPIRV_TOOLS_BUILD_STATIC ON)
|
||||
set(SPIRV_WERROR OFF)
|
||||
set(SPIRV_HEADER_DIR "${CMAKE_CURRENT_LIST_DIR}/spirv-headers/")
|
||||
set(SPIRV_SKIP_TESTS ON)
|
||||
add_subdirectory(spirv-tools EXCLUDE_FROM_ALL ${system})
|
||||
+endif()
|
||||
|
||||
+if(NOT ${SLANG_USE_SYSTEM_GLSLANG})
|
||||
# glslang
|
||||
set(SKIP_GLSLANG_INSTALL ON)
|
||||
set(ENABLE_OPT ON)
|
||||
set(ENABLE_PCH OFF)
|
||||
+ set(ALLOW_EXTERNAL_SPIRV_TOOLS ${SLANG_USE_SYSTEM_SPIRV_TOOLS})
|
||||
add_subdirectory(glslang EXCLUDE_FROM_ALL ${system})
|
||||
endif()
|
||||
+endif()
|
||||
|
||||
# imgui
|
||||
add_library(imgui INTERFACE)
|
||||
27
pkgs/by-name/sh/shader-slang/2-shared-llvm.patch
Normal file
27
pkgs/by-name/sh/shader-slang/2-shared-llvm.patch
Normal file
@ -0,0 +1,27 @@
|
||||
diff --git a/cmake/LLVM.cmake b/cmake/LLVM.cmake
|
||||
index 3c7c1b54..7f66d6bd 100644
|
||||
--- a/cmake/LLVM.cmake
|
||||
+++ b/cmake/LLVM.cmake
|
||||
@@ -7,7 +7,7 @@ function(llvm_target_from_components target_name)
|
||||
${components}
|
||||
)
|
||||
add_library(${target_name} INTERFACE)
|
||||
- target_link_libraries(${target_name} INTERFACE ${llvm_libs})
|
||||
+ target_link_libraries(${target_name} INTERFACE LLVM)
|
||||
target_include_directories(
|
||||
${target_name}
|
||||
SYSTEM
|
||||
@@ -66,12 +66,7 @@ function(fetch_or_build_slang_llvm)
|
||||
llvm_target_from_components(llvm-dep filecheck native orcjit)
|
||||
clang_target_from_libs(
|
||||
clang-dep
|
||||
- clangBasic
|
||||
- clangCodeGen
|
||||
- clangDriver
|
||||
- clangLex
|
||||
- clangFrontend
|
||||
- clangFrontendTool
|
||||
+ clang-cpp
|
||||
)
|
||||
slang_add_target(
|
||||
source/slang-llvm
|
||||
45
pkgs/by-name/sh/shader-slang/3-glslang-15.patch
Normal file
45
pkgs/by-name/sh/shader-slang/3-glslang-15.patch
Normal file
@ -0,0 +1,45 @@
|
||||
diff --git a/source/slang-glslang/slang-glslang.cpp b/source/slang-glslang/slang-glslang.cpp
|
||||
index 4abcada6..0f63a64e 100644
|
||||
--- a/source/slang-glslang/slang-glslang.cpp
|
||||
+++ b/source/slang-glslang/slang-glslang.cpp
|
||||
@@ -1,8 +1,7 @@
|
||||
// slang-glslang.cpp
|
||||
#include "slang-glslang.h"
|
||||
|
||||
-#include "SPIRV/GlslangToSpv.h"
|
||||
-#include "glslang/MachineIndependent/localintermediate.h"
|
||||
+#include "glslang/SPIRV/GlslangToSpv.h"
|
||||
#include "glslang/Public/ShaderLang.h"
|
||||
#include "slang.h"
|
||||
#include "spirv-tools/libspirv.h"
|
||||
@@ -17,6 +16,7 @@
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <sstream>
|
||||
+#include <cassert>
|
||||
|
||||
// This is a wrapper to allow us to run the `glslang` compiler
|
||||
// in a controlled fashion.
|
||||
@@ -718,6 +718,11 @@ static int glslang_compileGLSLToSPIRV(glslang_CompileRequest_1_2 request)
|
||||
return 1;
|
||||
}
|
||||
|
||||
+ if (debugLevel == SLANG_DEBUG_INFO_LEVEL_MAXIMAL)
|
||||
+ {
|
||||
+ shader->addSourceText(sourceText, sourceTextLength);
|
||||
+ }
|
||||
+
|
||||
if (request.entryPointName && strlen(request.entryPointName))
|
||||
shader->setEntryPoint(request.entryPointName);
|
||||
|
||||
@@ -741,10 +746,6 @@ static int glslang_compileGLSLToSPIRV(glslang_CompileRequest_1_2 request)
|
||||
auto stageIntermediate = program->getIntermediate((EShLanguage)stage);
|
||||
if (!stageIntermediate)
|
||||
continue;
|
||||
- if (debugLevel == SLANG_DEBUG_INFO_LEVEL_MAXIMAL)
|
||||
- {
|
||||
- stageIntermediate->addSourceText(sourceText, sourceTextLength);
|
||||
- }
|
||||
|
||||
std::vector<unsigned int> spirv;
|
||||
spv::SpvBuildLogger logger;
|
||||
158
pkgs/by-name/sh/shader-slang/package.nix
Normal file
158
pkgs/by-name/sh/shader-slang/package.nix
Normal file
@ -0,0 +1,158 @@
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchFromGitHub,
|
||||
cmake,
|
||||
ninja,
|
||||
python3,
|
||||
miniz,
|
||||
lz4,
|
||||
libxml2,
|
||||
libX11,
|
||||
spirv-headers,
|
||||
glslang,
|
||||
llvmPackages_13,
|
||||
versionCheckHook,
|
||||
gitUpdater,
|
||||
|
||||
# Required for compiling to SPIR-V or GLSL
|
||||
withGlslang ? true,
|
||||
# Can be used for compiling shaders to CPU targets, see:
|
||||
# https://github.com/shader-slang/slang/blob/master/docs/cpu-target.md
|
||||
# If `withLLVM` is disabled, Slang will fall back to the C++ compiler found
|
||||
# in the environment, if one exists.
|
||||
withLLVM ? false,
|
||||
# Dynamically link against libllvm and libclang++ (upstream defaults to static)
|
||||
withSharedLLVM ? withLLVM,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "shader-slang";
|
||||
version = "2025.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "shader-slang";
|
||||
repo = "slang";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-H/ePYu6o926M22zussW1f15iYRJCq29TeNJzBD0eAao=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
patches =
|
||||
[
|
||||
# Slang's build definitions do not support using system provided cmake packages
|
||||
# for its dependencies.
|
||||
# While it does come with "SLANG_USE_SYSTEM_XYZ" flags, these expect Slang to be
|
||||
# imported into some other CMake build that already provides the necessary target.
|
||||
# This patch adds the required `find_package` calls and sets up target aliases where needed.
|
||||
./1-find-packages.patch
|
||||
]
|
||||
++ lib.optionals withSharedLLVM [
|
||||
# Upstream statically links libllvm and libclang++, resulting in a ~5x increase in binary size.
|
||||
./2-shared-llvm.patch
|
||||
]
|
||||
++ lib.optionals withGlslang [
|
||||
# Upstream depends on glslang 13 and there are minor breaking changes in glslang 15, the version
|
||||
# we ship in nixpkgs.
|
||||
./3-glslang-15.patch
|
||||
];
|
||||
|
||||
outputs = [
|
||||
"out"
|
||||
"dev"
|
||||
"doc"
|
||||
];
|
||||
|
||||
strictDeps = true;
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
ninja
|
||||
python3
|
||||
];
|
||||
|
||||
buildInputs =
|
||||
[
|
||||
miniz
|
||||
lz4
|
||||
libxml2
|
||||
spirv-headers
|
||||
]
|
||||
++ (lib.optionals stdenv.hostPlatform.isLinux [
|
||||
libX11
|
||||
])
|
||||
++ (lib.optionals withLLVM [
|
||||
# Slang only supports LLVM 13:
|
||||
# https://github.com/shader-slang/slang/blob/master/docs/building.md#llvm-support
|
||||
llvmPackages_13.llvm
|
||||
llvmPackages_13.libclang
|
||||
])
|
||||
++ (lib.optionals withGlslang [
|
||||
# SPIRV-tools is included in glslang.
|
||||
glslang
|
||||
]);
|
||||
|
||||
separateDebugInfo = true;
|
||||
|
||||
# Required for spaces in cmakeFlags, see https://github.com/NixOS/nixpkgs/issues/114044
|
||||
__structuredAttrs = true;
|
||||
|
||||
preConfigure =
|
||||
lib.optionalString stdenv.hostPlatform.isLinux ''
|
||||
# required to handle LTO objects
|
||||
export AR="${stdenv.cc.targetPrefix}gcc-ar"
|
||||
export NM="${stdenv.cc.targetPrefix}gcc-nm"
|
||||
export RANLIB="${stdenv.cc.targetPrefix}gcc-ranlib"
|
||||
''
|
||||
+ ''
|
||||
# cmake setup hook only sets CMAKE_AR and CMAKE_RANLIB, but not these
|
||||
prependToVar cmakeFlags "-DCMAKE_CXX_COMPILER_AR=$(command -v $AR)"
|
||||
prependToVar cmakeFlags "-DCMAKE_CXX_COMPILER_RANLIB=$(command -v $RANLIB)"
|
||||
'';
|
||||
|
||||
cmakeFlags =
|
||||
[
|
||||
"-GNinja Multi-Config"
|
||||
# The cmake setup hook only specifies `-DCMAKE_BUILD_TYPE=Release`,
|
||||
# which does nothing for "Ninja Multi-Config".
|
||||
"-DCMAKE_CONFIGURATION_TYPES=RelWithDebInfo"
|
||||
# Handled by separateDebugInfo so we don't need special installation handling
|
||||
"-DSLANG_ENABLE_SPLIT_DEBUG_INFO=OFF"
|
||||
"-DSLANG_VERSION_FULL=v${finalAttrs.version}-nixpkgs"
|
||||
# slang-rhi tries to download WebGPU dawn binaries, and as stated on
|
||||
# https://github.com/shader-slang/slang-rhi is "under active refactoring
|
||||
# and development, and is not yet ready for general use."
|
||||
"-DSLANG_ENABLE_SLANG_RHI=OFF"
|
||||
"-DSLANG_USE_SYSTEM_MINIZ=ON"
|
||||
"-DSLANG_USE_SYSTEM_LZ4=ON"
|
||||
"-DSLANG_SPIRV_HEADERS_INCLUDE_DIR=${spirv-headers}/include"
|
||||
"-DSLANG_SLANG_LLVM_FLAVOR=${if withLLVM then "USE_SYSTEM_LLVM" else "DISABLE"}"
|
||||
]
|
||||
# Currently depends on unreleased op type `SpvOpTypeNodePayloadArrayAMDX`,
|
||||
# which will be included in next release >1.3.296
|
||||
++ lib.optional (lib.versionAtLeast spirv-headers.version "1.3.297.0") "-DSLANG_USE_SYSTEM_SPIRV_HEADERS=ON"
|
||||
++ (lib.optionals withGlslang [
|
||||
"-DSLANG_USE_SYSTEM_SPIRV_TOOLS=ON"
|
||||
"-DSLANG_USE_SYSTEM_GLSLANG=ON"
|
||||
])
|
||||
++ lib.optional (!withGlslang) "-DSLANG_ENABLE_SLANG_GLSLANG=OFF";
|
||||
|
||||
nativeInstallCheckInputs = [ versionCheckHook ];
|
||||
versionCheckProgram = "${placeholder "out"}/bin/slangc";
|
||||
versionCheckProgramArg = [ "-v" ];
|
||||
doInstallCheck = true;
|
||||
|
||||
passthru.updateScript = gitUpdater {
|
||||
rev-prefix = "v";
|
||||
ignoredVersions = "*-draft";
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = "A shading language that makes it easier to build and maintain large shader codebases in a modular and extensible fashion";
|
||||
homepage = "https://github.com/shader-slang/slang";
|
||||
license = lib.licenses.asl20-llvm;
|
||||
maintainers = with lib.maintainers; [ niklaskorz ];
|
||||
mainProgram = "slangc";
|
||||
platforms = lib.platforms.all;
|
||||
};
|
||||
})
|
||||
Loading…
x
Reference in New Issue
Block a user