@@ -25,33 +25,59 @@ struct MemoryAdaptor
25
25
}
26
26
27
27
template<typename Scalar>
28
- void get (const uint ix, NBL_REF_ARG (Scalar) value) { accessor.get (ix, value);}
28
+ enable_if_t<sizeof (Scalar) == sizeof (uint32_t), void > get (const uint ix, NBL_REF_ARG (Scalar) value)
29
+ {
30
+ uint32_t aux;
31
+ accessor.get (ix, aux);
32
+ value = bit_cast<Scalar, uint32_t>(aux);
33
+ }
29
34
template<typename Scalar>
30
- void get (const uint ix, NBL_REF_ARG (vector <Scalar, 2 >) value) { accessor.get (ix, value.x), accessor.get (ix + _NBL_HLSL_WORKGROUP_SIZE_, value.y);}
35
+ enable_if_t<sizeof (Scalar) == sizeof (uint32_t), void > get (const uint ix, NBL_REF_ARG (vector <Scalar, 2 >) value)
36
+ {
37
+ uint32_t2 aux;
38
+ accessor.get (ix, aux.x);
39
+ accessor.get (ix + _NBL_HLSL_WORKGROUP_SIZE_, aux.y);
40
+ value = bit_cast<vector <Scalar, 2 >, uint32_t2>(aux);
41
+ }
31
42
template<typename Scalar>
32
- void get (const uint ix, NBL_REF_ARG (vector <Scalar, 3 >) value) { accessor.get (ix, value.x), accessor.get (ix + _NBL_HLSL_WORKGROUP_SIZE_, value.y), accessor.get (ix + 2 * _NBL_HLSL_WORKGROUP_SIZE_, value.z);}
43
+ enable_if_t<sizeof (Scalar) == sizeof (uint32_t), void > get (const uint ix, NBL_REF_ARG (vector <Scalar, 3 >) value)
44
+ {
45
+ uint32_t3 aux;
46
+ accessor.get (ix, aux.x);
47
+ accessor.get (ix + _NBL_HLSL_WORKGROUP_SIZE_, aux.y);
48
+ accessor.get (ix + 2 * _NBL_HLSL_WORKGROUP_SIZE_, aux.z);
49
+ value = bit_cast<vector <Scalar, 3 >, uint32_t3>(aux);
50
+ }
33
51
template<typename Scalar>
34
- void get (const uint ix, NBL_REF_ARG (vector <Scalar, 4 >) value) { accessor.get (ix, value.x), accessor.get (ix + _NBL_HLSL_WORKGROUP_SIZE_, value.y), accessor.get (ix + 2 * _NBL_HLSL_WORKGROUP_SIZE_, value.z), accessor.get (ix + 3 * _NBL_HLSL_WORKGROUP_SIZE_, value.w);}
52
+ enable_if_t<sizeof (Scalar) == sizeof (uint32_t), void > get (const uint ix, NBL_REF_ARG (vector <Scalar, 4 >) value)
53
+ {
54
+ uint32_t4 aux;
55
+ accessor.get (ix, aux.x);
56
+ accessor.get (ix + _NBL_HLSL_WORKGROUP_SIZE_, aux.y);
57
+ accessor.get (ix + 2 * _NBL_HLSL_WORKGROUP_SIZE_, aux.z);
58
+ accessor.get (ix + 3 * _NBL_HLSL_WORKGROUP_SIZE_, aux.w);
59
+ value = bit_cast<vector <Scalar, 3 >, uint32_t4>(aux);
60
+ }
35
61
36
62
template<typename Scalar>
37
- void set (const uint ix, const Scalar value) {accessor.set (ix, value);}
63
+ enable_if_t< sizeof (Scalar) == sizeof (uint32_t), void > set (const uint ix, const Scalar value) {accessor.set (ix, asuint ( value) );}
38
64
template<typename Scalar>
39
- void set (const uint ix, const vector <Scalar, 2 > value) {
40
- accessor.set (ix, value.x);
41
- accessor.set (ix + _NBL_HLSL_WORKGROUP_SIZE_, value.y);
65
+ enable_if_t< sizeof (Scalar) == sizeof (uint32_t), void > set (const uint ix, const vector <Scalar, 2 > value) {
66
+ accessor.set (ix, asuint ( value.x) );
67
+ accessor.set (ix + _NBL_HLSL_WORKGROUP_SIZE_, asuint ( value.y) );
42
68
}
43
69
template<typename Scalar>
44
- void set (const uint ix, const <Scalar, 3 > value) {
45
- accessor.set (ix, value.x);
46
- accessor.set (ix + _NBL_HLSL_WORKGROUP_SIZE_, value.y);
47
- accessor.set (ix + 2 * _NBL_HLSL_WORKGROUP_SIZE_, value.z);
70
+ enable_if_t< sizeof (Scalar) == sizeof (uint32_t), void > set (const uint ix, const <Scalar, 3 > value) {
71
+ accessor.set (ix, asuint ( value.x) );
72
+ accessor.set (ix + _NBL_HLSL_WORKGROUP_SIZE_, asuint ( value.y) );
73
+ accessor.set (ix + 2 * _NBL_HLSL_WORKGROUP_SIZE_, asuint ( value.z) );
48
74
}
49
75
template<typename Scalar>
50
- void set (const uint ix, const <Scalar, 4 > value) {
51
- accessor.set (ix, value.x);
52
- accessor.set (ix + _NBL_HLSL_WORKGROUP_SIZE_, value.y);
53
- accessor.set (ix + 2 * _NBL_HLSL_WORKGROUP_SIZE_, value.z);
54
- accessor.set (ix + 3 * _NBL_HLSL_WORKGROUP_SIZE_, value.w);
76
+ enable_if_t< sizeof (Scalar) == sizeof (uint32_t), void > set (const uint ix, const <Scalar, 4 > value) {
77
+ accessor.set (ix, asuint ( value.x) );
78
+ accessor.set (ix + _NBL_HLSL_WORKGROUP_SIZE_, asuint ( value.y) );
79
+ accessor.set (ix + 2 * _NBL_HLSL_WORKGROUP_SIZE_, asuint ( value.z) );
80
+ accessor.set (ix + 3 * _NBL_HLSL_WORKGROUP_SIZE_, asuint ( value.w) );
55
81
}
56
82
57
83
void atomicAnd (const uint ix, const uint value, NBL_REF_ARG (uint ) orig) {
0 commit comments