Skip to content

Commit 73a10bf

Browse files
committed
Fixed the Adaptor
1 parent ff85986 commit 73a10bf

File tree

3 files changed

+50
-18
lines changed

3 files changed

+50
-18
lines changed

include/nbl/builtin/hlsl/bda/bda_accessor.hlsl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ struct BdaAccessor
2323
return accessor;
2424
}
2525

26+
T get(const uint64_t index)
27+
{
28+
bda::__ptr<T> target = ptr + index;
29+
return target.template deref().load();
30+
}
31+
2632
void get(const uint64_t index, NBL_REF_ARG(T) value)
2733
{
2834
bda::__ptr<T> target = ptr + index;

include/nbl/builtin/hlsl/memory_accessor.hlsl

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,33 +25,59 @@ struct MemoryAdaptor
2525
}
2626

2727
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+
}
2934
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+
}
3142
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+
}
3351
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+
}
3561

3662
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));}
3864
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));
4268
}
4369
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));
4874
}
4975
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));
5581
}
5682

5783
void atomicAnd(const uint ix, const uint value, NBL_REF_ARG(uint) orig) {

0 commit comments

Comments
 (0)