HLSL Resource Types¶
Introduction¶
HLSL Resources are runtime-bound data that is provided as input, output or both to shader programs written in HLSL. Resource Types in HLSL provide key user abstractions for reading and writing resource data.
Implementation Details¶
In Clang resource types are forward declared by the HLSLExternalSemaSource
on initialization. They are then lazily completed when requiresCompleteType
is called later in Sema.
Resource types are templated class declarations. The template parameter specifies the expected return type of resource loads, and the expected parameter type for stores.
In Clang’s AST and code generation, resource types are classes that store a
pointer of the template parameter type. The pointer is populated from a call to
__builtin_hlsl_create_handle
, and treated as a pointer to an array of typed
data through until lowering in the backend.
Resource types are annotated with the HLSLResource
attribute, which drives
code generation for resource binding metadata. The hlsl
metadata nodes are
transformed in the backend to the binding information expected by the target
runtime.