Use vector size from vector type when dynamic indexing cb vector. (#3530)

This commit is contained in:
Xiang Li 2021-03-01 18:00:47 -08:00 коммит произвёл GitHub
Родитель 03cc4f8663
Коммит ae834522b3
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 14 добавлений и 6 удалений

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

@ -6648,12 +6648,8 @@ void TranslateCBGepLegacy(GetElementPtrInst *GEP, Value *handle,
}
} else {
Type *EltTy = GEPIt->getVectorElementType();
unsigned size = DL.getTypeSizeInBits(EltTy);
unsigned vecSize = 4;
if (size == 64)
vecSize = 2;
else if (size == 16)
vecSize = 8;
unsigned vecSize = GEPIt->getVectorNumElements();
// Load the whole register.
Value *newLd = GenerateCBLoadLegacy(handle, legacyIndex,
/*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];
}