This is the first block of patches to enable generating SPIR-V from Mesa's GLSL compiler. The initial use of this is for testing GL_ARB_spirv, but it may eventually be useful in its own right. A lot more work will be necessary for that to happen, though.
Most of the work is done, but there are still some bits, notably UBOs and images, left to do. Of the ~46k shaders in my shader-db, I can generate SPIR-V that passes the validator for nearly 10k. Many shaders fail because they use legacy features that cannot be represented in SPIR-V. I am sending this series out now to prime the review process. The whole series is on the order of 80 patches, so I think it's valuable to send things out in smaller, self-contained chunks. The whole series (with some work-in-progress patches) is at https://cgit.freedesktop.org/~idr/mesa/log/?h=emit-spirv The implementation is divided into three layers, and this patch series represents the bottom layer. 1. Raw SPIR-V emit code. This layer has zero knowledge of GLSL IR or anything specific to Mesa. It should be trivial for someone to pull this code out and use it in a separate project. There are two parts. The first handles tracking and managing SPIR-V capabilities. The second part implements a very low-level SPIR-V instruction builder sytled after ir_builder and nir_builder. There are a couple rough bits here with respect to automatic setting of SPIR-V capabilites. There are cases where a SPIR-V feature requires any one of several capabilities, so it is impossible to pick one to enable. 2. Unstructured GLSL IR to SPIR-V. This layer handles emitting single bits of GLSL IR in SPIR-V without knowledge of the global structure. This is mostly things like emitting glsl_type, ir_variable, and ir_function_signature. At 38, this is the largest group of patches. This is mostly nailed down, but the UBO work is going to cause some changes. I hope to finally wrap that up next week. 3. SPIR-V visitor. This top-most layer handles the overall structure of the shader. It uses a visitor in a similar fashion to glsl_to_mesa and glsl_to_tgsi. Use a generator styled after nir_opt_algebraic has kept the amount of code here pretty small. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev