Skip to content

Conversation

@Crivella
Copy link
Contributor

@Crivella Crivella commented Jun 20, 2025

Added EC and patches for SPIRV-tools

Requires:

@github-actions github-actions bot added the new label Jun 20, 2025
Copy link
Contributor

@Micket Micket left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some obversations from what i had separately started with for SPIRV-tools and friends

easyblock = 'CMakeMake'

name = 'SPIRV-tools'
version = '2024.3'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this the correct version to use?
https://github.com/KhronosGroup/SPIRV-Tools/releases has 2025.1
though, strangely, they also do mark 2024.4 as the latest.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Crivella any reason we're not going with latest here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this was the version i had used originally that i was at some point able to stack with glslang before adding testing, but in the end I preferred going to the monolitic build.

Moved to the latest version ced2504

There is also the idea in #23171 (comment) to be considered to ship SPIRV-tools and glslang as a single build.

Comment on lines 31 to 36
{
"download_filename": "vulkan-sdk-%s.tar.gz" % local_vulkan_sdk_version,
"filename": "SPIRV-headers-vulkan-sdk-%s.tar.gz" % local_vulkan_sdk_version,
"extract_cmd": "mkdir -p %(builddir)s/spirv-tools/external/spirv-headers && tar xzvf %s --strip-components=1 -C $_",
"source_urls": ["https://github.com/KhronosGroup/SPIRV-Headers/archive/refs/tags"],
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the version i started with 2025.1 allowed for -DSPIRV-Headers_SOURCE_DIR=$EBROOTSPIRVMINHEADERS for keeping this separate.
I had just created a SPIRV-Headers-1.4.309.0-GCCcore-14.2.0 as a builddep:

easyblock = 'CMakeMake'

name = 'SPIRV-Headers'
version = '1.4.313.0'

homepage = 'https://github.com/KhronosGroup/SPIRV-Headers'
description = 'Khronos-reference front end for GLSL/ESSL, partial front end for HLSL, and a SPIR-V generator. '

toolchain = {'name': 'GCCcore', 'version': '14.2.0'}

source_urls = ['https://github.com/KhronosGroup/SPIRV-Headers/archive/refs/tags/']
sources = ['vulkan-sdk-%(version)s.tar.gz']
checksums = ['f68be549d74afb61600a1e3a7d1da1e6b7437758c8e77d664909f88f302c5ac1']

builddependencies = [
    ('binutils', '2.42'),
    ('CMake', '3.31.3'),
]

sanity_check_paths = {
    'files': [f'include/spirv/{x}/spirv.h' for x in ['1.0', '1.1', '1.2']],
    'dirs': ['include/spirv/'],
}

moduleclass = 'tools

dependencies = []

configopts = ' '.join([
'-DSPIRV_TOOLS_USE_MIMALLOC=ON', # Use mimalloc for memory management
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This does not seem like it's supported on 2024.3, or even 2025.1. mimalloc support was added only yesterday to the main branch KhronosGroup/SPIRV-Tools@422150b

(and fortunately, it was added with support for custom external paths, so we could just use a normal external builddep)


local_vulkan_sdk_version = '1.4.309.0'
local_googletest_version = '1.17.0'
local_google_effcee_version = '2019.1'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks like they stopped bothering tagging, but there is much newer code.

Comment on lines 37 to 54
# Running with googletest also requires effcee -> re2
{
"source_urls": ["https://github.com/google/googletest/releases/download/v%s" % local_googletest_version],
"filename": "googletest-%s.tar.gz" % local_googletest_version,
"extract_cmd": "mkdir -p %(builddir)s/spirv-tools/external/googletest && tar xzvf %s --strip-components=1 -C $_",
},
{
"source_urls": ["https://github.com/google/effcee/archive/refs/tags/"],
"download_filename": "v%s.tar.gz" % local_google_effcee_version,
"filename": "effcee-%s.tar.gz" % local_google_effcee_version,
"extract_cmd": "mkdir -p %(builddir)s/spirv-tools/external/effcee && tar xzvf %s --strip-components=1 -C $_",
},
{
"source_urls": ["https://github.com/google/re2/archive/refs/tags/"],
"download_filename": "%s.tar.gz" % local_google_re2_version,
"filename": "re2-%s.tar.gz" % local_google_re2_version,
"extract_cmd": "mkdir -p %(builddir)s/spirv-tools/external/re2 && tar xzvf %s --strip-components=1 -C $_",
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm, a quick test I think a very simple patch, like adding

find_package(GTest REQUIRED GLOBAL)
add_library(gmock ALIAS GTest::gmock)
add_library(gmock_main ALIAS GTest::gmock_main)
add_library(gtest ALIAS GTest::gtest)
add_library(gtest_main ALIAS GTest::gtest_main)

would allow for these to be separate easyconfigs as well, we already have googletest, so, a simple re2 and effcee build should maybe just work fine here. Still finishing up those standalone easyconfigs for testing so I can't be sure how well that will work out, but it looks straight forward enough as long as the gmock and other targets are defined.

@Crivella
Copy link
Contributor Author

Umh I have reused something i started making a few months ago to try SPIRV with LLVM.
Will give it a more careful look

@Crivella
Copy link
Contributor Author

Test report by @Crivella
SUCCESS
Build succeeded for 1 out of 1 (1 easyconfigs in total)
crivella-desktop - Linux Ubuntu 22.04.5 LTS (Jammy Jellyfish), x86_64, 13th Gen Intel(R) Core(TM) i9-13900K (skylake), Python 3.11.13
See https://gist.github.com/Crivella/b587926be14ed4dbbc66c8e153e3267c for a full test report.

@Crivella
Copy link
Contributor Author

At some point the downloaded HASH for the same version changed and the build was not working anymore.
I switched the easyconfig to use the commits specified in the upstream DEPS file.

  • I do not think effcee and re2 will ever create trouble down the line. As far as i understand they are tools used to check the output of the tests in googletest similarly to what FileCheck does for LLVM (so I assume it is just matching the output of test programs with some expected template)
  • googletest I do not think using a commit specific version here will give us trouble down the line as it is only used for testing. Regarding the comment i do not have experience with this suite. I had assumed that it needs to be compiled specifically to test with what is being built with.

In general also for the other dependencies, as this is a suite of tools, i do not expect problems down the line in using a specific version of statically linked dependencies

@Crivella
Copy link
Contributor Author

@boegelbot please test @ jsc-zen3

@boegelbot
Copy link
Collaborator

@Crivella: Request for testing this PR well received on jsczen3l1.int.jsc-zen3.fz-juelich.de

PR test command 'if [[ develop != 'develop' ]]; then EB_BRANCH=develop ./easybuild_develop.sh 2> /dev/null 1>&2; EB_PREFIX=/home/boegelbot/easybuild/develop source init_env_easybuild_develop.sh; fi; EB_PR=23174 EB_ARGS= EB_CONTAINER= EB_REPO=easybuild-easyconfigs EB_BRANCH=develop /opt/software/slurm/bin/sbatch --job-name test_PR_23174 --ntasks=8 ~/boegelbot/eb_from_pr_upload_jsc-zen3.sh' executed!

  • exit code: 0
  • output:
Submitted batch job 7018

Test results coming soon (I hope)...

Details

- notification for comment with ID 3008731392 processed

Message to humans: this is just bookkeeping information for me,
it is of no use to you (unless you think I have a bug, which I don't).

@boegelbot
Copy link
Collaborator

Test report by @boegelbot
SUCCESS
Build succeeded for 1 out of 1 (1 easyconfigs in total)
jsczen3c2.int.jsc-zen3.fz-juelich.de - Linux Rocky Linux 9.5, x86_64, AMD EPYC-Milan Processor (zen3), Python 3.9.21
See https://gist.github.com/boegelbot/cbc27700f1f9d84a6ec1660b74b46ef1 for a full test report.

@Crivella
Copy link
Contributor Author

@Micket Considering this are not libraries that we are gonna reuse after, i have the feeling it would be a huge increase of effort on our part to customize their build to make the various packages able to be separated.

Especially considering i do not see an effort upstream in making major version of the releases compatible between each other, but only tying them together by a list of commit hashes

@Thyre Thyre added the 2025a issues & PRs related to 2025a common toolchains label Aug 18, 2025
@Thyre
Copy link
Collaborator

Thyre commented Sep 2, 2025

I agree that spending work on using our EasyConfigs just for the tests might be too much effort, especially considering that it doesn't look like they're particularly interested in using releases. As far as I can see, all of these dependencies are only used for testing. As long as these binaries don't end up in our install folder, I think it is fine to just use these internal submodules.

What might be important is making sure that the installation works offline, i.e. that we're able to fetch all sources beforehand.

@Thyre
Copy link
Collaborator

Thyre commented Sep 2, 2025

Test report by @Thyre
SUCCESS
Build succeeded for 1 out of 1 (1 easyconfigs in total)
ZAM054 - Linux Zorin OS 17, x86_64, 12th Gen Intel(R) Core(TM) i7-1260P, 1 x NVIDIA NVIDIA GeForce MX550, 580.65.06, Python 3.10.12
See https://gist.github.com/Thyre/4cd6180c0d432059e8a46e11fc7bcf50 for a full test report.

- Added build of `spirv-fuzz`
- Replace double quotes with single quotes
@Crivella
Copy link
Contributor Author

Crivella commented Sep 2, 2025

@boegelbot please test @ jsc-zen3

@Crivella
Copy link
Contributor Author

Crivella commented Sep 2, 2025

Test report by @Crivella
SUCCESS
Build succeeded for 1 out of 1 (1 easyconfigs in total)
crivella-desktop - Linux Ubuntu 22.04.5 LTS (Jammy Jellyfish), x86_64, 13th Gen Intel(R) Core(TM) i9-13900K (skylake), Python 3.11.13
See https://gist.github.com/Crivella/26f649043d0854f3e4a58dd64ff3d190 for a full test report.

@boegelbot
Copy link
Collaborator

@Crivella: Request for testing this PR well received on jsczen3l1.int.jsc-zen3.fz-juelich.de

PR test command 'if [[ develop != 'develop' ]]; then EB_BRANCH=develop ./easybuild_develop.sh 2> /dev/null 1>&2; EB_PREFIX=/home/boegelbot/easybuild/develop source init_env_easybuild_develop.sh; fi; EB_PR=23174 EB_ARGS= EB_CONTAINER= EB_REPO=easybuild-easyconfigs EB_BRANCH=develop /opt/software/slurm/bin/sbatch --job-name test_PR_23174 --ntasks=8 ~/boegelbot/eb_from_pr_upload_jsc-zen3.sh' executed!

  • exit code: 0
  • output:
Submitted batch job 7815

Test results coming soon (I hope)...

Details

- notification for comment with ID 3244381937 processed

Message to humans: this is just bookkeeping information for me,
it is of no use to you (unless you think I have a bug, which I don't).

@Crivella
Copy link
Contributor Author

Crivella commented Sep 2, 2025

Also tried to use -DSPIRV_ENABLE_LONG_FUZZER_TESTS=ON but i end up with one error (below) which seems to be just a problem in the order of the lines.
Not sure if it is worth the effort to fix/ignore it, or if it is actually significant

/home/crivella/.local/easybuild/build/SPIRVtools/2024.3/GCCcore-14.2.0/spirv-tools/test/fuzz/fuzz_test_util.cpp:69: Failure
Expected equality of these values:
  expected_disassembled
    Which is: "               OpCapability Shader\n          %1 = OpExtInstImport \"GLSL.std.450\"\n               OpMemoryModel Logical GLSL450\n               OpEntryPoint Fragment %4 \"main\" %16 %139 %25 %68\n               OpExecutionMode %4 OriginUpperLeft\n               OpSource ESSL 310\n               OpName %4 \"main\"\n               OpName %16 \"gl_FragCoord\"\n               OpName %23 \"buf1\"\n               OpMemberName %23 0 \"resolution\"\n               OpName %25 \"\"\n               OpName %61 \"data\"\n               OpName %66 \"buf0\"\n               OpMemberName %66 0 \"injectionSwitch\"\n               OpName %68 \"\"\n               OpName %139 \"_GLF_color\"\n               OpDecorate %16 BuiltIn FragCoord\n               OpMemberDecorate %23 0 Offset 0\n               OpDecorate %23 Block\n               OpDecorate %25 DescriptorSet 0\n               OpDecorate %25 Binding 1\n               OpDecorate %64 RelaxedPrecision\n               OpMemberDecorate %66 0 Offset 0\n               OpDecorate %66 Block\n               OpDecorate %68 DescriptorSet 0\n               OpDecorate %68 Binding 0\n               OpDecorate %75 RelaxedPrecision\n               OpDecorate %95 RelaxedPrecision\n               OpDecorate %126 RelaxedPrecision\n               OpDecorate %128 RelaxedPrecision\n               OpDecorate %139 Location 0\n               OpDecorate %182 RelaxedPrecision\n               OpDecorate %183 RelaxedPrecision\n               OpDecorate %184 RelaxedPrecision\n               OpDecorate %1148 NoContraction\n               OpDecorate %95 NoContraction\n               OpDecorate %1149 NoContraction\n               OpDecorate %134 NoContraction\n               OpDecorate %143 NoContraction\n               OpDecorate %147 NoContraction\n               OpDecorate %156 NoContraction\n               OpDecorate %159 NoContraction\n               OpDecorate %162 NoContraction\n               OpDecorate %128 NoContraction\n          %2 = OpTypeVoid\n          %3 = OpTypeFunction %2\n          %6 = OpTypeFloat 32\n          %7 = OpTypePointer Function %6\n          %8 = OpTypeBool\n         %14 = OpTypeVector %6 4\n         %15 = OpTypePointer Input %14\n         %16 = OpVariable %15 Input\n         %17 = OpTypeInt 32 0\n         %18 = OpConstant %17 1\n         %19 = OpTypePointer Input %6\n         %22 = OpTypeVector %6 2\n         %23 = OpTypeStruct %22\n         %24 = OpTypePointer Uniform %23\n         %25 = OpVariable %24 Uniform\n         %26 = OpTypeInt 32 1\n         %27 = OpConstant %26 0\n         %28 = OpTypePointer Uniform %6\n         %56 = OpConstant %26 10\n         %58 = OpConstant %17 10\n         %59 = OpTypeArray %6 %58\n         %60 = OpTypePointer Function %59\n         %66 = OpTypeStruct %22\n         %67 = OpTypePointer Uniform %66\n         %68 = OpVariable %67 Uniform\n         %74 = OpConstant %26 1\n         %83 = OpConstant %26 9\n        %129 = OpConstant %17 0\n        %138 = OpTypePointer Output %14\n        %139 = OpVariable %138 Output\n        %144 = OpConstant %26 5\n        %151 = OpConstant %6 1\n        %194 = OpConstant %6 0.5\n        %195 = OpConstant %6 0.100000001\n       %1106 = OpConstant %6 0\n       %1145 = OpConstantTrue %8\n       %1165 = OpConstantFalse %8\n       %1168 = OpConstant %17 9\n       %1169 = OpConstant %17 5\n       %1170 = OpConstantNull %26\n       %1171 = OpConstantNull %17\n          %4 = OpFunction %2 None %3\n          %5 = OpLabel\n         %61 = OpVariable %60 Function\n               OpBranch %50\n         %50 = OpLabel\n        %182 = OpPhi %26 %1170 %5 %75 %51\n         %57 = OpSLessThan %8 %182 %56\n       %1148 = OpLogicalNot %8 %57\n               OpLoopMerge %52 %51 Unroll|PartialCount 74\n               OpBranchConditional %1148 %52 %51\n         %52 = OpLabel\n               OpBranch %77\n         %77 = OpLabel\n        %183 = OpPhi %26 %27 %52 %128 %88\n         %84 = OpSLessThan %8 %183 %83\n               OpLoopMerge %79 %88 Unroll\n               OpBranchConditional %84 %78 %79\n         %78 = OpLabel\n               OpBranch %86\n         %86 = OpLabel\n        %184 = OpPhi %26 %1170 %78 %126 %89\n         %92 = OpSLessThan %8 %184 %56\n               OpLoopMerge %1000 %89 PartialCount 93\n               OpBranchConditional %92 %87 %1000\n         %87 = OpLabel\n         %95 = OpIAdd %26 %183 %74\n         %96 = OpSLessThan %8 %184 %95\n               OpSelectionMerge %98 None\n               OpBranchConditional %96 %97 %98\n         %98 = OpLabel\n        %104 = OpInBoundsAccessChain %7 %61 %183\n        %105 = OpLoad %6 %104\n        %107 = OpInBoundsAccessChain %7 %61 %184\n        %108 = OpLoad %6 %107\n        %166 = OpInBoundsAccessChain %19 %16 %74\n        %167 = OpLoad %6 %166\n        %168 = OpInBoundsAccessChain %28 %25 %27 %18\n        %169 = OpLoad %6 %168\n        %170 = OpFMul %6 %169 %194\n               OpBranch %1147\n       %1147 = OpLabel\n               OpSelectionMerge %1146 None\n               OpBranchConditional %1145 %174 %1128\n        %174 = OpLabel\n       %1153 = OpFOrdLessThan %8 %167 %170\n        %180 = OpFOrdLessThan %8 %105 %108\n               OpBranch %173\n        %173 = OpLabel\n        %177 = OpFOrdGreaterThan %8 %105 %108\n               OpBranch %172\n        %172 = OpLabel\n               OpBranch %111\n        %111 = OpLabel\n       %1155 = OpSelect %8 %1153 %177 %180\n               OpSelectionMerge %1101 None\n               OpBranchConditional %1155 %1102 %1104\n       %1101 = OpLabel\n        %116 = OpPhi %6 %1103 %1102 %1105 %1104\n       %1149 = OpLogicalNot %8 %1155\n               OpSelectionMerge %1107 None\n               OpBranchConditional %1149 %1110 %1108\n       %1108 = OpLabel\n       %1109 = OpLoad %6 %107\n               OpBranch %1107\n       %1107 = OpLabel\n        %120 = OpPhi %6 %1109 %1108 %1111 %1110\n               OpSelectionMerge %1112 None\n               OpBranchConditional %1155 %1113 %1112\n       %1112 = OpLabel\n               OpSelectionMerge %1114 None\n               OpBranchConditional %1155 %1115 %1114\n       %1114 = OpLabel\n               OpBranch %112\n        %112 = OpLabel\n               OpBranch %1146\n       %1128 = OpLabel\n       %1152 = OpFOrdLessThan %8 %167 %170\n       %1129 = OpFOrdLessThan %8 %105 %108\n               OpBranch %1119\n       %1119 = OpLabel\n       %1120 = OpFOrdGreaterThan %8 %105 %108\n               OpBranch %1116\n       %1116 = OpLabel\n       %1117 = OpSelect %8 %1152 %1120 %1129\n               OpBranch %1124\n       %1124 = OpLabel\n               OpSelectionMerge %1131 None\n               OpBranchConditional %1117 %1134 %1136\n       %1136 = OpLabel\n       %1137 = OpCopyObject %6 %1106\n               OpBranch %1131\n       %1131 = OpLabel\n       %1132 = OpPhi %6 %1137 %1136 %1135 %1134\n               OpSelectionMerge %1142 None\n               OpBranchConditional %1117 %1122 %1125\n       %1125 = OpLabel\n       %1126 = OpCopyObject %6 %1106\n               OpBranch %1142\n       %1142 = OpLabel\n       %1143 = OpPhi %6 %1126 %1125 %1123 %1122\n               OpSelectionMerge %1139 None\n               OpBranchConditional %1117 %1138 %1139\n       %1138 = OpLabel\n               OpStore %104 %1143\n               OpBranch %1139\n       %1139 = OpLabel\n               OpSelectionMerge %1141 None\n               OpBranchConditional %1117 %1140 %1141\n       %1140 = OpLabel\n               OpStore %107 %1132\n               OpBranch %1141\n       %1141 = OpLabel\n               OpBranch %1127\n       %1146 = OpLabel\n       %1154 = OpPhi %8 %1153 %112 %1152 %1127\n       %1118 = OpPhi %8 %1155 %112 %1117 %1127\n       %1121 = OpPhi %8 %177 %112 %1120 %1127\n       %1130 = OpPhi %8 %180 %112 %1129 %1127\n       %1133 = OpPhi %6 %1132 %1127 %116 %112\n       %1144 = OpPhi %6 %120 %112 %1143 %1127\n               OpBranch %89\n         %89 = OpLabel\n        %126 = OpIAdd %26 %184 %74\n               OpBranch %86\n       %1000 = OpLabel\n               OpBranch %88\n         %79 = OpLabel\n        %130 = OpAccessChain %19 %16 %27\n        %131 = OpLoad %6 %130\n        %132 = OpAccessChain %28 %25 %27 %1171\n        %133 = OpLoad %6 %132\n        %134 = OpFMul %6 %133 %194\n        %135 = OpFOrdLessThan %8 %131 %134\n               OpSelectionMerge %137 None\n               OpBranchConditional %135 %136 %153\n        %136 = OpLabel\n        %140 = OpInBoundsAccessChain %7 %61 %27\n        %141 = OpLoad %6 %140\n        %143 = OpFMul %6 %141 %195\n        %145 = OpAccessChain %7 %61 %144\n        %146 = OpLoad %6 %145\n        %147 = OpFMul %6 %146 %195\n        %148 = OpInBoundsAccessChain %7 %61 %83\n        %149 = OpLoad %6 %148\n        %150 = OpFMul %6 %149 %195\n        %152 = OpCompositeConstruct %14 %143 %147 %150 %151\n               OpStore %139 %152\n               OpBranch %137\n        %153 = OpLabel\n        %154 = OpInBoundsAccessChain %7 %61 %144\n        %155 = OpLoad %6 %154\n        %156 = OpFMul %6 %155 %195\n        %157 = OpInBoundsAccessChain %7 %61 %1168\n        %158 = OpLoad %6 %157\n        %159 = OpFMul %6 %158 %195\n        %160 = OpInBoundsAccessChain %7 %61 %1171\n        %161 = OpLoad %6 %160\n        %162 = OpFMul %6 %161 %195\n        %163 = OpCompositeConstruct %14 %156 %159 %162 %151\n               OpStore %139 %163\n               OpBranch %137\n        %137 = OpLabel\n               OpReturn\n         %88 = OpLabel\n        %128 = OpIAdd %26 %183 %74\n               OpBranch %77\n       %1127 = OpLabel\n               OpBranch %1146\n       %1122 = OpLabel\n       %1123 = OpLoad %6 %107\n               OpBranch %1142\n       %1134 = OpLabel\n       %1135 = OpLoad %6 %104\n               OpBranch %1131\n       %1115 = OpLabel\n               OpStore %107 %116\n               OpBranch %1114\n       %1113 = OpLabel\n               OpStore %104 %120\n               OpBranch %1112\n       %1110 = OpLabel\n       %1111 = OpCopyObject %6 %1106\n               OpBranch %1107\n       %1104 = OpLabel\n       %1105 = OpCopyObject %6 %1106\n               OpBranch %1101\n       %1102 = OpLabel\n       %1103 = OpLoad %6 %104\n               OpBranch %1101\n         %97 = OpLabel\n               OpBranch %89\n         %51 = OpLabel\n         %64 = OpISub %26 %58 %182\n         %65 = OpConvertSToF %6 %64\n         %69 = OpInBoundsAccessChain %28 %68 %27 %74\n         %70 = OpLoad %6 %69\n         %71 = OpFMul %6 %65 %70\n         %72 = OpInBoundsAccessChain %7 %61 %182\n               OpStore %72 %71\n         %75 = OpIAdd %26 %182 %74\n               OpBranch %50\n               OpFunctionEnd\n"
  actual_disassembled
    Which is: "               OpCapability Shader\n          %1 = OpExtInstImport \"GLSL.std.450\"\n               OpMemoryModel Logical GLSL450\n               OpEntryPoint Fragment %4 \"main\" %16 %139 %25 %68\n               OpExecutionMode %4 OriginUpperLeft\n               OpSource ESSL 310\n               OpName %4 \"main\"\n               OpName %16 \"gl_FragCoord\"\n               OpName %23 \"buf1\"\n               OpMemberName %23 0 \"resolution\"\n               OpName %25 \"\"\n               OpName %61 \"data\"\n               OpName %66 \"buf0\"\n               OpMemberName %66 0 \"injectionSwitch\"\n               OpName %68 \"\"\n               OpName %139 \"_GLF_color\"\n               OpDecorate %16 BuiltIn FragCoord\n               OpMemberDecorate %23 0 Offset 0\n               OpDecorate %23 Block\n               OpDecorate %25 DescriptorSet 0\n               OpDecorate %25 Binding 1\n               OpDecorate %64 RelaxedPrecision\n               OpMemberDecorate %66 0 Offset 0\n               OpDecorate %66 Block\n               OpDecorate %68 DescriptorSet 0\n               OpDecorate %68 Binding 0\n               OpDecorate %75 RelaxedPrecision\n               OpDecorate %95 RelaxedPrecision\n               OpDecorate %126 RelaxedPrecision\n               OpDecorate %128 RelaxedPrecision\n               OpDecorate %139 Location 0\n               OpDecorate %182 RelaxedPrecision\n               OpDecorate %183 RelaxedPrecision\n               OpDecorate %184 RelaxedPrecision\n               OpDecorate %1148 NoContraction\n               OpDecorate %95 NoContraction\n               OpDecorate %1149 NoContraction\n               OpDecorate %134 NoContraction\n               OpDecorate %143 NoContraction\n               OpDecorate %147 NoContraction\n               OpDecorate %156 NoContraction\n               OpDecorate %159 NoContraction\n               OpDecorate %162 NoContraction\n               OpDecorate %128 NoContraction\n          %2 = OpTypeVoid\n          %3 = OpTypeFunction %2\n          %6 = OpTypeFloat 32\n          %7 = OpTypePointer Function %6\n          %8 = OpTypeBool\n         %14 = OpTypeVector %6 4\n         %15 = OpTypePointer Input %14\n         %16 = OpVariable %15 Input\n         %17 = OpTypeInt 32 0\n         %18 = OpConstant %17 1\n         %19 = OpTypePointer Input %6\n         %22 = OpTypeVector %6 2\n         %23 = OpTypeStruct %22\n         %24 = OpTypePointer Uniform %23\n         %25 = OpVariable %24 Uniform\n         %26 = OpTypeInt 32 1\n         %27 = OpConstant %26 0\n         %28 = OpTypePointer Uniform %6\n         %56 = OpConstant %26 10\n         %58 = OpConstant %17 10\n         %59 = OpTypeArray %6 %58\n         %60 = OpTypePointer Function %59\n         %66 = OpTypeStruct %22\n         %67 = OpTypePointer Uniform %66\n         %68 = OpVariable %67 Uniform\n         %74 = OpConstant %26 1\n         %83 = OpConstant %26 9\n        %129 = OpConstant %17 0\n        %138 = OpTypePointer Output %14\n        %139 = OpVariable %138 Output\n        %144 = OpConstant %26 5\n        %151 = OpConstant %6 1\n        %194 = OpConstant %6 0.5\n        %195 = OpConstant %6 0.100000001\n       %1106 = OpConstant %6 0\n       %1145 = OpConstantTrue %8\n       %1165 = OpConstantFalse %8\n       %1168 = OpConstant %17 9\n       %1169 = OpConstant %17 5\n       %1170 = OpConstantNull %26\n       %1171 = OpConstantNull %17\n          %4 = OpFunction %2 None %3\n          %5 = OpLabel\n         %61 = OpVariable %60 Function\n               OpBranch %50\n         %50 = OpLabel\n        %182 = OpPhi %26 %1170 %5 %75 %51\n         %57 = OpSLessThan %8 %182 %56\n       %1148 = OpLogicalNot %8 %57\n               OpLoopMerge %52 %51 Unroll|PartialCount 74\n               OpBranchConditional %1148 %52 %51\n         %52 = OpLabel\n               OpBranch %77\n         %77 = OpLabel\n        %183 = OpPhi %26 %27 %52 %128 %88\n         %84 = OpSLessThan %8 %183 %83\n               OpLoopMerge %79 %88 Unroll\n               OpBranchConditional %84 %78 %79\n         %78 = OpLabel\n               OpBranch %86\n         %86 = OpLabel\n        %184 = OpPhi %26 %1170 %78 %126 %89\n         %92 = OpSLessThan %8 %184 %56\n               OpLoopMerge %1000 %89 PartialCount 93\n               OpBranchConditional %92 %87 %1000\n         %87 = OpLabel\n         %95 = OpIAdd %26 %183 %74\n         %96 = OpSLessThan %8 %184 %95\n               OpSelectionMerge %98 None\n               OpBranchConditional %96 %97 %98\n         %98 = OpLabel\n        %104 = OpInBoundsAccessChain %7 %61 %183\n        %105 = OpLoad %6 %104\n        %107 = OpInBoundsAccessChain %7 %61 %184\n        %108 = OpLoad %6 %107\n        %166 = OpInBoundsAccessChain %19 %16 %74\n        %167 = OpLoad %6 %166\n        %168 = OpInBoundsAccessChain %28 %25 %27 %18\n        %169 = OpLoad %6 %168\n        %170 = OpFMul %6 %169 %194\n               OpBranch %1147\n       %1147 = OpLabel\n               OpSelectionMerge %1146 None\n               OpBranchConditional %1145 %174 %1128\n        %174 = OpLabel\n       %1153 = OpFOrdLessThan %8 %167 %170\n        %180 = OpFOrdLessThan %8 %105 %108\n               OpBranch %173\n        %173 = OpLabel\n        %177 = OpFOrdGreaterThan %8 %105 %108\n               OpBranch %172\n        %172 = OpLabel\n               OpBranch %111\n        %111 = OpLabel\n       %1155 = OpSelect %8 %1153 %177 %180\n               OpSelectionMerge %1101 None\n               OpBranchConditional %1155 %1102 %1104\n       %1101 = OpLabel\n        %116 = OpPhi %6 %1103 %1102 %1105 %1104\n       %1149 = OpLogicalNot %8 %1155\n               OpSelectionMerge %1107 None\n               OpBranchConditional %1149 %1110 %1108\n       %1108 = OpLabel\n       %1109 = OpLoad %6 %107\n               OpBranch %1107\n       %1107 = OpLabel\n        %120 = OpPhi %6 %1109 %1108 %1111 %1110\n               OpSelectionMerge %1112 None\n               OpBranchConditional %1155 %1113 %1112\n       %1112 = OpLabel\n               OpSelectionMerge %1114 None\n               OpBranchConditional %1155 %1115 %1114\n       %1114 = OpLabel\n               OpBranch %112\n        %112 = OpLabel\n               OpBranch %1146\n       %1128 = OpLabel\n       %1152 = OpFOrdLessThan %8 %167 %170\n       %1129 = OpFOrdLessThan %8 %105 %108\n               OpBranch %1119\n       %1119 = OpLabel\n       %1120 = OpFOrdGreaterThan %8 %105 %108\n               OpBranch %1116\n       %1116 = OpLabel\n       %1117 = OpSelect %8 %1152 %1120 %1129\n               OpBranch %1124\n       %1124 = OpLabel\n               OpSelectionMerge %1131 None\n               OpBranchConditional %1117 %1134 %1136\n       %1136 = OpLabel\n       %1137 = OpCopyObject %6 %1106\n               OpBranch %1131\n       %1131 = OpLabel\n       %1132 = OpPhi %6 %1137 %1136 %1135 %1134\n               OpSelectionMerge %1142 None\n               OpBranchConditional %1117 %1122 %1125\n       %1125 = OpLabel\n       %1126 = OpCopyObject %6 %1106\n               OpBranch %1142\n       %1142 = OpLabel\n       %1143 = OpPhi %6 %1126 %1125 %1123 %1122\n               OpSelectionMerge %1139 None\n               OpBranchConditional %1117 %1138 %1139\n       %1138 = OpLabel\n               OpStore %104 %1143\n               OpBranch %1139\n       %1139 = OpLabel\n               OpSelectionMerge %1141 None\n               OpBranchConditional %1117 %1140 %1141\n       %1140 = OpLabel\n               OpStore %107 %1132\n               OpBranch %1141\n       %1141 = OpLabel\n               OpBranch %1127\n       %1146 = OpLabel\n       %1154 = OpPhi %8 %1153 %112 %1152 %1127\n       %1121 = OpPhi %8 %177 %112 %1120 %1127\n       %1133 = OpPhi %6 %1132 %1127 %116 %112\n       %1144 = OpPhi %6 %120 %112 %1143 %1127\n       %1130 = OpPhi %8 %180 %112 %1129 %1127\n       %1118 = OpPhi %8 %1155 %112 %1117 %1127\n               OpBranch %89\n         %89 = OpLabel\n        %126 = OpIAdd %26 %184 %74\n               OpBranch %86\n       %1000 = OpLabel\n               OpBranch %88\n         %79 = OpLabel\n        %130 = OpAccessChain %19 %16 %27\n        %131 = OpLoad %6 %130\n        %132 = OpAccessChain %28 %25 %27 %1171\n        %133 = OpLoad %6 %132\n        %134 = OpFMul %6 %133 %194\n        %135 = OpFOrdLessThan %8 %131 %134\n               OpSelectionMerge %137 None\n               OpBranchConditional %135 %136 %153\n        %136 = OpLabel\n        %140 = OpInBoundsAccessChain %7 %61 %27\n        %141 = OpLoad %6 %140\n        %143 = OpFMul %6 %141 %195\n        %145 = OpAccessChain %7 %61 %144\n        %146 = OpLoad %6 %145\n        %147 = OpFMul %6 %146 %195\n        %148 = OpInBoundsAccessChain %7 %61 %83\n        %149 = OpLoad %6 %148\n        %150 = OpFMul %6 %149 %195\n        %152 = OpCompositeConstruct %14 %143 %147 %150 %151\n               OpStore %139 %152\n               OpBranch %137\n        %153 = OpLabel\n        %154 = OpInBoundsAccessChain %7 %61 %144\n        %155 = OpLoad %6 %154\n        %156 = OpFMul %6 %155 %195\n        %157 = OpInBoundsAccessChain %7 %61 %1168\n        %158 = OpLoad %6 %157\n        %159 = OpFMul %6 %158 %195\n        %160 = OpInBoundsAccessChain %7 %61 %1171\n        %161 = OpLoad %6 %160\n        %162 = OpFMul %6 %161 %195\n        %163 = OpCompositeConstruct %14 %156 %159 %162 %151\n               OpStore %139 %163\n               OpBranch %137\n        %137 = OpLabel\n               OpReturn\n         %88 = OpLabel\n        %128 = OpIAdd %26 %183 %74\n               OpBranch %77\n       %1127 = OpLabel\n               OpBranch %1146\n       %1122 = OpLabel\n       %1123 = OpLoad %6 %107\n               OpBranch %1142\n       %1134 = OpLabel\n       %1135 = OpLoad %6 %104\n               OpBranch %1131\n       %1115 = OpLabel\n               OpStore %107 %116\n               OpBranch %1114\n       %1113 = OpLabel\n               OpStore %104 %120\n               OpBranch %1112\n       %1110 = OpLabel\n       %1111 = OpCopyObject %6 %1106\n               OpBranch %1107\n       %1104 = OpLabel\n       %1105 = OpCopyObject %6 %1106\n               OpBranch %1101\n       %1102 = OpLabel\n       %1103 = OpLoad %6 %104\n               OpBranch %1101\n         %97 = OpLabel\n               OpBranch %89\n         %51 = OpLabel\n         %64 = OpISub %26 %58 %182\n         %65 = OpConvertSToF %6 %64\n         %69 = OpInBoundsAccessChain %28 %68 %27 %74\n         %70 = OpLoad %6 %69\n         %71 = OpFMul %6 %65 %70\n         %72 = OpInBoundsAccessChain %7 %61 %182\n               OpStore %72 %71\n         %75 = OpIAdd %26 %182 %74\n               OpBranch %50\n               OpFunctionEnd\n"
With diff:
@@ -199,9 +199,9 @@
        %1146 = OpLabel
        %1154 = OpPhi %8 %1153 %112 %1152 %1127
-       %1118 = OpPhi %8 %1155 %112 %1117 %1127
        %1121 = OpPhi %8 %177 %112 %1120 %1127
-       %1130 = OpPhi %8 %180 %112 %1129 %1127
        %1133 = OpPhi %6 %1132 %1127 %116 %112
        %1144 = OpPhi %6 %120 %112 %1143 %1127
+       %1130 = OpPhi %8 %180 %112 %1129 %1127
+       %1118 = OpPhi %8 %1155 %112 %1117 %1127
                OpBranch %89
          %89 = OpLabel


/home/crivella/.local/easybuild/build/SPIRVtools/2024.3/GCCcore-14.2.0/spirv-tools/test/fuzz/fuzzer_replayer_test.cpp:1722: Failure
Value of: IsEqual(env, transformed_binary, replayer_result.transformed_module.get())
  Actual: false
Expected: true

@Thyre
Copy link
Collaborator

Thyre commented Sep 2, 2025

Weird to see this error, but since the conditions stay the same and only the order is switched, I would consider this okay.
I don't think any of us can perfectly tell if there's an issue because of it without knowing the actual code...

@boegelbot
Copy link
Collaborator

Test report by @boegelbot
SUCCESS
Build succeeded for 1 out of 1 (1 easyconfigs in total)
jsczen3c2.int.jsc-zen3.fz-juelich.de - Linux Rocky Linux 9.6, x86_64, AMD EPYC-Milan Processor (zen3), Python 3.9.21
See https://gist.github.com/boegelbot/2e18b12f18021fcd7640e962e93ee783 for a full test report.

@boegel boegel changed the title {tools}[GCCcore/14.2.0] Added EC files and patch for SPIRV-tools 2024.3 {tools}[GCCcore/14.2.0] SPIRV-tools v2024.3 Sep 2, 2025
@Crivella Crivella changed the title {tools}[GCCcore/14.2.0] SPIRV-tools v2024.3 {tools}[GCCcore/14.2.0] SPIRV-tools v2025.1 Sep 3, 2025
@Crivella
Copy link
Contributor Author

Crivella commented Sep 3, 2025

@boegelbot please test @ jsc-zen3

@boegelbot
Copy link
Collaborator

@Crivella: Request for testing this PR well received on jsczen3l1.int.jsc-zen3.fz-juelich.de

PR test command 'if [[ develop != 'develop' ]]; then EB_BRANCH=develop ./easybuild_develop.sh 2> /dev/null 1>&2; EB_PREFIX=/home/boegelbot/easybuild/develop source init_env_easybuild_develop.sh; fi; EB_PR=23174 EB_ARGS= EB_CONTAINER= EB_REPO=easybuild-easyconfigs EB_BRANCH=develop /opt/software/slurm/bin/sbatch --job-name test_PR_23174 --ntasks=8 ~/boegelbot/eb_from_pr_upload_jsc-zen3.sh' executed!

  • exit code: 0
  • output:
Submitted batch job 7832

Test results coming soon (I hope)...

Details

- notification for comment with ID 3248781117 processed

Message to humans: this is just bookkeeping information for me,
it is of no use to you (unless you think I have a bug, which I don't).

@Crivella
Copy link
Contributor Author

Crivella commented Sep 3, 2025

Test report by @Crivella
SUCCESS
Build succeeded for 1 out of 1 (1 easyconfigs in total)
crivella-desktop - Linux Ubuntu 22.04.5 LTS (Jammy Jellyfish), x86_64, 13th Gen Intel(R) Core(TM) i9-13900K (skylake), Python 3.11.13
See https://gist.github.com/Crivella/f75cfd3619bb3bba9d3c91b9e6e9af70 for a full test report.

@boegelbot
Copy link
Collaborator

Test report by @boegelbot
SUCCESS
Build succeeded for 1 out of 1 (1 easyconfigs in total)
jsczen3c1.int.jsc-zen3.fz-juelich.de - Linux Rocky Linux 9.6, x86_64, AMD EPYC-Milan Processor (zen3), Python 3.9.21
See https://gist.github.com/boegelbot/7b58d1853a38bd547eaca0e9e8fc059a for a full test report.

@Crivella
Copy link
Contributor Author

Keeping this open for now as here we are also running the SPIRV-tools specific test suite and we are building the spirv-fuzz fuzzer which i do not think is possible to do when building SPIRV through glslang.

NOTES: the additional extras packages here (w.r.t. #23171) are for

  • testing of spriv: effcee -> re2 -> abseil
  • fuzzer: protobuf

@Crivella
Copy link
Contributor Author

Closing this in favor of

The PR text/discussion will still be available for future reference in case we decide to also have a version of SPIRV-tools with the fuzzer included

@Crivella Crivella closed this Dec 12, 2025
@Crivella Crivella deleted the feature-spirvtools branch December 12, 2025 16:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

2025a issues & PRs related to 2025a common toolchains new

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants