DirectXTex: Fixed problem with DirectCompute compressor for BC7_UNORM_SRGB
- Also added diagnostic message from texconv when doing DirectCompute compression
This commit is contained in:
parent
d82ee0c5dd
commit
6cafea6cb0
@ -352,12 +352,13 @@ HRESULT GPUCompressBC::Compress( const Image& srcImage, const Image& destImage )
|
||||
}
|
||||
|
||||
//--- Create input texture --------------------------------------------------------
|
||||
// TODO - non-power-of-2 BCs require handling non-multiple of 4 cases
|
||||
|
||||
auto pDevice = m_device.Get();
|
||||
if ( !pDevice )
|
||||
return E_POINTER;
|
||||
|
||||
// We need to avoid the hardware doing additional colorspace conversion
|
||||
DXGI_FORMAT inputFormat = ( m_srcformat == DXGI_FORMAT_R8G8B8A8_UNORM_SRGB ) ? DXGI_FORMAT_R8G8B8A8_UNORM : m_srcformat;
|
||||
|
||||
ScopedObject<ID3D11Texture2D> sourceTex;
|
||||
{
|
||||
D3D11_TEXTURE2D_DESC desc;
|
||||
@ -366,7 +367,7 @@ HRESULT GPUCompressBC::Compress( const Image& srcImage, const Image& destImage )
|
||||
desc.Height = static_cast<UINT>( srcImage.height );
|
||||
desc.MipLevels = 1;
|
||||
desc.ArraySize = 1;
|
||||
desc.Format = srcImage.format;
|
||||
desc.Format = inputFormat;
|
||||
desc.SampleDesc.Count = 1;
|
||||
desc.Usage = D3D11_USAGE_DEFAULT;
|
||||
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
|
||||
@ -388,7 +389,7 @@ HRESULT GPUCompressBC::Compress( const Image& srcImage, const Image& destImage )
|
||||
D3D11_SHADER_RESOURCE_VIEW_DESC desc;
|
||||
memset( &desc, 0, sizeof(desc) );
|
||||
desc.Texture2D.MipLevels = 1;
|
||||
desc.Format = m_srcformat;
|
||||
desc.Format = inputFormat;
|
||||
desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
|
||||
|
||||
HRESULT hr = pDevice->CreateShaderResourceView( sourceTex.Get(), &desc, sourceSRV.ReleaseAndGetAddressOf() );
|
||||
|
@ -440,18 +440,42 @@ bool CreateDevice( _Outptr_ ID3D11Device** pDevice )
|
||||
|
||||
if ( !hwopts.ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x )
|
||||
{
|
||||
if ( *pDevice )
|
||||
{
|
||||
(*pDevice)->Release();
|
||||
*pDevice = nullptr;
|
||||
}
|
||||
hr = HRESULT_FROM_WIN32( ERROR_NOT_SUPPORTED );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( FAILED(hr) && *pDevice )
|
||||
if ( SUCCEEDED(hr) )
|
||||
{
|
||||
(*pDevice)->Release();
|
||||
*pDevice = nullptr;
|
||||
}
|
||||
IDXGIDevice* dxgiDevice = nullptr;
|
||||
hr = (*pDevice)->QueryInterface( __uuidof( IDXGIDevice ), reinterpret_cast< void** >( &dxgiDevice ) );
|
||||
if ( SUCCEEDED(hr) )
|
||||
{
|
||||
IDXGIAdapter* pAdapter = nullptr;
|
||||
hr = dxgiDevice->GetAdapter( &pAdapter );
|
||||
if ( SUCCEEDED(hr) )
|
||||
{
|
||||
DXGI_ADAPTER_DESC desc;
|
||||
hr = pAdapter->GetDesc( &desc );
|
||||
if ( SUCCEEDED(hr) )
|
||||
{
|
||||
wprintf( L"\n[Using DirectCompute on \"%s\"]\n", desc.Description );
|
||||
}
|
||||
pAdapter->Release();
|
||||
}
|
||||
|
||||
return SUCCEEDED(hr);
|
||||
dxgiDevice->Release();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user