Skip to content

Features

Sean Moss edited this page Jun 4, 2019 · 6 revisions

This page is a list of features that are already implemented in SSL, and a very loose and unofficial list of features that we hope to plan in the future.

Current

  • Types for 32-bit signed an unsigned integers, and 32-bit floats
  • Vectors for all of the above types, as well as 32-bit floating point matrices
  • Combined image-sampler types (tex*)
  • Storage images (image*)
  • Subpass inputs (an important feature new in Vulkan)
  • if/elif/else conditional statements
  • for/while/do looping statements
  • All stages are implemented in the same file with specific syntax for each
  • Unified syntax for declaring the inputs, outputs, and internals of a shader program
  • Simplified syntax for declaring single uniforms and block uniforms
  • Functions, with return types, and in/out/inout parameters
  • Built-in variables for communicating with the vertex and fragment graphics pipeline
  • A large subset of the common GLSL built-in functions
  • Specialization constants

Future

The features in this list are ordered very roughly by their importance and how soon we want to implement them, with the most important at the top. These are the features that have been accepted by the SSL developers are being in line with the goal of simplicity and worth implementing. Please do not edit this page to add your own ideas or wants.

  • Better compiler error messages (the parsing errors from Antlr can be very cryptic)
  • Even more built-in functions (pick and choose as we go)
  • Other sizes of integer types (8-, 16-, and 64-, but not sure which ones yet)
  • 64-bit floating point type (double)
  • Corresponding vector types for the planned types above (and matrices for doubles?)
  • Compound types (structs)
  • Storage buffers (accessing compound structured data as a typed buffer/array)
  • Multi-sampled texture/image types
  • Geometry shaders (and associated built-ins)
  • Tessellation shaders (and associated built-ins)
  • Switch statements
Clone this wiki locally