## HLSL Shaders This directory contains a fork of the shaders found in [data/shaders](https://github.com/SaschaWillems/Vulkan/tree/master/data/shaders), re-written in HLSL. These can be compiled with [DXC](https://github.com/microsoft/DirectXShaderCompiler) using the `compile.py` script. ### Status Tested on Ubuntu 18.04 + GeForce RTX 2080 Ti Shaders written to mirror the GLSL versions at `eddd724`. There have been changes made to the GLSL shaders since then, which will need to be updated. | Name | GLSL @`eddd724e7` | HLSL @`eddd724e7` | GLSL @`10a1ecaf7` | HLSL @`eddd724e7` |----------------------------|-------------------|-------------------|-------------------|------------------- | bloom | ☑ | ☑ | ☑ | ☑ | computecloth | ☑ | ☑ | ☑ | ☑ | computecullandlod | ☑ | ☑ | ☑ | ☑ | computeheadless | ☑ | ☑ | ☑ | ☑ | computenbody | ☑ | ☑ | ☑ | ☑ | computeparticles | ☑ | ❌ | ☑ | ❌ | computeraytracing | ☑ | ☑ | ☑ | ☑ | computeshader | ☑ | ☑ | ☑ | ☑ | conditionalrender | ☑ | ☑ | ☑ | ☑ | conservativeraster | ☑ | ☑ | ☑ | ☑ | debugmarker | ☑ | ☑ | ☑ | ☑ | deferred | ☑ | ☑ | ☑ | ☑ | deferredmultisampling | ☑ | ☑ | ☑ | ☑ | deferredshadows | ☑ | ☑ | ☑ | ☑ | descriptorsets | ☑ | ☑ | ☑ | ☑ | displacement | ☑ | ☑ | ☑ | ☑ | distancefieldfonts | ☑ | ☑ | ☑ | ☑ | dynamicuniformbuffer | ☑ | ☑ | ☑ | ☑ | gears | ☑ | ☑ | ☑ | ☑ | geometryshader | ☑ | ☑ | ☑ | ☑ | gltfscene | - | - | ☑ | ❌ | hdr | ☑ | ❌ | ☑ | ❌ | imgui | ☑ | ☑ | ☑ | ☑ | indirectdraw | ☑ | ☑ | ☑ | ☑ | inlineuniformblocks | ☑ | ☑ | ☑ | ☑ | inputattachments | ☑ | ☑ | ☑ | ☑ | instancing | ☑ | ☑ | ☑ | ☑ | mesh | ☑ | ☑ | ❌ | ☑ | multisampling | ☑ | ☑ | ☑ | ❌ | multithreading | ☑ | ☑ | ☑ | ☑ | multiview | ☑ | ☑ | ☑ | ☑ | negativeviewportheight | ☑ | ☑ | ☑ | ☑ | nv_ray_tracing_basic | ☑ | ☑ | ☑ | ☑ | nv_ray_tracing_reflections | ☑ | ☑ | ☑ | ☑ | nv_ray_tracing_shadows | ☑ | ☑ | ☑ | ☑ | occlusionquery | ☑ | ☑ | ☑ | ☑ | offscreen | ☑ | ☑ | ☑ | ❌ | parallaxmapping | ☑ | ☑ | ☑ | ☑ | particlefire | ☑ | ☑ | ☑ | ☑ | pbrbasic | ☑ | ☑ | ☑ | ☑ | pbribl | ☑ | ☑ | ☑ | ☑ | pbrtexture | ☑ | ☑ | ☑ | ☑ | pipelines | ☑ | ☑ | ☑ | ☑ | pipelinestatistics | ☑ | ☑ | ☑ | ☑ | pushconstants | ☑ | ☑ | ☑ | ☑ | pushdescriptors | ☑ | ☑ | ☑ | ☑ | radialblur | ☑ | ☑ | ☑ | ☑ | renderheadless | ☑ | ☑ | ☑ | ☑ | scenerendering | ☑ | ☑ | ☑ | ☑ | screenshot | ☑ | ☑ | ☑ | ☑ | shadowmapping | ☑ | ☑ | ☑ | ☑ | shadowmappingcascade | ☑ | ☑ | ☑ | ☑ | shadowmappingomni | ☑ | ☑ | ☑ | ☑ | skeletalanimation | ☑ | ☑ | ☑ | ❌ | specializationconstants | ☑ | ☑ | ☑ | ☑ | sphericalenvmapping | ☑ | ☑ | ☑ | ☑ | ssao | ☑ | ☑ | ☑ | ☑ | stencilbuffer | ☑ | ☑ | ☑ | ☑ | subpasses | ☑ | ☑ | ☑ | ☑ | terraintessellation | ☑ | ☑ | ☑ | ☑ | tessellation | ☑ | ☑ | ☑ | ☑ | textoverlay | ☑ | ☑ | ☑ | ☑ | texture | ☑ | ☑ | ☑ | ☑ | texture3d | ☑ | ☑ | ☑ | ☑ | texturearray | ☑ | ☑ | ☑ | ☑ | texturecubemap | ☑ | ❌ | ☑ | ❌ | texturemipmapgen | ☑ | ☑ | ☑ | ☑ | texturesparseresidency | ☑ | ☑ | ☑ | ☑ | triangle | ☑ | ☑ | ☑ | ☑ | viewportarray | ☑ | ☑ | ☑ | ☑ | vulkanscene | ☑ | ☑ | ☑ | ☑ ### Known issues - specialization constants can't be used to specify array size. - `gl_PointCoord` not supported. HLSL has no equivalent. We changed the shaders to calulate the PointCoord manually in the shader. (`computenbody`, `computeparticles`, `particlefire` examples). - HLSL doesn't have inverse operation (`deferred`, `hdr`, `instancing`, `skeletalanimation` & `texturecubemap` examples). - `modf` causes compilation to fail without errors or warnings. (`modf` not used by any examples, easily confused with fmod) - In `specializationconstants` example, shader compilation fails with error: ``` --- Error msg: fatal error: failed to optimize SPIR-V: Id 10 is defined more than once ``` When multiple constant ids are defined and have different types. We work around this problem by making all constant ids the same type, then use `asfloat`, `asint` or `asuint` to get the original value in the shader. - `gl_RayTmaxNV` not supported. (`nv_ray_tracing_*` examples) - HLSL interface for sparse residency textures is different from GLSL interface. After translating from HLSL to GLSL the shaders behave slightly different. Most important parts do behave identically though.