const
-qualified Instance MethodsHLSL does not currently support const
instance methods for user-defined data
types. This proposal seeks to add support for const
instance methods.
The absence of const
instance methods causes some challenges since HLSL
injected ASTs do have const
and non-const
instance methods. Further, since
variables can be const
-qualified, without the ability to specify const
there
are some cases that cannot be worked around without breaking
const
-correctness.
DXC has received a number of issues relating to this. Two recent issues are listed below:
In the first issue, a user defined data type’s methods are basically unusable if
the data type is placed in a ConstantBuffer
. This results from the
ConstantBuffer
access returning const &
objects.
The second issue describes a similar problem, where overloaded operators on
instances of const
-qualified user-defined types are unusable.
Following C++, we should enable support for const
instance methods and
operator overloads. When a method is marked const
, the implicit this
parameter should become a const &
.
This change should not introduce any syntactic ambiguities or have any incompatibilities with existing HLSL code.