Skip to content

Commit 86e9a66

Browse files
author
devsh
committed
start reworking the descriptor declarations
1 parent fb2f7c6 commit 86e9a66

File tree

8 files changed

+279
-181
lines changed

8 files changed

+279
-181
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Copyright (C) 2024 - DevSH Graphics Programming Sp. z O.O.
2+
// This file is part of the "Nabla Engine".
3+
// For conditions of distribution and use, see copyright notice in nabla.h
4+
#ifndef _NBL_BUILTIN_HLSL_BINDING_INFO_INCLUDED_
5+
#define _NBL_BUILTIN_HLSL_BINDING_INFO_INCLUDED_
6+
7+
#include "nbl/builtin/hlsl/cpp_compat.hlsl"
8+
9+
namespace nbl
10+
{
11+
namespace hlsl
12+
{
13+
14+
template<uint32_t set, uint32_t ix, uint32_t count=1>
15+
struct ConstevalBindingInfo
16+
{
17+
NBL_CONSTEXPR_STATIC_INLINE uint32_t Set = set;
18+
NBL_CONSTEXPR_STATIC_INLINE uint32_t Index = ix;
19+
NBL_CONSTEXPR_STATIC_INLINE uint32_t Count = count;
20+
};
21+
22+
}
23+
}
24+
#endif

include/nbl/builtin/hlsl/blit/common.hlsl

Lines changed: 50 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -4,84 +4,77 @@
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

