Use vector size from vector type when dynamic indexing cb vector. (#3530)
This commit is contained in:
Родитель
03cc4f8663
Коммит
ae834522b3
|
@ -6648,12 +6648,8 @@ void TranslateCBGepLegacy(GetElementPtrInst *GEP, Value *handle,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Type *EltTy = GEPIt->getVectorElementType();
|
Type *EltTy = GEPIt->getVectorElementType();
|
||||||
unsigned size = DL.getTypeSizeInBits(EltTy);
|
unsigned vecSize = GEPIt->getVectorNumElements();
|
||||||
unsigned vecSize = 4;
|
|
||||||
if (size == 64)
|
|
||||||
vecSize = 2;
|
|
||||||
else if (size == 16)
|
|
||||||
vecSize = 8;
|
|
||||||
// Load the whole register.
|
// Load the whole register.
|
||||||
Value *newLd = GenerateCBLoadLegacy(handle, legacyIndex,
|
Value *newLd = GenerateCBLoadLegacy(handle, legacyIndex,
|
||||||
/*channelOffset*/ 0, EltTy,
|
/*channelOffset*/ 0, EltTy,
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
// RUN: %dxc -E main -T ps_6_0 %s | FileCheck %s
|
||||||
|
|
||||||
|
// Make sure only 2 cbufferLoadLegacy.
|
||||||
|
// CHECK:call %dx.types.CBufRet.f64 @dx.op.cbufferLoadLegacy.f64(i32 59, %dx.types.Handle %{{.*}}, i32 0)
|
||||||
|
// CHECK:call %dx.types.CBufRet.f64 @dx.op.cbufferLoadLegacy.f64(i32 59, %dx.types.Handle %{{.*}}, i32 1)
|
||||||
|
// CHECK-NOT:call %dx.types.CBufRet.f64
|
||||||
|
|
||||||
|
double4 g;
|
||||||
|
|
||||||
|
float main(int2 i:I) : SV_Target {
|
||||||
|
return g[i.x]+g[i.y];
|
||||||
|
}
|
Загрузка…
Ссылка в новой задаче