4
4
#ifndef _NBL_BUILTIN_HLSL_BLIT_COMMON_INCLUDED_
5
5
#define _NBL_BUILTIN_HLSL_BLIT_COMMON_INCLUDED_
6
6
7
- #include <nbl/builtin/hlsl/cpp_compat .hlsl>
7
+ #include <nbl/builtin/hlsl/binding_info .hlsl>
8
8
9
9
namespace nbl
10
10
{
11
11
namespace hlsl
12
12
{
13
- namespace blit
13
+ namespace glsl
14
14
{
15
- namespace impl
15
+ uint32_t3 gl_WorkGroupSize ()
16
16
{
17
+ return uint32_t3 (ConstevalParameters::WorkGroupSize,1 ,1 );
18
+ }
19
+ }
20
+ }
21
+ }
17
22
18
- template <uint32_t Dimension>
19
- struct dim_to_image_properties { };
23
+ using namespace nbl::hlsl;
24
+
25
+ [[vk::binding (ConstevalParameters::kernel_weight_binding_t::Index,ConstevalParameters::kernel_weight_binding_t::Set)]]
26
+ Buffer <float32_t4> kernelWeights[ConstevalParameters::kernel_weight_binding_t::Count];
27
+ [[vk::binding (ConstevalParameters::input_sampler_binding_t::Index,ConstevalParameters::input_sampler_binding_t::Set)]]
28
+ SamplerState inSamp[ConstevalParameters::input_sampler_binding_t::Count];
29
+ // aliased
30
+ [[vk::binding (ConstevalParameters::input_image_binding_t::Index,ConstevalParameters::input_image_binding_t::Set)]]
31
+ Texture1DArray <float4 > inAs1DArray[ConstevalParameters::input_image_binding_t::Count];
32
+ [[vk::binding (ConstevalParameters::input_image_binding_t::Index,ConstevalParameters::input_image_binding_t::Set)]]
33
+ Texture2DArray <float4 > inAs2DArray[ConstevalParameters::input_image_binding_t::Count];
34
+ [[vk::binding (ConstevalParameters::input_image_binding_t::Index,ConstevalParameters::input_image_binding_t::Set)]]
35
+ Texture3D <float4 > inAs3D[ConstevalParameters::input_image_binding_t::Count];
36
+ // aliased
37
+ [[vk::binding (ConstevalParameters::output_binding_t::Index,ConstevalParameters::output_binding_t::Set)]] [[vk::image_format ("unknown" )]]
38
+ RWTexture1DArray <float4 > outAs1DArray[ConstevalParameters::output_binding_t::Count];
39
+ [[vk::binding (ConstevalParameters::output_binding_t::Index,ConstevalParameters::output_binding_t::Set)]] [[vk::image_format ("unknown" )]]
40
+ RWTexture2DArray <float4 > outAs2DArray[ConstevalParameters::output_binding_t::Count];
41
+ [[vk::binding (ConstevalParameters::output_binding_t::Index,ConstevalParameters::output_binding_t::Set)]] [[vk::image_format ("unknown" )]]
42
+ RWTexture3D <float4 > outAs3D[ConstevalParameters::output_binding_t::Count];
20
43
21
- template <>
22
- struct dim_to_image_properties<1 >
23
- {
24
- using combined_sampler_t = Texture1DArray <float4 >;
25
- using image_t = RWTexture1DArray <float4 >;
26
44
27
- template <typename T>
28
- static vector <T, 2 > getIndexCoord (vector <T, 3 > coords, uint32_t layer)
45
+ groupshared uint32_t sMem[ConstevalParameters::SharedMemoryDWORDs];
46
+ /*
47
+ struct HistogramAccessor
48
+ {
49
+ void atomicAdd(uint32_t wgID, uint32_t bucket, uint32_t v)
29
50
{
30
- return vector <T, 2 >(coords.x, layer );
51
+ InterlockedAdd(statsBuff[wgID * (ConstevalParameters::AlphaBinCount + 1) + bucket], v );
31
52
}
32
53
};
33
-
34
- template <>
35
- struct dim_to_image_properties<2 >
54
+ struct SharedAccessor
36
55
{
37
- using combined_sampler_t = Texture2DArray <float4 >;
38
- using image_t = RWTexture2DArray <float4 >;
39
-
40
- template <typename T>
41
- static vector <T,3 > getIndexCoord (vector <T, 3 > coords, uint32_t layer)
56
+ float32_t get(float32_t idx)
42
57
{
43
- return vector <T, 3 >(coords.xy, layer);
58
+ return sMem[idx];
59
+ }
60
+ void set(float32_t idx, float32_t val)
61
+ {
62
+ sMem[idx] = val;
44
63
}
45
64
};
46
-
47
- template <>
48
- struct dim_to_image_properties<3 >
65
+ struct InCSAccessor
49
66
{
50
- using combined_sampler_t = Texture3D <float4 >;
51
- using image_t = RWTexture3D <float4 >;
52
-
53
- template <typename T>
54
- static vector <T, 3 > getIndexCoord (vector <T, 3 > coords, uint32_t layer)
67
+ float32_t4 get(float32_t3 c, uint32_t l)
55
68
{
56
- return vector <T, 3 >(coords );
69
+ return inCS.SampleLevel(inSamp, blit::impl::dim_to_image_properties<ConstevalParameters::BlitDimCount>::getIndexCoord<float32_t>(c, l), 0 );
57
70
}
58
71
};
59
-
60
- }
61
-
62
-
63
- template<
64
- uint32_t _WorkGroupSizeX,
65
- uint32_t _WorkGroupSizeY,
66
- uint32_t _WorkGroupSizeZ,
67
- uint32_t _SMemFloatsPerChannel,
68
- uint32_t _BlitOutChannelCount,
69
- uint32_t _BlitDimCount,
70
- uint32_t _AlphaBinCount>
71
- struct consteval_parameters_t
72
+ struct OutImgAccessor
72
73
{
73
- NBL_CONSTEXPR_STATIC_INLINE uint32_t SMemFloatsPerChannel = _SMemFloatsPerChannel;
74
- NBL_CONSTEXPR_STATIC_INLINE uint32_t BlitOutChannelCount = _BlitOutChannelCount;
75
- NBL_CONSTEXPR_STATIC_INLINE uint32_t BlitDimCount = _BlitDimCount;
76
- NBL_CONSTEXPR_STATIC_INLINE uint32_t AlphaBinCount = _AlphaBinCount;
77
- NBL_CONSTEXPR_STATIC_INLINE uint32_t WorkGroupSizeX = _WorkGroupSizeX;
78
- NBL_CONSTEXPR_STATIC_INLINE uint32_t WorkGroupSizeY = _WorkGroupSizeY;
79
- NBL_CONSTEXPR_STATIC_INLINE uint32_t WorkGroupSizeZ = _WorkGroupSizeZ;
80
- NBL_CONSTEXPR_STATIC_INLINE uint32_t WorkGroupSize = WorkGroupSizeX * WorkGroupSizeY * WorkGroupSizeZ;
74
+ void set(int32_t3 c, uint32_t l, float32_t4 v)
75
+ {
76
+ outImg[blit::impl::dim_to_image_properties<ConstevalParameters::BlitDimCount>::getIndexCoord<int32_t>(c, l)] = v;
77
+ }
81
78
};
82
-
83
- }
84
- }
85
- }
86
-
79
+ */
87
80
#endif
0 commit comments