Handle geometry shader register types

This commit is contained in:
baldurk
2018-06-04 18:47:07 +01:00
parent 06b7e39c26
commit f7b5cca1ab
@@ -210,6 +210,8 @@ SPDBChunk::SPDBChunk(DXBCFile *dxbc, void *chunk)
typeInfo[T_UCHAR] = {"unsigned char", VarType::UInt, 1, 1, 0, {}};
typeInfo[T_REAL16] = {"half", VarType::Float, 2, 1, 0, {}};
typeInfo[T_REAL32] = {"float", VarType::Float, 4, 1, 0, {}};
// modern HLSL fake half
typeInfo[T_REAL32PP] = {"half", VarType::Float, 4, 1, 0, {}};
typeInfo[T_REAL64] = {"double", VarType::Double, 8, 1, 0, {}};
if(streams.size() >= 3)
@@ -1129,6 +1131,10 @@ SPDBChunk::SPDBChunk(DXBCFile *dxbc, void *chunk)
default: break;
}
// this is a virtual register, not stored
if((OperandType)defrange->regType == TYPE_STREAM)
continue;
const char *space = "";
switch((CV_HLSLMemorySpace_e)defrange->memorySpace)
{
@@ -1143,6 +1149,12 @@ SPDBChunk::SPDBChunk(DXBCFile *dxbc, void *chunk)
defrange->offsetParent, defrange->offsetParent + defrange->sizeInParent, regtype,
space, defrange->regIndices, defrange->spilledUdtMember ? "spilled" : "");
if(defrange->regIndices > 1)
{
RDCWARN("More than one register index in mapping");
// this is used for geometry shader inputs for example
}
uint32_t regoffset = *CV_DEFRANGESYMHLSL_OFFSET_CONST_PTR(defrange);
char regcomps[] = "xyzw";