Fix crash caused by precise on gs output. (#2650)
This commit is contained in:
Родитель
80ec7c6bc7
Коммит
0532d8cd08
|
@ -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();
|
||||
|
||||
}
|
Загрузка…
Ссылка в новой задаче