Fix crash caused by precise on gs output. (#2650)

This commit is contained in:
Xiang Li 2020-01-16 10:49:26 -08:00 коммит произвёл GitHub
Родитель 80ec7c6bc7
Коммит 0532d8cd08
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 29 добавлений и 1 удалений

Просмотреть файл

@ -952,7 +952,7 @@ void GenerateInputOutputUserCall(InputOutputAccessInfo &info, Value *undefVertex
} else if (CallInst *CI = dyn_cast<CallInst>(info.user)) {
HLOpcodeGroup group = GetHLOpcodeGroupByName(CI->getCalledFunction());
// Intrinsic will be translated later.
if (group == HLOpcodeGroup::HLIntrinsic)
if (group == HLOpcodeGroup::HLIntrinsic || group == HLOpcodeGroup::NotHL)
return;
unsigned opcode = GetHLOpcode(CI);
DXASSERT_NOMSG(group == HLOpcodeGroup::HLMatLoadStore);
@ -1549,6 +1549,9 @@ void HLSignatureLower::GenerateStreamOutputOperation(Value *streamVal, unsigned
// Should only used by append, restartStrip .
CallInst *CI = cast<CallInst>(user);
HLOpcodeGroup group = GetHLOpcodeGroupByName(CI->getCalledFunction());
// Ignore user functions.
if (group == HLOpcodeGroup::NotHL)
continue;
unsigned opcode = GetHLOpcode(CI);
DXASSERT_LOCALVAR(group, group == HLOpcodeGroup::HLIntrinsic, "Must be HLIntrinsic here");
IntrinsicOp IOP = static_cast<IntrinsicOp>(opcode);

Просмотреть файл

@ -0,0 +1,25 @@
// RUN: %dxc -E main -T gs_6_0 %s | FileCheck %s
// Make sure load input has precise.
// CHECK:loadInput.f32(i32 4, i32 0, i32 0, i8 0, i32 {{.*}}), !dx.precise
// Make sure fadd not have fast.
// CHECK:fadd float %3, 1.000000e+00
struct MyStruct
{
precise float4 pos : SV_Position;
};
[maxvertexcount(12)]
void main(point float4 array[1] : COORD, inout PointStream<MyStruct> OutputStream0)
{
float4 r = array[0];
MyStruct a = (MyStruct)0;
a.pos = array[r.x] + 1;
OutputStream0.Append(a);
OutputStream0.RestartStrip();
}