procedural-3d-engine/data/hlsl/README.md
Ben Clayton cce75f1859 Add shaders re-implemented in HLSL
These were written against the shaders at revision eddd724e7.
There have been changes made since then, which will need to be mirrored.

See `data/hlsl/README.md` for the current status of each sample.
2020-05-21 12:58:13 +01:00

8.7 KiB

HLSL Shaders

This directory contains a fork of the shaders found in data/shaders, re-written in HLSL. These can be compiled with DXC 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.