Skip to content

Commit 840f0d4

Browse files
walbourn_cpwalbourn_cp
walbourn_cp
authored and
walbourn_cp
committed
DirectXTex: Fix for size rounding bug in GPU BC compressor
1 parent 6a37f81 commit 840f0d4

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

DirectXTex/BCDirectCompute.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ HRESULT GPUCompressBC::Compress( const Image& srcImage, const Image& destImage )
461461
//--- BC7 -----------------------------------------------------------------
462462
ID3D11ShaderResourceView* pSRVs[] = { sourceSRV.Get(), nullptr };
463463
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) );
465465

466466
for ( UINT i = 0; i < 3; ++i )
467467
{
@@ -523,14 +523,14 @@ HRESULT GPUCompressBC::Compress( const Image& srcImage, const Image& destImage )
523523

524524
pSRVs[1] = m_err2SRV.Get();
525525
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) );
527527
}
528528
else
529529
{
530530
//--- BC6H ----------------------------------------------------------------
531531
ID3D11ShaderResourceView* pSRVs[] = { sourceSRV.Get(), nullptr };
532532
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) );
534534

535535
for ( UINT i = 0; i < 10; ++i )
536536
{
@@ -556,12 +556,12 @@ HRESULT GPUCompressBC::Compress( const Image& srcImage, const Image& destImage )
556556

557557
pSRVs[1] = (i & 1) ? m_err2SRV.Get() : m_err1SRV.Get();
558558
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) );
560560
}
561561

562562
pSRVs[1] = m_err1SRV.Get();
563563
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) );
565565
}
566566

567567
start_block_id += n;

0 commit comments

Comments
 (0)