Skip to content

Commit ae83452

Browse files
authored
Use vector size from vector type when dynamic indexing cb vector. (#3530)
1 parent 03cc4f8 commit ae83452

2 files changed

Lines changed: 14 additions & 6 deletions

File tree

lib/HLSL/HLOperationLower.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6648,12 +6648,8 @@ void TranslateCBGepLegacy(GetElementPtrInst *GEP, Value *handle,
66486648
}
66496649
} else {
66506650
Type *EltTy = GEPIt->getVectorElementType();
6651-
unsigned size = DL.getTypeSizeInBits(EltTy);
6652-
unsigned vecSize = 4;
6653-
if (size == 64)
6654-
vecSize = 2;
6655-
else if (size == 16)
6656-
vecSize = 8;
6651+
unsigned vecSize = GEPIt->getVectorNumElements();
6652+
66576653
// Load the whole register.
66586654
Value *newLd = GenerateCBLoadLegacy(handle, legacyIndex,
66596655
/*channelOffset*/ 0, EltTy,
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// RUN: %dxc -E main -T ps_6_0 %s | FileCheck %s
2+
3+
// Make sure only 2 cbufferLoadLegacy.
4+
// CHECK:call %dx.types.CBufRet.f64 @dx.op.cbufferLoadLegacy.f64(i32 59, %dx.types.Handle %{{.*}}, i32 0)
5+
// CHECK:call %dx.types.CBufRet.f64 @dx.op.cbufferLoadLegacy.f64(i32 59, %dx.types.Handle %{{.*}}, i32 1)
6+
// CHECK-NOT:call %dx.types.CBufRet.f64
7+
8+
double4 g;
9+
10+
float main(int2 i:I) : SV_Target {
11+
return g[i.x]+g[i.y];
12+
}

0 commit comments

Comments
 (0)