www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.announce - Dcompute on OpenGL / HLSL compute

I'm happy to announce that I've managed to generate OpenGL 
compute shaders from the OpenCL compilation pipeline. Through the 
use of https://github.com/KhronosGroup/SPIRV-Cross the means that 
we can generate GLSL, HLSL and MSL source

The setup and compilation steps is very janky at the moment but 
does produce legit looking GLSL/HLSL. I say looks, because I lack 
the means to run it at the moment. This will hopefully become 
less janky in the future.

To produce a compute shader source you will need:
ldc built with 
https://github.com/KhronosGroup/SPIRV-LLVM-Translator as with the 
regular means of producing OpenCL SPIR-V,
https://github.com/google/clspv/ with 
https://github.com/google/clspv/pull/764 applied to convert the 
OpenCL SPIR-V to OpenGL compute SPIR-V and
https://github.com/KhronosGroup/SPIRV-Cross to convert the 
resulting GL compute SPIR-V to HLSL/MSL if desired.

The full compilation steps are then (I did say it was janky):
```
ldc2 --mdcompute-targets=ocl-200 -m32 ./kernel.d other_files.d 
-Iother_imports
llvm-spirv -r kernels_ocl200_32.spv
llvm-dis kernels_ocl200_32.bc
clspv -x=ir kernels_ocl200_32.ll

spirv-cross --hlsl a.spv --output a.hlsl
```

32-bit mode for ldc is required because only 32-bit OpenCL SPIR-V 
can be converted into OpenGL compute SPIR-V. If `-m32` doesn't 
work the you may have to supply an equivalent `-mtriple`
Sep 08 2021