44#ifndef _NBL_BUILTIN_HLSL_BLIT_COMMON_INCLUDED_
55#define _NBL_BUILTIN_HLSL_BLIT_COMMON_INCLUDED_
66
7- #include <nbl/builtin/hlsl/cpp_compat .hlsl>
7+ #include <nbl/builtin/hlsl/binding_info .hlsl>
88
99namespace nbl
1010{
1111namespace hlsl
1212{
13- namespace blit
13+ namespace glsl
1414{
15- namespace impl
15+ uint32_t3 gl_WorkGroupSize ()
1616{
17+ return uint32_t3 (ConstevalParameters::WorkGroupSize,1 ,1 );
18+ }
19+ }
20+ }
21+ }
1722
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];
2043
21- template <>
22- struct dim_to_image_properties<1 >
23- {
24- using combined_sampler_t = Texture1DArray <float4 >;
25- using image_t = RWTexture1DArray <float4 >;
2644
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)
2950 {
30- return vector <T, 2 >(coords.x, layer );
51+ InterlockedAdd(statsBuff[wgID * (ConstevalParameters::AlphaBinCount + 1) + bucket], v );
3152 }
3253};
33-
34- template <>
35- struct dim_to_image_properties<2 >
54+ struct SharedAccessor
3655{
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)
4257 {
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;
4463 }
4564};
46-
47- template <>
48- struct dim_to_image_properties<3 >
65+ struct InCSAccessor
4966{
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)
5568 {
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 );
5770 }
5871};
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
7273{
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+ }
8178};
82-
83- }
84- }
85- }
86-
79+ */
8780#endif
0 commit comments