Support advanced cbuffer layouts

* This includes 8/16/64-bit integers, 16-bit/64-bit floats, and scalar block
  packing
This commit is contained in:
baldurk
2019-02-07 15:23:06 +00:00
parent 134cdfd09b
commit fbb6b23b23
22 changed files with 1075 additions and 117 deletions
+9 -2
View File
@@ -716,9 +716,16 @@ std::string DoStringise(const VarType &el)
BEGIN_ENUM_STRINGISE(VarType)
{
STRINGISE_ENUM_CLASS_NAMED(Float, "float");
STRINGISE_ENUM_CLASS_NAMED(Int, "int");
STRINGISE_ENUM_CLASS_NAMED(UInt, "uint");
STRINGISE_ENUM_CLASS_NAMED(Double, "double");
STRINGISE_ENUM_CLASS_NAMED(Half, "half");
STRINGISE_ENUM_CLASS_NAMED(SInt, "int");
STRINGISE_ENUM_CLASS_NAMED(UInt, "uint");
STRINGISE_ENUM_CLASS_NAMED(SShort, "short");
STRINGISE_ENUM_CLASS_NAMED(UShort, "ushort");
STRINGISE_ENUM_CLASS_NAMED(SLong, "long");
STRINGISE_ENUM_CLASS_NAMED(ULong, "ulong");
STRINGISE_ENUM_CLASS_NAMED(SByte, "byte");
STRINGISE_ENUM_CLASS_NAMED(UByte, "ubyte");
STRINGISE_ENUM_CLASS_NAMED(Unknown, "unknown");
}
END_ENUM_STRINGISE();
+45 -10
View File
@@ -142,18 +142,46 @@ DOCUMENT(R"(Represents the base type of a shader variable in debugging or consta
A single-precision (32-bit) floating point value.
.. data:: Int
A signed integer value.
.. data:: UInt
An unsigned integer value.
.. data:: Double
A double-precision (64-bit) floating point value.
.. data:: Half
A half-precision (16-bit) floating point value.
.. data:: SInt
A signed 32-bit integer value.
.. data:: UInt
An unsigned 32-bit integer value.
.. data:: SShort
A signed 16-bit integer value.
.. data:: UShort
An unsigned 16-bit integer value.
.. data:: SLong
A signed 64-bit integer value.
.. data:: ULong
An unsigned 64-bit integer value.
.. data:: SByte
A signed 8-bit integer value.
.. data:: UByte
An unsigned 8-bit integer value.
.. data:: Unknown
An unknown type.
@@ -161,9 +189,16 @@ DOCUMENT(R"(Represents the base type of a shader variable in debugging or consta
enum class VarType : uint32_t
{
Float = 0,
Int,
UInt,
Double,
Half,
SInt,
UInt,
SShort,
UShort,
SLong,
ULong,
SByte,
UByte,
Unknown = ~0U,
};
+5 -2
View File
@@ -120,8 +120,11 @@ union ShaderValue
DOCUMENT("``double`` values.");
double dv[16];
DOCUMENT("64-bit integer values.");
DOCUMENT("64-bit unsigned integer values.");
uint64_t u64v[16];
DOCUMENT("64-bit signed integer values.");
int64_t s64v[16];
};
DOCUMENT(R"(Holds a single named shader variable. It contains either a primitive type (up to a 4x4
@@ -166,7 +169,7 @@ struct ShaderVariable
displayAsHex = isStruct = rowMajor = false;
for(int i = 0; i < 16; i++)
value.uv[i] = 0;
type = VarType::Int;
type = VarType::SInt;
value.i.x = x;
value.i.y = y;
value.i.z = z;