延迟上下文不会填充D3D11_MAPPED_SUBRESOURCE大小



我有一个 3D 应用程序,它使用 4 个线程,每个线程都有一个延迟上下文。问题是,当我使用延迟上下文来映射(ID3D11DeviceContext::Map)资源时,变量RowPitchDepthPitch等于0。我得到指向映射资源的指针,通过内存检查器,我看到它有保留内存(如 calloc)。

我只有ATI显卡才有这个问题。

以下代码显示了问题所在(象形文字 3 引擎的一部分):

D3D11_MAPPED_SUBRESOURCE Data;
Data.pData = NULL;
Data.DepthPitch = Data.RowPitch = 0;
if ( nullptr == pGlyphResource ) {
    Log::Get().Write( L"Trying to map a subresource that doesn't exist!!!" );
    return( Data );
}
// TODO: Update this to use a ComPtr!
// Acquire the native resource pointer.
ID3D11Resource* pResource = 0;
pResource = pGlyphResource->GetResource();
if ( nullptr == pResource ) {
    Log::Get().Write( L"Trying to map a subresource that has no native resource in it!!!" );
    return( Data );
}
// Perform the mapping of the resource.
// This function must fill Data but it only fill the pointer to the mapped resource
HRESULT hr = m_pContext->Map( pResource, subresource, actions, flags, &Data );
if ( FAILED( hr ) ) {
    Log::Get().Write( L"Failed to map resource!" );
}
return( Data );

在象形文字3中,您可以下载并测试它。代码在 PipeLineManagerDX11 中.cpp在 688 行,你可以在这里找到该类也可以检查它

问题是在ATI GPU中,该功能不会填充该变量。这在 NVIDIA GPU 中不会发生。

解决方案是使用填充变量的 NVIDIA GPU。

相关内容

  • 没有找到相关文章

最新更新