99
namespace nbl
1010
{
1111
namespace hlsl
1212
{
13-
namespace blit
13+
namespace glsl
1414
{
15-
namespace impl
15+
uint32_t 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
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// Copyright (C) 2023-2024 - DevSH Graphics Programming Sp. z O.O.
2+
// This file is part of the "Nabla Engine".
3+
// For conditions of distribution and use, see copyright notice in nabla.h
4+
//#include "nbl/builtin/hlsl/blit/common.hlsl"
5+
//#include "nbl/builtin/hlsl/blit/parameters.hlsl"
6+
//#include "nbl/builtin/hlsl/blit/compute_blit.hlsl"
7+
8+
9+
groupshared uint32_t sMem[ConstevalParameters::SharedMemoryDWORDs];
10+
/*
11+
struct HistogramAccessor
12+
{
13+
void atomicAdd(uint32_t wgID, uint32_t bucket, uint32_t v)
14+
{
15+
InterlockedAdd(statsBuff[wgID * (ConstevalParameters::AlphaBinCount + 1) + bucket], v);
16+
}
17+
};
18+
struct KernelWeightsAccessor
19+
{
20+
float32_t4 get(uint32_t idx)
21+
{
22+
return kernelWeights[idx];
23+
}
24+
};
25+
struct InCSAccessor
26+
{
27+
float32_t4 get(float32_t3 c, uint32_t l)
28+
{
29+
return inCS.SampleLevel(inSamp, blit::impl::dim_to_image_properties<ConstevalParameters::BlitDimCount>::getIndexCoord<float32_t>(c, l), 0);
30+
}
31+
};
32+
struct OutImgAccessor
33+
{
34+
void set(int32_t3 c, uint32_t l, float32_t4 v)
35+
{
36+
outImg[blit::impl::dim_to_image_properties<ConstevalParameters::BlitDimCount>::getIndexCoord<int32_t>(c, l)] = v;
37+
}
38+
};
39+
*/
40+
41+
using namespace nbl::hlsl::blit;
42+
43+
// TODO: push constants
44+
45+
[numthreads(ConstevalParameters::WorkGroupSize,1,1)]
46+
void main()
47+
{
48+
/*
49+
blit::compute_blit_t<ConstevalParameters> blit = blit::compute_blit_t<ConstevalParameters>::create(params);
50+
InCSAccessor inCSA;
51+
OutImgAccessor outImgA;
52+
KernelWeightsAccessor kwA;
53+
HistogramAccessor hA;
54+
SharedAccessor sA;
55+
blit.execute(inCSA, outImgA, kwA, hA, sA, workGroupID, localInvocationIndex);
56+
*/
57+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// Copyright (C) 2023-2024 - DevSH Graphics Programming Sp. z O.O.
2+
// This file is part of the "Nabla Engine".
3+
// For conditions of distribution and use, see copyright notice in nabla.h
4+
#include "nbl/builtin/hlsl/blit/common.hlsl"
5+
6+
7+
8+
//#include "nbl/builtin/hlsl/blit/parameters.hlsl"
9+
//#include "nbl/builtin/hlsl/blit/compute_blit.hlsl"
10+
11+
using namespace nbl::hlsl::blit;
12+
13+
// TODO: push constants
14+
15+
[numthreads(ConstevalParameters::WorkGroupSize,1,1)]
16+
void main()
17+
{
18+
}

include/nbl/builtin/hlsl/blit/temp.hlsl

Lines changed: 0 additions & 40 deletions
This file was deleted.

include/nbl/video/utilities/CComputeBlit.h

Lines changed: 0 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -130,86 +130,6 @@ class NBL_API2 CComputeBlit : public core::IReferenceCounted
130130
return m_normalizationPipelines[key];
131131
}
132132

133-
template <typename BlitUtilities>
134-
core::smart_refctd_ptr<video::IGPUShader> createBlitSpecializedShader(
135-
const asset::E_FORMAT outFormat,
136-
const asset::IImage::E_TYPE imageType,
137-
const core::vectorSIMDu32& inExtent,
138-
const core::vectorSIMDu32& outExtent,
139-
const asset::IBlitUtilities::E_ALPHA_SEMANTIC alphaSemantic,
140-
const typename BlitUtilities::convolution_kernels_t& kernels,
141-
const uint32_t workgroupSize = 0,
142-
const uint32_t alphaBinCount = asset::IBlitUtilities::DefaultAlphaBinCount)
143-
{
144-
if (workgroupSize==0)
145-
workgroupSize = m_device->getPhysicalDevice()->getLimits().maxWorkgroupSize;
146-
147-
const auto workgroupDims = getDefaultWorkgroupDims(imageType);
148-
const auto paddedAlphaBinCount = getPaddedAlphaBinCount(workgroupDims, alphaBinCount);
149-
150-
const uint32_t outChannelCount = asset::getFormatChannelCount(outFormat);
151-
const uint32_t smemFloatCount = m_availableSharedMemory / (sizeof(float) * outChannelCount);
152-
const uint32_t blitDimCount = static_cast<uint32_t>(imageType) + 1;
153-
154-
const auto castedFormat = getOutImageViewFormat(outFormat);
155-
assert(outFormat == castedFormat);
156-
const char* formatQualifier = asset::CHLSLCompiler::getStorageImageFormatQualifier(castedFormat);
157-
158-
std::ostringstream shaderSourceStream;
159-
shaderSourceStream
160-
<< "#include \"nbl/builtin/hlsl/blit/common.hlsl\"\n"
161-
"#include \"nbl/builtin/hlsl/blit/parameters.hlsl\"\n"
162-
"#include \"nbl/builtin/hlsl/blit/compute_blit.hlsl\"\n";
163-
164-
shaderSourceStream
165-
<< "typedef nbl::hlsl::blit::consteval_parameters_t<" << workgroupSize << ", 1, 1, " << smemFloatCount << ", "
166-
<< outChannelCount << ", " << blitDimCount << ", " << paddedAlphaBinCount << "> ceval_params_t;\n";
167-
168-
shaderSourceStream
169-
<< "[[vk::combinedImageSampler]] [[vk::binding(0, 0)]]\n"
170-
"nbl::hlsl::blit::impl::dim_to_image_properties<ceval_params_t::BlitDimCount>::combined_sampler_t inCS;\n"
171-
"[[vk::combinedImageSampler]] [[vk::binding(0, 0)]]\n"
172-
"SamplerState inSamp;\n"
173-
174-
"[[vk::image_format(\""<< formatQualifier << "\")]]\n"
175-
"[[vk::binding(1, 0)]]\n"
176-
"nbl::hlsl::blit::impl::dim_to_image_properties<ceval_params_t::BlitDimCount>::image_t outImg;\n"
177-
178-
"[[vk::binding(0, 1)]] Buffer<float32_t4> kernelWeights;\n"
179-
"[[vk::push_constant]] nbl::hlsl::blit::parameters_t params;"
180-
"groupshared float32_t sMem[" << m_availableSharedMemory / sizeof(float) << "];\n";
181-
182-
if (alphaSemantic == asset::IBlitUtilities::EAS_REFERENCE_OR_COVERAGE)
183-
{
184-
shaderSourceStream
185-
<< "[[vk::binding(2 , 0)]] RWStructuredBuffer<uint32_t> statsBuff;\n"
186-
"struct HistogramAccessor { void atomicAdd(uint32_t wgID, uint32_t bucket, uint32_t v) { InterlockedAdd(statsBuff[wgID * (ceval_params_t::AlphaBinCount + 1) + bucket], v); } };\n";
187-
}
188-
else
189-
{
190-
shaderSourceStream << "struct HistogramAccessor { void atomicAdd(uint32_t wgID, uint32_t bucket, uint32_t v) { } };\n";
191-
}
192-
193-
shaderSourceStream
194-
<< "struct KernelWeightsAccessor { float32_t4 get(float32_t idx) { return kernelWeights[idx]; } };\n"
195-
"struct SharedAccessor { float32_t get(float32_t idx) { return sMem[idx]; } void set(float32_t idx, float32_t val) { sMem[idx] = val; } };\n"
196-
"struct InCSAccessor { float32_t4 get(float32_t3 c, uint32_t l) { return inCS.SampleLevel(inSamp, nbl::hlsl::blit::impl::dim_to_image_properties<ceval_params_t::BlitDimCount>::getIndexCoord<float32_t>(c, l), 0); } };\n"
197-
"struct OutImgAccessor { void set(int32_t3 c, uint32_t l, float32_t4 v) { outImg[nbl::hlsl::blit::impl::dim_to_image_properties<ceval_params_t::BlitDimCount>::getIndexCoord<int32_t>(c, l)] = v; } };\n"
198-
199-
"[numthreads(ceval_params_t::WorkGroupSize, 1, 1)]\n"
200-
"void main(uint32_t3 workGroupID : SV_GroupID, uint32_t localInvocationIndex : SV_GroupIndex)\n"
201-
"{\n"
202-
" nbl::hlsl::blit::compute_blit_t<ceval_params_t> blit = nbl::hlsl::blit::compute_blit_t<ceval_params_t>::create(params);\n"
203-
" InCSAccessor inCSA; OutImgAccessor outImgA; KernelWeightsAccessor kwA; HistogramAccessor hA; SharedAccessor sA;\n"
204-
" blit.execute(inCSA, outImgA, kwA, hA, sA, workGroupID, localInvocationIndex);\n"
205-
"}\n";
206-
207-
auto cpuShader = core::make_smart_refctd_ptr<asset::ICPUShader>(shaderSourceStream.str().c_str(), IGPUShader::E_SHADER_STAGE::ESS_COMPUTE, IGPUShader::E_SHADER_STAGE::E_CONTENT_TYPE::ECT_HLSL, "CComputeBlit::createBlitSpecializedShader");
208-
auto gpuShader = m_device->createShader(std::move(cpuShader.get()));
209-
210-
return gpuShader;
211-
}
212-
213133
template <typename BlitUtilities>
214134
core::smart_refctd_ptr<video::IGPUComputePipeline> getBlitPipeline(
215135
const asset::E_FORMAT outFormat,

src/nbl/builtin/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,8 @@ LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "hlsl/member_test_macros.hlsl")
263263
LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "hlsl/blit/alpha_test.hlsl")
264264
LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "hlsl/blit/compute_blit.hlsl")
265265
LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "hlsl/blit/common.hlsl")
266-
LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "hlsl/blit/temp.hlsl")
266+
LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "hlsl/blit/default_blit.comp.hlsl")
267+
LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "hlsl/blit/default_normalize.comp.hlsl")
267268
LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "hlsl/blit/normalization.hlsl")
268269
LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "hlsl/blit/parameters.hlsl")
269270
#device capability
@@ -337,5 +338,7 @@ LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "hlsl/memory.hlsl")
337338
LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "hlsl/memory_accessor.hlsl")
338339
#enums
339340
LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "hlsl/enums.hlsl")
341+
#
342+
LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "hlsl/binding_info.hlsl")
340343

341344
ADD_CUSTOM_BUILTIN_RESOURCES(nblBuiltinResourceData NBL_RESOURCES_TO_EMBED "${NBL_ROOT_PATH}/include" "nbl/builtin" "nbl::builtin" "${NBL_ROOT_PATH_BINARY}/include" "${NBL_ROOT_PATH_BINARY}/src" "STATIC" "INTERNAL")

0 commit comments

Comments
 (0)