[spirv] Add support for casting from floatM to floatMx1 (#3905)

Fixes #3893
This commit is contained in:
Natalie Chouinard 2021-08-16 13:30:30 -04:00 коммит произвёл GitHub
Родитель 5d63d48f44
Коммит 5dc5e42c8d
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
3 изменённых файлов: 26 добавлений и 2 удалений

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

@ -2567,9 +2567,9 @@ SpirvInstruction *SpirvEmitter::doCastExpr(const CastExpr *expr) {
return doExpr(subExpr);
}
case CastKind::CK_HLSLVectorToMatrixCast: {
// If target type is already an 1xN matrix type, we just return the
// If target type is already an 1xN or Mx1 matrix type, we just return the
// underlying vector.
if (is1xNMatrix(toType))
if (is1xNMatrix(toType) || isMx1Matrix(toType))
return doExpr(subExpr);
// A vector can have no more than 4 elements. The only remaining case

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

@ -0,0 +1,21 @@
// Run: %dxc -T ps_6_0 -E main
float4 main(float4 input : A) : SV_Target {
// CHECK: [[vec:%\d+]] = OpConstantComposite %v4float %float_1 %float_2 %float_3 %float_4
// CHECK: OpStore %var1 [[vec]]
float4 var1 = float4(1,2,3,4);
// CHECK-NEXT: [[vec1:%\d+]] = OpLoad %v4float %var1
// CHECK-NEXT: OpStore %var2 [[vec1]]
float4x1 var2 = var1;
// CHECK-NEXT: [[vec2:%\d+]] = OpLoad %v4float %input
// CHECK-NEXT: OpStore %var3 [[vec2]]
float1x4 var3 = input;
// CHECK-NEXT: [[vec3:%\d+]] = OpLoad %v4float %input
// CHECK-NEXT: OpStore %var4 [[vec3]]
float4x1 var4 = input;
return input;
}

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

@ -478,6 +478,9 @@ TEST_F(FileTest, CastFlatConversionDecomposeVector) {
TEST_F(FileTest, CastExplicitVecToMat) {
runFileTest("cast.vec-to-mat.explicit.hlsl");
}
TEST_F(FileTest, CastImplicitVecToMat) {
runFileTest("cast.vec-to-mat.implicit.hlsl");
}
TEST_F(FileTest, CastMatrixToVector) { runFileTest("cast.mat-to-vec.hlsl"); }
TEST_F(FileTest, CastBitwidth) { runFileTest("cast.bitwidth.hlsl"); }