Skip to content

Complete HLSL -> SPIR-V translator #362

Open
@johnkslang

Description

Requested HLSL features. If it's checked, it's been implemented and working for some workload. If a checked feature is not working correctly, there should be an issue reporting the incorrect behavior. A missing feature should be requested here.

  • geometry, domain, and hull shaders
  • member methods inside a structure, see issue HLSL: Struct/class members #535
  • full pass through of attributes on loops/if/switch, e.g., [unroll], [flatten], etc., see issue HLSL: emit OpLoopMerge Unroll for HLSL [unroll] #836
  • Maphalf to float. See issue HLSL: Halfs are not recognized as a type #492.
  • namespace (about half done)
  • conversions
    • structure cast of scalar: PS_OUTPUT __output__ = (PS_OUTPUT)(scalar)
    • inout arguments needing bidirectional conversion
    • smearing implicit-conversion
    • vector truncation conversion
    • vector of size 1 vs. scalar
  • Basic RWBuffer support
  • deference of textures
  • arbitrary (structure) texture return-type, see issue StructuredBuffer syntax not supported #569.
  • sub-vec4 return types from sampling
  • compute shaders
    • numthreads
    • SV_DispatchThreadID -> gl_GlobalInvocationID
    • groupshared -> shared
  • HLSL-specific preprocessing
    • trailing () parens are required/prohibited with an empty argument list in #defines
    • #include support
    • -D and -U for macros on command line
  • class keyword, member functions, variables, static and non static
  • class inheritance from interface see https://msdn.microsoft.com/en-us/library/windows/desktop/ff471421(v=vs.85).aspx
  • Multi-dimensional arrays, ala float myfloat[4][5];
  • minN types, ala https://msdn.microsoft.com/en-us/library/windows/desktop/bb509646(v=vs.85).aspx.
  • vertical path hookup through to SPIR-V generation
  • generic preprocessor (same as GLSL)
  • scanner (keywords, identifiers, etc.)
  • basic types: all int/uint/float/double scalar/vector/matrix
  • basic recursive-decent language grammar: declarations, expressions, statements, loops, if-else, functions
  • parsing of semantics, annotations, registers, etc. on declarations
  • parsing of attributes on loops/if/switch, e.g., [unroll], [flatten], etc.
  • basic symbol-table scoping
  • switch statements, { } initializers, typedef
  • templatized vector/matrix/etc. declaration grammar
  • base set of all intrinsics mappable to existing operators
  • HLSL-specific intrinsics, mapped to new operators
  • vec1/mat1xN/matNx1-based, etc.
  • DX10 style sampler declarations
  • immediate (literal) samplers
  • DX9 style sampler declarations
  • 2DMS and Buffer texture support
  • method-based image/texture lookup
  • cbuffer/tbuffer
  • register and packoffset for buffers
  • in/out/inout qualifiers, e.g, void MyFunc(out float x)
  • default parameters, e.g, void MyFunc(float x=3)
  • overloaded function signature selection under implicit type conversion
  • DX12 and beyond
    • syntax: ConstantBuffer
    • Wave Query,Wave Vote,Wave Broadcast,Wave Reduction,Wave Scan and Prefix,Quad-wide Shuffle operations,etc..
    • 64-bit types.
  • printf

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions