@@ -461,7 +461,7 @@ HRESULT GPUCompressBC::Compress( const Image& srcImage, const Image& destImage )
461
461
// --- BC7 -----------------------------------------------------------------
462
462
ID3D11ShaderResourceView* pSRVs[] = { sourceSRV.Get (), nullptr };
463
463
RunComputeShader ( pContext, m_BC7_tryMode456CS.Get (), pSRVs, 2 , m_constBuffer.Get (),
464
- m_err1UAV.Get (), std::max<UINT>(uThreadGroupCount / 4 , 1 ) );
464
+ m_err1UAV.Get (), std::max<UINT>( ( uThreadGroupCount + 3 ) / 4 , 1 ) );
465
465
466
466
for ( UINT i = 0 ; i < 3 ; ++i )
467
467
{
@@ -523,14 +523,14 @@ HRESULT GPUCompressBC::Compress( const Image& srcImage, const Image& destImage )
523
523
524
524
pSRVs[1 ] = m_err2SRV.Get ();
525
525
RunComputeShader ( pContext, m_BC7_encodeBlockCS.Get (), pSRVs, 2 , m_constBuffer.Get (),
526
- m_outputUAV.Get (), std::max<UINT>(uThreadGroupCount / 4 , 1 ) );
526
+ m_outputUAV.Get (), std::max<UINT>( ( uThreadGroupCount + 3 ) / 4 , 1 ) );
527
527
}
528
528
else
529
529
{
530
530
// --- BC6H ----------------------------------------------------------------
531
531
ID3D11ShaderResourceView* pSRVs[] = { sourceSRV.Get (), nullptr };
532
532
RunComputeShader ( pContext, m_BC6H_tryModeG10CS.Get (), pSRVs, 2 , m_constBuffer.Get (),
533
- m_err1UAV.Get (), std::max<UINT>(uThreadGroupCount / 4 , 1 ) );
533
+ m_err1UAV.Get (), std::max<UINT>( ( uThreadGroupCount + 3 ) / 4 , 1 ) );
534
534
535
535
for ( UINT i = 0 ; i < 10 ; ++i )
536
536
{
@@ -556,12 +556,12 @@ HRESULT GPUCompressBC::Compress( const Image& srcImage, const Image& destImage )
556
556
557
557
pSRVs[1 ] = (i & 1 ) ? m_err2SRV.Get () : m_err1SRV.Get ();
558
558
RunComputeShader ( pContext, m_BC6H_tryModeLE10CS.Get (), pSRVs, 2 , m_constBuffer.Get (),
559
- (i & 1 ) ? m_err1UAV.Get () : m_err2UAV.Get (), std::max<UINT>(uThreadGroupCount / 2 , 1 ) );
559
+ (i & 1 ) ? m_err1UAV.Get () : m_err2UAV.Get (), std::max<UINT>( ( uThreadGroupCount + 1 ) / 2 , 1 ) );
560
560
}
561
561
562
562
pSRVs[1 ] = m_err1SRV.Get ();
563
563
RunComputeShader ( pContext, m_BC6H_encodeBlockCS.Get (), pSRVs, 2 , m_constBuffer.Get (),
564
- m_outputUAV.Get (), std::max<UINT>(uThreadGroupCount / 2 , 1 ) );
564
+ m_outputUAV.Get (), std::max<UINT>( ( uThreadGroupCount + 1 ) / 2 , 1 ) );
565
565
}
566
566
567
567
start_block_id += n;
0 commit comments