9
9
namespace nbl ::video
10
10
{
11
11
12
- class NBL_API2 CComputeBlit : public core::IReferenceCounted
13
- {
12
+ class NBL_API2 CComputeBlit : public core::IReferenceCounted
13
+ {
14
14
private:
15
15
struct vec3 { float x, y, z; };
16
16
struct uvec3 { uint32_t x, y, z; };
@@ -56,7 +56,7 @@ namespace nbl::video
56
56
57
57
asset::SPushConstantRange pcRange = {};
58
58
{
59
- pcRange.stageFlags = asset::IShader ::ESS_COMPUTE;
59
+ pcRange.stageFlags = IGPUShader::E_SHADER_STAGE ::ESS_COMPUTE;
60
60
pcRange.offset = 0u ;
61
61
pcRange.size = sizeof (nbl::hlsl::blit::parameters_t );
62
62
}
@@ -228,7 +228,7 @@ namespace nbl::video
228
228
" blit.execute(inCSA, outImgA, kwA, hA, sA, workGroupID, localInvocationIndex);\n "
229
229
" }\n " ;
230
230
231
- auto cpuShader = core::make_smart_refctd_ptr<asset::ICPUShader>(shaderSourceStream.str ().c_str (), asset::IShader ::ESS_COMPUTE, asset::IShader ::E_CONTENT_TYPE::ECT_HLSL, " CComputeBlit::createBlitSpecializedShader" );
231
+ 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" );
232
232
auto gpuShader = m_device->createShader (std::move (cpuShader.get ()));
233
233
234
234
return gpuShader;
@@ -458,14 +458,14 @@ namespace nbl::video
458
458
{
459
459
switch (imageType)
460
460
{
461
- case asset::IImage::ET_1D:
462
- return core::vectorSIMDu32 (256 , 1 , 1 , 1 );
463
- case asset::IImage::ET_2D:
464
- return core::vectorSIMDu32 (16 , 16 , 1 , 1 );
465
- case asset::IImage::ET_3D:
466
- return core::vectorSIMDu32 (8 , 8 , 4 , 1 );
467
- default :
468
- return core::vectorSIMDu32 (1 , 1 , 1 , 1 );
461
+ case asset::IImage::ET_1D:
462
+ return core::vectorSIMDu32 (256 , 1 , 1 , 1 );
463
+ case asset::IImage::ET_2D:
464
+ return core::vectorSIMDu32 (16 , 16 , 1 , 1 );
465
+ case asset::IImage::ET_3D:
466
+ return core::vectorSIMDu32 (8 , 8 , 4 , 1 );
467
+ default :
468
+ return core::vectorSIMDu32 (1 , 1 , 1 , 1 );
469
469
}
470
470
}
471
471
@@ -556,11 +556,11 @@ namespace nbl::video
556
556
557
557
infos[0 ].desc = inImageView;
558
558
infos[0 ].info .image .imageLayout = asset::IImage::LAYOUT::READ_ONLY_OPTIMAL;
559
- infos[0 ].info .image .sampler = samplers[wrapU][wrapV][wrapW][borderColor];
559
+ infos[0 ].info .combinedImageSampler .sampler = samplers[wrapU][wrapV][wrapW][borderColor];
560
560
561
561
infos[1 ].desc = outImageView;
562
562
infos[1 ].info .image .imageLayout = asset::IImage::LAYOUT::GENERAL;
563
- infos[1 ].info .image .sampler = nullptr ;
563
+ infos[1 ].info .combinedImageSampler .sampler = nullptr ;
564
564
565
565
if (coverageAdjustmentScratchBuffer)
566
566
{
@@ -679,35 +679,6 @@ namespace nbl::video
679
679
}
680
680
}
681
681
682
- // ! WARNING: This function blocks and stalls the GPU!
683
- template <typename BlitUtilities, typename ... Args>
684
- inline void blit (video::IQueue* computeQueue, Args&&... args)
685
- {
686
- auto cmdPool = m_device->createCommandPool (computeQueue->getFamilyIndex (), video::IGPUCommandPool::CREATE_FLAGS::NONE);
687
- core::smart_refctd_ptr<video::IGPUCommandBuffer> cmdbuf;
688
- cmdPool->createCommandBuffers (video::IGPUCommandPool::BUFFER_LEVEL::PRIMARY, {&cmdbuf, &cmdbuf + 1 });
689
-
690
- auto semaphore = m_device->createSemaphore (0 );
691
-
692
- cmdbuf->begin (video::IGPUCommandBuffer::USAGE::ONE_TIME_SUBMIT_BIT);
693
- blit<BlitUtilities>(cmdbuf.get (), std::forward<Args>(args)...);
694
- cmdbuf->end ();
695
-
696
- video::IQueue::SSubmitInfo submitInfo;
697
- video::IQueue::SSubmitInfo::SSemaphoreInfo signalInfo;
698
- video::IQueue::SSubmitInfo::SCommandBufferInfo cmdbufInfo;
699
- cmdbufInfo.cmdbuf = cmdbuf.get ();
700
- submitInfo.commandBuffers = { &cmdbufInfo, &cmdbufInfo + 1 };
701
- submitInfo.signalSemaphores = { &signalInfo, &signalInfo + 1 };
702
- signalInfo.semaphore = semaphore.get ();
703
- signalInfo.value = 1 ;
704
- signalInfo.stageMask = asset::PIPELINE_STAGE_FLAGS::ALL_COMMANDS_BITS;
705
- computeQueue->submit ({ &submitInfo, &submitInfo + 1 });
706
-
707
- video::ISemaphore::SWaitInfo waitInfos{ semaphore.get (), 1 };
708
- m_device->blockForSemaphores ({ &waitInfos, &waitInfos + 1 });
709
- }
710
-
711
682
// ! Returns the original format if supports STORAGE_IMAGE otherwise returns a format in its compat class which supports STORAGE_IMAGE.
712
683
inline asset::E_FORMAT getOutImageViewFormat (const asset::E_FORMAT format)
713
684
{
@@ -735,45 +706,45 @@ namespace nbl::video
735
706
736
707
switch (format)
737
708
{
738
- case EF_R32G32B32A32_SFLOAT:
739
- case EF_R16G16B16A16_SFLOAT:
740
- case EF_R16G16B16A16_UNORM:
741
- case EF_R16G16B16A16_SNORM:
742
- return EF_R32G32B32A32_SFLOAT;
709
+ case EF_R32G32B32A32_SFLOAT:
710
+ case EF_R16G16B16A16_SFLOAT:
711
+ case EF_R16G16B16A16_UNORM:
712
+ case EF_R16G16B16A16_SNORM:
713
+ return EF_R32G32B32A32_SFLOAT;
743
714
744
- case EF_R32G32_SFLOAT:
745
- case EF_R16G16_SFLOAT:
746
- case EF_R16G16_UNORM:
747
- case EF_R16G16_SNORM:
748
- return EF_R32G32_SFLOAT;
715
+ case EF_R32G32_SFLOAT:
716
+ case EF_R16G16_SFLOAT:
717
+ case EF_R16G16_UNORM:
718
+ case EF_R16G16_SNORM:
719
+ return EF_R32G32_SFLOAT;
749
720
750
- case EF_B10G11R11_UFLOAT_PACK32:
751
- return EF_R16G16B16A16_SFLOAT;
721
+ case EF_B10G11R11_UFLOAT_PACK32:
722
+ return EF_R16G16B16A16_SFLOAT;
752
723
753
- case EF_R32_SFLOAT:
754
- case EF_R16_SFLOAT:
755
- case EF_R16_UNORM:
756
- case EF_R16_SNORM:
757
- return EF_R32_SFLOAT;
724
+ case EF_R32_SFLOAT:
725
+ case EF_R16_SFLOAT:
726
+ case EF_R16_UNORM:
727
+ case EF_R16_SNORM:
728
+ return EF_R32_SFLOAT;
758
729
759
- case EF_A2B10G10R10_UNORM_PACK32:
760
- case EF_R8G8B8A8_UNORM:
761
- return EF_R16G16B16A16_UNORM;
730
+ case EF_A2B10G10R10_UNORM_PACK32:
731
+ case EF_R8G8B8A8_UNORM:
732
+ return EF_R16G16B16A16_UNORM;
762
733
763
- case EF_R8G8_UNORM:
764
- return EF_R16G16_UNORM;
734
+ case EF_R8G8_UNORM:
735
+ return EF_R16G16_UNORM;
765
736
766
- case EF_R8_UNORM:
767
- return EF_R16_UNORM;
737
+ case EF_R8_UNORM:
738
+ return EF_R16_UNORM;
768
739
769
- case EF_R8G8B8A8_SNORM:
770
- return EF_R16G16B16A16_SNORM;
740
+ case EF_R8G8B8A8_SNORM:
741
+ return EF_R16G16B16A16_SNORM;
771
742
772
- case EF_R8G8_SNORM:
773
- return EF_R16G16_SNORM;
743
+ case EF_R8G8_SNORM:
744
+ return EF_R16G16_SNORM;
774
745
775
- default :
776
- return EF_UNKNOWN;
746
+ default :
747
+ return EF_UNKNOWN;
777
748
}
778
749
}
779
750
@@ -855,7 +826,7 @@ namespace nbl::video
855
826
856
827
static inline void dispatchHelper (video::IGPUCommandBuffer* cmdbuf, const video::IGPUPipelineLayout* pipelineLayout, const nbl::hlsl::blit::parameters_t & pushConstants, const dispatch_info_t & dispatchInfo)
857
828
{
858
- cmdbuf->pushConstants (pipelineLayout, asset::IShader ::ESS_COMPUTE, 0u , sizeof (nbl::hlsl::blit::parameters_t ), &pushConstants);
829
+ cmdbuf->pushConstants (pipelineLayout, IGPUShader::E_SHADER_STAGE ::ESS_COMPUTE, 0u , sizeof (nbl::hlsl::blit::parameters_t ), &pushConstants);
859
830
cmdbuf->dispatch (dispatchInfo.wgCount [0 ], dispatchInfo.wgCount [1 ], dispatchInfo.wgCount [2 ]);
860
831
}
861
832
@@ -870,7 +841,7 @@ namespace nbl::video
870
841
{
871
842
bindings[i].binding = i;
872
843
bindings[i].count = 1u ;
873
- bindings[i].stageFlags = asset::IShader ::ESS_COMPUTE;
844
+ bindings[i].stageFlags = IGPUShader::E_SHADER_STAGE ::ESS_COMPUTE;
874
845
bindings[i].type = descriptorTypes[i];
875
846
}
876
847
@@ -883,18 +854,18 @@ namespace nbl::video
883
854
const asset::E_FORMAT_CLASS formatClass = asset::getFormatClass (format);
884
855
switch (formatClass)
885
856
{
886
- case asset::EFC_8_BIT:
887
- return asset::EF_R8_UINT;
888
- case asset::EFC_16_BIT:
889
- return asset::EF_R16_UINT;
890
- case asset::EFC_32_BIT:
891
- return asset::EF_R32_UINT;
892
- case asset::EFC_64_BIT:
893
- return asset::EF_R32G32_UINT;
894
- case asset::EFC_128_BIT:
895
- return asset::EF_R32G32B32A32_UINT;
896
- default :
897
- return asset::EF_UNKNOWN;
857
+ case asset::EFC_8_BIT:
858
+ return asset::EF_R8_UINT;
859
+ case asset::EFC_16_BIT:
860
+ return asset::EF_R16_UINT;
861
+ case asset::EFC_32_BIT:
862
+ return asset::EF_R32_UINT;
863
+ case asset::EFC_64_BIT:
864
+ return asset::EF_R32G32_UINT;
865
+ case asset::EFC_128_BIT:
866
+ return asset::EF_R32G32B32A32_UINT;
867
+ default :
868
+ return asset::EF_UNKNOWN;
898
869
}
899
870
}
900
871
@@ -942,8 +913,7 @@ namespace nbl::video
942
913
const auto paddedAlphaBinCount = core::roundUp (oldAlphaBinCount, wgSize);
943
914
return paddedAlphaBinCount;
944
915
}
945
- };
946
- }
916
+ };
947
917
948
- # define _NBL_VIDEO_C_COMPUTE_BLIT_H_INCLUDED_
918
+ }
949
919
#endif
0 commit comments