Use correct channel for gather with offset. (#648)

This commit is contained in:
Xiang Li 2017-09-25 17:43:24 -07:00 коммит произвёл GitHub
Родитель f169e6f238
Коммит 58b7f88864
2 изменённых файлов: 15 добавлений и 3 удалений

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

@ -2787,17 +2787,17 @@ void GenerateDxilGather(CallInst *CI, Function *F,
helper.UpdateOffsetInGatherArgs(gatherArgs, /*sampleIdx*/ 1);
CallInst *callY = Builder.CreateCall(F, gatherArgs);
elt = Builder.CreateExtractValue(callY, (uint64_t)0);
elt = Builder.CreateExtractValue(callY, (uint64_t)1);
retVal = Builder.CreateInsertElement(retVal, elt, 1);
helper.UpdateOffsetInGatherArgs(gatherArgs, /*sampleIdx*/ 2);
CallInst *callZ = Builder.CreateCall(F, gatherArgs);
elt = Builder.CreateExtractValue(callZ, (uint64_t)0);
elt = Builder.CreateExtractValue(callZ, (uint64_t)2);
retVal = Builder.CreateInsertElement(retVal, elt, 2);
helper.UpdateOffsetInGatherArgs(gatherArgs, /*sampleIdx*/ 3);
CallInst *callW = Builder.CreateCall(F, gatherArgs);
elt = Builder.CreateExtractValue(callW, (uint64_t)0);
elt = Builder.CreateExtractValue(callW, (uint64_t)3);
retVal = Builder.CreateInsertElement(retVal, elt, 3);
// Replace ret val.
CI->replaceAllUsesWith(retVal);

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

@ -1,17 +1,29 @@
// RUN: %dxc -E main -T ps_6_0 %s | FileCheck %s
// CHECK: dx.op.textureGather.f32(i32 73
// CHECK: extractvalue {{.*}}, 0
// CHECK: dx.op.textureGather.f32(i32 73
// CHECK: extractvalue {{.*}}, 1
// CHECK: dx.op.textureGather.f32(i32 73
// CHECK: extractvalue {{.*}}, 2
// CHECK: dx.op.textureGather.f32(i32 73
// CHECK: extractvalue {{.*}}, 3
// CHECK: dx.op.textureGather.f32(i32 73
// CHECK: extractvalue {{.*}}, 0
// CHECK: dx.op.textureGather.f32(i32 73
// CHECK: extractvalue {{.*}}, 1
// CHECK: dx.op.textureGather.f32(i32 73
// CHECK: extractvalue {{.*}}, 2
// CHECK: dx.op.textureGather.f32(i32 73
// CHECK: extractvalue {{.*}}, 3
// CHECK: dx.op.textureGather.f32(i32 73
// CHECK: extractvalue {{.*}}, 0
// CHECK: dx.op.textureGather.f32(i32 73
// CHECK: extractvalue {{.*}}, 1
// CHECK: dx.op.textureGather.f32(i32 73
// CHECK: extractvalue {{.*}}, 2
// CHECK: dx.op.textureGather.f32(i32 73
// CHECK: extractvalue {{.*}}, 3
SamplerState samp1;