mirror of
https://github.com/compiler-explorer/compiler-explorer.git
synced 2025-12-28 07:57:43 -05:00
for https://github.com/compiler-explorer/compiler-explorer/issues/2331 Hey, so I am currently trying to improve the SPIR-V ecosystem, in-charge of the [SPIR-V Guide](https://github.com/KhronosGroup/SPIRV-Guide), and part of the SPIR-V Working Group. We talked at our last Face-2-Face gathering about getting more support for GPU tooling in something like Compiler Explorer because you have all made this such an amazing tool! I have enjoyed working in this codebase and happy to help keep improving the SPIR-V as people find issues or want enhancements (I was already about to spend time rebuilding Compiler Explorer, so happy to donate my time to a single tool's effort) (For those who haven't spent last few years staring at SPIR-V) - SPIR-V is a an IR (very much like LLVM IR) but for GPUs - SPIR-V can be used for Graphics and Compute - Compute: - Can be tied to things like clang, llvm, mlir, OpenCL, etc - One could take `spirv` as a language and compile it to something like x86 - (Future PRs for this realm of things) - Graphics: - Much harder to actually "compile" to any ISA because other graphics pipeline information is missing that will effect the final ISA - Microsoft has even now planned to move to [SPIR-V for DirectX soon](https://devblogs.microsoft.com/directx/directx-adopting-spir-v/) - Both: - There are many tools that run on SPIR-V regardless (hence why they share the same IR) - Being able to do tooling in compiler explorer would be AMAZING This PR adds `SPIR-V` as a language and a new `SPIRV-Tools` compiler as an initial compiler for it the language (since we already have the SPIRV-Tools repo being pulled in on the infra side!) I personally use `spirv-opt` and `spirv-val` the most and have been testing this locally for a few days and feel it is ready to go. I plan to slowly add more tools (ex. `spirv-fuzz`, `spirv-cross`, `spirv-reflect`, etc) Cheers! (some screenshots of course)  
37 lines
1.4 KiB
Plaintext
37 lines
1.4 KiB
Plaintext
; SPIR-V
|
|
; Version: 1.0
|
|
; Generator: Khronos Glslang Reference Front End; 7
|
|
; Bound: 19
|
|
; Schema: 0
|
|
OpCapability Shader
|
|
%1 = OpExtInstImport "GLSL.std.450"
|
|
OpMemoryModel Logical GLSL450
|
|
OpEntryPoint Fragment %main "main" %outFragColor %inColor
|
|
OpExecutionMode %main OriginUpperLeft
|
|
OpSource GLSL 450
|
|
OpName %main "main"
|
|
OpName %outFragColor "outFragColor"
|
|
OpName %inColor "inColor"
|
|
OpDecorate %outFragColor Location 0
|
|
OpDecorate %inColor Location 0
|
|
%void = OpTypeVoid
|
|
%3 = OpTypeFunction %void
|
|
%float = OpTypeFloat 32
|
|
%v4float = OpTypeVector %float 4
|
|
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
|
%outFragColor = OpVariable %_ptr_Output_v4float Output
|
|
%v3float = OpTypeVector %float 3
|
|
%_ptr_Input_v3float = OpTypePointer Input %v3float
|
|
%inColor = OpVariable %_ptr_Input_v3float Input
|
|
%float_1 = OpConstant %float 1
|
|
%main = OpFunction %void None %3
|
|
%5 = OpLabel
|
|
%13 = OpLoad %v3float %inColor
|
|
%15 = OpCompositeExtract %float %13 0
|
|
%16 = OpCompositeExtract %float %13 1
|
|
%17 = OpCompositeExtract %float %13 2
|
|
%18 = OpCompositeConstruct %v4float %15 %16 %17 %float_1
|
|
OpStore %outFragColor %18
|
|
OpReturn
|
|
OpFunctionEnd
|