Skip to content

Commit 670b8cc

Browse files
committed
finished double/int overloads and overload tests
1 parent 2163535 commit 670b8cc

File tree

5 files changed

+112
-50
lines changed

5 files changed

+112
-50
lines changed

clang/lib/Headers/hlsl/hlsl_compat_overloads.h

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
#ifndef _HLSL_COMPAT_OVERLOADS_H_
1010
#define _HLSl_COMPAT_OVERLOADS_H_
1111

12-
#include "hlsl/hlsl_intrinsic_helpers.h"
13-
1412
namespace hlsl {
1513

1614
// Note: Functions in this file are sorted alphabetically, then grouped by base
@@ -286,21 +284,16 @@ _DXC_COMPAT_TERNARY_INTEGER_OVERLOADS(lerp)
286284
// lit builtins overloads
287285
//===----------------------------------------------------------------------===//
288286

289-
// Note: calling lit_impl because calling lit directly causes infinite recursion
290-
constexpr float4 lit(double V1, double V2, double V3) {
291-
return lit((float)V1, (float)V2, (float)V3);
292-
}
293-
constexpr float4 lit(int V1, int V2, int V3) {
294-
return lit((float)V1, (float)V2, (float)V3);
295-
}
296-
constexpr float4 lit(uint V1, uint V2, uint V3) {
297-
return lit((float)V1, (float)V2, (float)V3);
298-
}
299-
constexpr float4 lit(int64_t V1, int64_t V2, int64_t V3) {
300-
return lit((float)V1, (float)V2, (float)V3);
301-
}
302-
constexpr float4 lit(uint64_t V1, uint64_t V2, uint64_t V3) {
303-
return lit((float)V1, (float)V2, (float)V3);
287+
template <typename T>
288+
constexpr __detail::enable_if_t<__detail::is_arithmetic<T>::Value &&
289+
(__detail::is_same<double, T>::value ||
290+
__detail::is_same<int, T>::value ||
291+
__detail::is_same<uint, T>::value ||
292+
__detail::is_same<int64_t, T>::value ||
293+
__detail::is_same<uint64_t, T>::value),
294+
vector<T, 4>>
295+
lit(T NDotL, T NDotH, T M) {
296+
return lit((float)NDotL, (float)NDotH, (float)M);
304297
}
305298

306299
//===----------------------------------------------------------------------===//
Lines changed: 86 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,93 @@
11
// RUN: %clang_cc1 -std=hlsl202x -finclude-default-header -x hlsl -triple dxil-pc-shadermodel6.3-library %s \
2-
// RUN: -emit-llvm -disable-llvm-passes -o - | \
2+
// RUN: -emit-llvm -o - | \
33
// RUN: FileCheck %s --check-prefixes=CHECK
44

5-
// CHECK-LABEL: define linkonce_odr noundef nofpclass(nan inf) <4 x float> @_ZN4hlsl3litEddd(
6-
// CHECK: call reassoc nnan ninf nsz arcp afn noundef nofpclass(nan inf) <4 x float> @_ZN4hlsl3litIfEEKNS_8__detail9enable_ifIXaasr8__detail13is_arithmeticIT_EE5Valuesr8__detail7is_sameIfS3_EE5valueEDv4_S3_E4TypeES3_S3_S3_(
7-
float4 test_lit_double(double NDotL, double NDotH, double M) { return lit(NDotL, NDotH, M); }
5+
// CHECK-LABEL: test_lit_double
6+
// CHECK: %conv.i = fptrunc reassoc nnan ninf nsz arcp afn double %{{.*}} to float
7+
// CHECK: %conv1.i = fptrunc reassoc nnan ninf nsz arcp afn double %{{.*}} to float
8+
// CHECK: %conv2.i = fptrunc reassoc nnan ninf nsz arcp afn double %{{.*}} to float
9+
// CHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn olt float %{{.*}}, 0.000000e+00
10+
// CHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn i1 %{{.*}}, float 0.000000e+00, float %{{.*}}
11+
// CHECK: %vecinit.i = insertelement <4 x float> <float 1.000000e+00, float poison, float poison, float poison>, float %{{.*}}, i32 1
12+
// CHECK: %cmp4.i = fcmp reassoc nnan ninf nsz arcp afn olt float %{{.*}}, 0.000000e+00
13+
// CHECK: %hlsl.or.i = or i1 %{{.*}}, %cmp4.i
14+
// CHECK: %elt.log.i = call reassoc nnan ninf nsz arcp afn float @llvm.log.f32(float %{{.*}})
15+
// CHECK: %mul.i = fmul reassoc nnan ninf nsz arcp afn float %elt.log.i, %{{.*}}
16+
// CHECK: %elt.exp.i = call reassoc nnan ninf nsz arcp afn float @llvm.exp.f32(float %mul.i)
17+
// CHECK: %hlsl.select7.i = select reassoc nnan ninf nsz arcp afn i1 %{{.*}}, float 0.000000e+00, float %{{.*}}
18+
// CHECK: %vecins.i = insertelement <4 x float> %{{.*}}, float %hlsl.select7.i, i32 2
19+
// CHECK: %conv3.i = fpext reassoc nnan ninf nsz arcp afn <4 x float> %{{.*}} to <4 x double>
20+
// CHECK: ret <4 x double> %conv3.i
21+
double4 test_lit_double(double NDotL, double NDotH, double M) { return lit(NDotL, NDotH, M); }
822

9-
// CHECK-LABEL: define linkonce_odr noundef nofpclass(nan inf) <4 x float> @_ZN4hlsl3litEiii(
10-
// CHECK: call reassoc nnan ninf nsz arcp afn noundef nofpclass(nan inf) <4 x float> @_ZN4hlsl3litIfEEKNS_8__detail9enable_ifIXaasr8__detail13is_arithmeticIT_EE5Valuesr8__detail7is_sameIfS3_EE5valueEDv4_S3_E4TypeES3_S3_S3_(
11-
float4 test_lit_int(int NDotL, int NDotH, int M) { return lit(NDotL, NDotH, M); }
23+
// CHECK-LABEL: test_lit_int
24+
// CHECK: %conv.i = sitofp i32 %{{.*}} to float
25+
// CHECK: %conv1.i = sitofp i32 %{{.*}} to float
26+
// CHECK: %conv2.i = sitofp i32 %{{.*}} to float
27+
// CHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn olt float %{{.*}}, 0.000000e+00
28+
// CHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn i1 %{{.*}}, float 0.000000e+00, float %{{.*}}
29+
// CHECK: %vecinit.i = insertelement <4 x float> <float 1.000000e+00, float poison, float poison, float poison>, float %{{.*}}, i32 1
30+
// CHECK: %cmp4.i = fcmp reassoc nnan ninf nsz arcp afn olt float %{{.*}}, 0.000000e+00
31+
// CHECK: %hlsl.or.i = or i1 %{{.*}}, %cmp4.i
32+
// CHECK: %elt.log.i = call reassoc nnan ninf nsz arcp afn float @llvm.log.f32(float %{{.*}})
33+
// CHECK: %mul.i = fmul reassoc nnan ninf nsz arcp afn float %elt.log.i, %{{.*}}
34+
// CHECK: %elt.exp.i = call reassoc nnan ninf nsz arcp afn float @llvm.exp.f32(float %mul.i)
35+
// CHECK: %hlsl.select7.i = select reassoc nnan ninf nsz arcp afn i1 %{{.*}}, float 0.000000e+00, float %{{.*}}
36+
// CHECK: %vecins.i = insertelement <4 x float> %{{.*}}, float %hlsl.select7.i, i32 2
37+
// CHECK: %conv3.i = fptosi <4 x float> %{{.*}} to <4 x i32>
38+
// CHECK: ret <4 x i32> %conv3.i
39+
int4 test_lit_int(int NDotL, int NDotH, int M) { return lit(NDotL, NDotH, M); }
1240

13-
// CHECK-LABEL: define linkonce_odr noundef nofpclass(nan inf) <4 x float> @_ZN4hlsl3litEjjj(
14-
// CHECK: call reassoc nnan ninf nsz arcp afn noundef nofpclass(nan inf) <4 x float> @_ZN4hlsl3litIfEEKNS_8__detail9enable_ifIXaasr8__detail13is_arithmeticIT_EE5Valuesr8__detail7is_sameIfS3_EE5valueEDv4_S3_E4TypeES3_S3_S3_(
15-
float4 test_lit_uint(uint NDotL, uint NDotH, uint M) { return lit(NDotL, NDotH, M); }
41+
// CHECK-LABEL: test_lit_uint
42+
// CHECK: %conv.i = uitofp i32 %{{.*}} to float
43+
// CHECK: %conv1.i = uitofp i32 %{{.*}} to float
44+
// CHECK: %conv2.i = uitofp i32 %{{.*}} to float
45+
// CHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn olt float %{{.*}}, 0.000000e+00
46+
// CHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn i1 %{{.*}}, float 0.000000e+00, float %{{.*}}
47+
// CHECK: %vecinit.i = insertelement <4 x float> <float 1.000000e+00, float poison, float poison, float poison>, float %{{.*}}, i32 1
48+
// CHECK: %cmp4.i = fcmp reassoc nnan ninf nsz arcp afn olt float %{{.*}}, 0.000000e+00
49+
// CHECK: %hlsl.or.i = or i1 %{{.*}}, %cmp4.i
50+
// CHECK: %elt.log.i = call reassoc nnan ninf nsz arcp afn float @llvm.log.f32(float %{{.*}})
51+
// CHECK: %mul.i = fmul reassoc nnan ninf nsz arcp afn float %elt.log.i, %{{.*}}
52+
// CHECK: %elt.exp.i = call reassoc nnan ninf nsz arcp afn float @llvm.exp.f32(float %mul.i)
53+
// CHECK: %hlsl.select7.i = select reassoc nnan ninf nsz arcp afn i1 %{{.*}}, float 0.000000e+00, float %{{.*}}
54+
// CHECK: %vecins.i = insertelement <4 x float> %{{.*}}, float %hlsl.select7.i, i32 2
55+
// CHECK: %conv3.i = fptoui <4 x float> %{{.*}} to <4 x i32>
56+
// CHECK: ret <4 x i32> %conv3.i
57+
uint4 test_lit_uint(uint NDotL, uint NDotH, uint M) { return lit(NDotL, NDotH, M); }
1658

17-
// CHECK-LABEL: define linkonce_odr noundef nofpclass(nan inf) <4 x float> @_ZN4hlsl3litElll(
18-
// CHECK: call reassoc nnan ninf nsz arcp afn noundef nofpclass(nan inf) <4 x float> @_ZN4hlsl3litIfEEKNS_8__detail9enable_ifIXaasr8__detail13is_arithmeticIT_EE5Valuesr8__detail7is_sameIfS3_EE5valueEDv4_S3_E4TypeES3_S3_S3_(
19-
float4 test_lit_int64_t(int64_t NDotL, int64_t NDotH, int64_t M) { return lit(NDotL, NDotH, M); }
59+
// CHECK-LABEL: test_lit_int64_t
60+
// CHECK: %conv.i = sitofp i64 %{{.*}} to float
61+
// CHECK: %conv1.i = sitofp i64 %{{.*}} to float
62+
// CHECK: %conv2.i = sitofp i64 %{{.*}} to float
63+
// CHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn olt float %{{.*}}, 0.000000e+00
64+
// CHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn i1 %{{.*}}, float 0.000000e+00, float %{{.*}}
65+
// CHECK: %vecinit.i = insertelement <4 x float> <float 1.000000e+00, float poison, float poison, float poison>, float %{{.*}}, i32 1
66+
// CHECK: %cmp4.i = fcmp reassoc nnan ninf nsz arcp afn olt float %{{.*}}, 0.000000e+00
67+
// CHECK: %hlsl.or.i = or i1 %{{.*}}, %cmp4.i
68+
// CHECK: %elt.log.i = call reassoc nnan ninf nsz arcp afn float @llvm.log.f32(float %{{.*}})
69+
// CHECK: %mul.i = fmul reassoc nnan ninf nsz arcp afn float %elt.log.i, %{{.*}}
70+
// CHECK: %elt.exp.i = call reassoc nnan ninf nsz arcp afn float @llvm.exp.f32(float %mul.i)
71+
// CHECK: %hlsl.select7.i = select reassoc nnan ninf nsz arcp afn i1 %{{.*}}, float 0.000000e+00, float %{{.*}}
72+
// CHECK: %vecins.i = insertelement <4 x float> %{{.*}}, float %hlsl.select7.i, i32 2
73+
// CHECK: %conv3.i = fptosi <4 x float> %{{.*}} to <4 x i64>
74+
// CHECK: ret <4 x i64> %conv3.i
75+
int64_t4 test_lit_int64_t(int64_t NDotL, int64_t NDotH, int64_t M) { return lit(NDotL, NDotH, M); }
2076

21-
// CHECK-LABEL: define linkonce_odr noundef nofpclass(nan inf) <4 x float> @_ZN4hlsl3litEmmm(
22-
// CHECK: call reassoc nnan ninf nsz arcp afn noundef nofpclass(nan inf) <4 x float> @_ZN4hlsl3litIfEEKNS_8__detail9enable_ifIXaasr8__detail13is_arithmeticIT_EE5Valuesr8__detail7is_sameIfS3_EE5valueEDv4_S3_E4TypeES3_S3_S3_(
23-
float4 test_lit_uint64_t(uint64_t NDotL, uint64_t NDotH, uint64_t M) { return lit(NDotL, NDotH, M); }
77+
// CHECK-LABEL: test_lit_uint64_t
78+
// CHECK: %conv.i = uitofp i64 %{{.*}} to float
79+
// CHECK: %conv1.i = uitofp i64 %{{.*}} to float
80+
// CHECK: %conv2.i = uitofp i64 %{{.*}} to float
81+
// CHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn olt float %{{.*}}, 0.000000e+00
82+
// CHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn i1 %{{.*}}, float 0.000000e+00, float %{{.*}}
83+
// CHECK: %vecinit.i = insertelement <4 x float> <float 1.000000e+00, float poison, float poison, float poison>, float %{{.*}}, i32 1
84+
// CHECK: %cmp4.i = fcmp reassoc nnan ninf nsz arcp afn olt float %{{.*}}, 0.000000e+00
85+
// CHECK: %hlsl.or.i = or i1 %{{.*}}, %cmp4.i
86+
// CHECK: %elt.log.i = call reassoc nnan ninf nsz arcp afn float @llvm.log.f32(float %{{.*}})
87+
// CHECK: %mul.i = fmul reassoc nnan ninf nsz arcp afn float %elt.log.i, %{{.*}}
88+
// CHECK: %elt.exp.i = call reassoc nnan ninf nsz arcp afn float @llvm.exp.f32(float %mul.i)
89+
// CHECK: %hlsl.select7.i = select reassoc nnan ninf nsz arcp afn i1 %{{.*}}, float 0.000000e+00, float %{{.*}}
90+
// CHECK: %vecins.i = insertelement <4 x float> %{{.*}}, float %hlsl.select7.i, i32 2
91+
// CHECK: %conv3.i = fptoui <4 x float> %{{.*}} to <4 x i64>
92+
// CHECK: ret <4 x i64> %conv3.i
93+
uint64_t4 test_lit_uint64_t(uint64_t NDotL, uint64_t NDotH, uint64_t M) { return lit(NDotL, NDotH, M); }

clang/test/CodeGenHLSL/builtins/lit.hlsl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
22
// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple dxil-pc-shadermodel6.3-library %s -fnative-half-type -emit-llvm -O1 -o - | FileCheck %s
33

4-
// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x half> @_Z13test_lit_halfDhDhDh(
4+
// CHECK-LABEL: test_lit_half
55
// CHECK-SAME: half noundef nofpclass(nan inf) [[NDOTL:%.*]], half noundef nofpclass(nan inf) [[NDOTH:%.*]], half noundef nofpclass(nan inf) [[M:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
66
// CHECK-NEXT: [[ENTRY:.*:]]
77
// CHECK-NEXT: [[CMP_I:%.*]] = fcmp reassoc nnan ninf nsz arcp afn olt half [[NDOTL]], 0xH0000
@@ -18,7 +18,7 @@
1818
//
1919
half4 test_lit_half(half NDotL, half NDotH, half M) { return lit(NDotL, NDotH, M); }
2020

21-
// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z14test_lit_floatfff(
21+
// CHECK-LABEL: test_lit_float
2222
// CHECK-SAME: float noundef nofpclass(nan inf) [[NDOTL:%.*]], float noundef nofpclass(nan inf) [[NDOTH:%.*]], float noundef nofpclass(nan inf) [[M:%.*]]) local_unnamed_addr #[[ATTR0]] {
2323
// CHECK-NEXT: [[ENTRY:.*:]]
2424
// CHECK-NEXT: [[CMP_I:%.*]] = fcmp reassoc nnan ninf nsz arcp afn olt float [[NDOTL]], 0.000000e+00
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// RUN: not %clang_dxc -enable-16bit-types -T cs_6_0 -HV 202x %s 2>&1 | FileCheck %s -DTEST_TYPE=half
2+
// RUN: not %clang_dxc -enable-16bit-types -T cs_6_0 -HV 202x %s 2>&1 | FileCheck %s -DTEST_TYPE=int16_t
3+
// RUN: not %clang_dxc -enable-16bit-types -T cs_6_0 -HV 202x %s 2>&1 | FileCheck %s -DTEST_TYPE=uint16_t
4+
5+
// check we error on 16 bit type if shader model is too old
6+
// CHECK: '-enable-16bit-types' option requires target HLSL Version >= 2018 and shader model >= 6.2, but HLSL Version is 'hlsl202x' and shader model is '6.0'
7+
vector<TEST_TYPE,4> test_error(TEST_TYPE p0) {
8+
return lit(p0, p0, p0);
9+
}

clang/test/SemaHLSL/BuiltIns/lit-errors.hlsl

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,49 +3,39 @@
33
float4 test_no_second_arg(float p0) {
44
return lit(p0);
55
// expected-error@-1 {{no matching function for call to 'lit'}}
6-
// expected-note@hlsl/hlsl_compat_overloads.h:* {{candidate function not viable: requires 3 arguments, but 1 was provided}}
7-
// expected-note@hlsl/hlsl_compat_overloads.h:* {{candidate function not viable: requires 3 arguments, but 1 was provided}}
8-
// expected-note@hlsl/hlsl_compat_overloads.h:* {{candidate function not viable: requires 3 arguments, but 1 was provided}}
9-
// expected-note@hlsl/hlsl_compat_overloads.h:* {{candidate function not viable: requires 3 arguments, but 1 was provided}}
10-
// expected-note@hlsl/hlsl_compat_overloads.h:* {{candidate function not viable: requires 3 arguments, but 1 was provided}}
116
// expected-note@hlsl/hlsl_intrinsics.h:* {{candidate function template not viable: requires 3 arguments, but 1 was provided}}
127
// expected-note@hlsl/hlsl_intrinsics.h:* {{candidate function template not viable: requires 3 arguments, but 1 was provided}}
8+
// expected-note@hlsl/hlsl_compat_overloads.h:* {{candidate function template not viable: requires 3 arguments, but 1 was provided}}
139
}
1410

1511
float4 test_no_third_arg(float p0) {
1612
return lit(p0, p0);
1713
// expected-error@-1 {{no matching function for call to 'lit'}}
18-
// expected-note@hlsl/hlsl_compat_overloads.h:* {{candidate function not viable: requires 3 arguments, but 2 were provided}}
19-
// expected-note@hlsl/hlsl_compat_overloads.h:* {{candidate function not viable: requires 3 arguments, but 2 were provided}}
20-
// expected-note@hlsl/hlsl_compat_overloads.h:* {{candidate function not viable: requires 3 arguments, but 2 were provided}}
21-
// expected-note@hlsl/hlsl_compat_overloads.h:* {{candidate function not viable: requires 3 arguments, but 2 were provided}}
22-
// expected-note@hlsl/hlsl_compat_overloads.h:* {{candidate function not viable: requires 3 arguments, but 2 were provided}}
2314
// expected-note@hlsl/hlsl_intrinsics.h:* {{candidate function template not viable: requires 3 arguments, but 2 were provided}}
2415
// expected-note@hlsl/hlsl_intrinsics.h:* {{candidate function template not viable: requires 3 arguments, but 2 were provided}}
16+
// expected-note@hlsl/hlsl_compat_overloads.h:* {{candidate function template not viable: requires 3 arguments, but 2 were provided}}
2517
}
2618

2719
float4 test_too_many_arg(float p0) {
2820
return lit(p0, p0, p0, p0);
2921
// expected-error@-1 {{no matching function for call to 'lit'}}
30-
// expected-note@hlsl/hlsl_compat_overloads.h:* {{candidate function not viable: requires 3 arguments, but 4 were provided}}
31-
// expected-note@hlsl/hlsl_compat_overloads.h:* {{candidate function not viable: requires 3 arguments, but 4 were provided}}
32-
// expected-note@hlsl/hlsl_compat_overloads.h:* {{candidate function not viable: requires 3 arguments, but 4 were provided}}
33-
// expected-note@hlsl/hlsl_compat_overloads.h:* {{candidate function not viable: requires 3 arguments, but 4 were provided}}
34-
// expected-note@hlsl/hlsl_compat_overloads.h:* {{candidate function not viable: requires 3 arguments, but 4 were provided}}
3522
// expected-note@hlsl/hlsl_intrinsics.h:* {{candidate function template not viable: requires 3 arguments, but 4 were provided}}
3623
// expected-note@hlsl/hlsl_intrinsics.h:* {{candidate function template not viable: requires 3 arguments, but 4 were provided}}
24+
// expected-note@hlsl/hlsl_compat_overloads.h:* {{candidate function template not viable: requires 3 arguments, but 4 were provided}}
3725
}
3826

3927
float4 test_vec_inputs(float2 p0, float2 p1, float2 p2) {
4028
return lit(p0, p1, p2);
4129
// expected-error@-1 {{no matching function for call to 'lit'}}
4230
// expected-note@hlsl/hlsl_intrinsics.h:* {{candidate template ignored: substitution failure [with T = float2]: invalid vector element type 'vector<float, 2>' (vector of 2 'float' values)}}
4331
// expected-note@hlsl/hlsl_intrinsics.h:* {{candidate template ignored: substitution failure [with T = float2]: invalid vector element type 'vector<float, 2>' (vector of 2 'float' values)}}
32+
// expected-note@hlsl/hlsl_compat_overloads.h:* {{candidate template ignored: substitution failure [with T = float2]: invalid vector element type 'vector<float, 2>' (vector of 2 'float' values)}}
4433
}
4534

4635
float4 test_vec1_inputs(float1 p0, float1 p1, float1 p2) {
4736
return lit(p0, p1, p2);
4837
// expected-error@-1 {{no matching function for call to 'lit'}}
4938
// expected-note@hlsl/hlsl_intrinsics.h:* {{candidate template ignored: substitution failure [with T = float1]: invalid vector element type 'vector<float, 1>' (vector of 1 'float' value)}}
5039
// expected-note@hlsl/hlsl_intrinsics.h:* {{candidate template ignored: substitution failure [with T = float1]: invalid vector element type 'vector<float, 1>' (vector of 1 'float' value)}}
40+
// expected-note@hlsl/hlsl_compat_overloads.h:* {{candidate template ignored: substitution failure [with T = float1]: invalid vector element type 'vector<float, 1>' (vector of 1 'float' value)}}
5141
}

0 commit comments

Comments
 (0)