innuendo
> теперь расскажи, зачем тебе
Он мне незачем.
prowkan
ох, как я уже написал раньше - ты смешал всё в кучу, простой msaa и programable sample position
последнее хорошая фича для всяких MFAA шоб менять паттерн
На интегрированном ГП Ryzen 7 5800H не работает ResolveSubresourceRegion, в текстуру просто записываются нули. И это при том, что CheckFeatureSupport даёт ProgrammableSamplePositionsTier = D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_2
говорит о том, что ты не понимаешь, что из чего вытекает
innuendo
> ты смешал всё в кучу, простой msaa и programable sample position
Я вроде бы привёл ссылку на спецификацию, где ясно сказано, что ResolveSubresourceRegion требует Programmable Sample Positions на уровне Tier 1. Что не так?
prowkan
https://docs.microsoft.com/en-us/windows/win32/api/d3d12/nf-d3d12… esourceregion
где тут про Programmable Sample Positions ?
prowkan
> Я вроде бы привёл ссылку на спецификацию, где ясно сказано, что
> ResolveSubresourceRegion требует Programmable Sample Positions на уровне Tier
> 1. Что не так?
не так
D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_1
Indicates that there's tier 1 support for programmable sample positions. In tier 1, a single sample pattern can be specified to repeat for every pixel (SetSamplePosition parameter NumPixels = 1) and ResolveSubResource is supported.
если D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_1 есть, то он требует наличия ResolveSubResource
innuendo
> где тут про Programmable Sample Positions ?
Повторяю ещё раз: https://microsoft.github.io/DirectX-Specs/d3d/ProgrammableSamplePositions.html
Device Removed if SetSamplePositions or ResolveSubresourceRegion called on device without Tier1 programmable sample positions support
> если D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_1 есть, то он требует наличия ResolveSubResource
По-видимому, там опечатка, и имелось в виду ResolveSubresourceRegion, а не ResolveSubResource.
prowkan
> ResolveSubresourceRegion
зайдём с другой стороны - как ты получаешь возможность вызова ResolveSubresourceRegion ?
через ID3D12GraphicsCommandList1?
а его ты как получаешь ?
innuendo
> зайдём с другой стороны - как ты получаешь возможность вызова
> ResolveSubresourceRegion ?
> через ID3D12GraphicsCommandList1?
А что, есть другие варианты?
> а его ты как получаешь ?
Device->CreateCommandList(0, D3D12_COMMAND_LIST_TYPE::D3D12_COMMAND_LIST_TYPE_DIRECT, CommandAllocators[0], nullptr, __uuidof( ID3D12GraphicsCommandList), &CommandList); CommandList->QueryInterface<ID3D12GraphicsCommandList1>( &CommandList1);
prowkan
> CommandList->QueryInterface<ID3D12GraphicsCommandList1>(&CommandList1);
если ты смог получить интерфейс CommandList1 (он не nullptr), то дальше ты должен чекать
D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_1 для вызова ResolveSubresourceRegion?
prowkan
Да, ошибка повторяется. Стало интересно, поотлаживаю. На AMD форум забей баг, поправят.
prowkan
на rx580 красный фон
innuendo
> если ты смог получить интерфейс CommandList1 (он не nullptr), то дальше ты
> должен чекать
> D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_1 для вызова ResolveSubresourceRegion?
Разумеется.
Andrey
Я тут выше выяснил, что, возможно, проблема в том, какой я формат передаю в функцию. В исходной версии я передавал DXGI_FORMAT_D32_FLOAT_S8X24_UINT, и это работало на NVIDIA, но не работало на AMD.
В новой версии я передаю DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS, и теперь всё работает и на AMD, и на NVIDIA.
К сожалению, чтение документации так и не прояснило, каким образом нужно выбирать формат.
prowkan
> Разумеется.
не соглашусь ... вам знакомы понятия необходимости и достаточности ?
где написано что ResolveSubresourceRegion не может работать с D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER_NOT_SUPPORTED?
PROGRAMMABLE_SAMPLE_POSITIONS это просто возможность задавать свой паттерн, но никак не возможность ресолва
prowkan
> К сожалению, чтение документации так и не прояснило, каким образом нужно
> выбирать формат.
Я тоже промучился с Typeless но потом наконец доправил Resolve Depth Buffers
Единственно смотреть что скажет Direct3D12 Debug.
а вообще есть простое соответвие. Я написал утилитные функции облегчающую работу:
DXGI_FORMAT GetDSVResolveFormat(DXGI_FORMAT d3dFormat) { switch ( d3dFormat) { case DXGI_FORMAT_R24G8_TYPELESS: { d3dFormat = DXGI_FORMAT_R24_UNORM_X8_TYPELESS; } break; case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: { d3dFormat = DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS; } break; case DXGI_FORMAT_D24_UNORM_S8_UINT: { d3dFormat = DXGI_FORMAT_R24_UNORM_X8_TYPELESS; } break; default: { } } return d3dFormat; }
prowkan
https://docs.microsoft.com/en-us/windows/win32/api/d3d12/nf-d3d12… etdepthbounds
вот тут чётко прописано
OMSetDepthBounds is an optional feature. Use the CheckFeatureSupport method to determine whether or not this feature is supported by the user-mode driver.