Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Nieuporządkowany widok dostępu (UAV) Typd Load (UAV) to możliwość odczytywania cieniowania z UAV z określonym DXGI_FORMAT.
- — omówienie
- Obsługiwane formaty i wywołania interfejsu API
- Używanie typowanych obciążeń UAV z HLSL
- Tematy pokrewne
Przegląd
Widok nieuporządkowanego dostępu (UAV) to widok nieuporządkowanego zasobu dostępu (który może zawierać, tekstury i tablice tekstur, choć bez próbkowania wielokrotnego). Funkcja UAV umożliwia czasowo nieurządkowany dostęp do odczytu/zapisu z wielu wątków. Oznacza to, że ten typ zasobu może być odczytywany/zapisywany jednocześnie przez wiele wątków bez generowania konfliktów pamięci. Ten równoczesny dostęp jest obsługiwany za pomocą Atomic Functions.
D3D12 i D3D11.3 rozszerza listę formatów, których można używać z typowymi obciążeniami UAV.
Obsługiwane formaty i wywołania interfejsu API
Wcześniej następujące trzy formaty obsługiwały typizowane obciążenia UAV i były wymagane dla sprzętu D3D11.0. Są one obsługiwane dla wszystkich sprzętu D3D11.3 i D3D12.
- R32_FLOAT
- R32_UINT
- R32_SINT
Następujące formaty są obsługiwane jako zestaw na sprzęcie D3D12 lub D3D11.3, więc jeśli którykolwiek z nich jest obsługiwany, wszystkie są obsługiwane.
- R32G32B32A32_FLOAT
- R32G32B32A32_UINT
- R32G32B32A32_SINT
- R16G16B16A16_FLOAT
- R16G16B16A16_UINT
- R16G16B16A16_SINT
- R8G8B8A8_UNORM
- R8G8B8A8_UINT
- R8G8B8A8_SINT
- R16_FLOAT
- R16_UINT
- R16_SINT
- R8_UNORM
- R8_UINT
- R8_SINT
Następujące formaty są opcjonalne i indywidualnie obsługiwane w przypadku sprzętu D3D12 i D3D11.3, więc w każdym formacie należy wykonać pojedyncze zapytanie w celu przetestowania obsługi.
- R16G16B16A16_UNORM
- R16G16B16A16_SNORM
- R32G32_FLOAT
- R32G32_UINT
- R32G32_SINT
- R10G10B10A2_UNORM
- R10G10B10A2_UINT
- R11G11B10_FLOAT
- R8G8B8A8_SNORM
- R16G16_FLOAT
- R16G16_UNORM
- R16G16_UINT
- R16G16_SNORM
- R16G16_SINT
- R8G8_UNORM
- R8G8_UINT
- R8G8_SNORM
- 8G8_SINT
- R16_UNORM
- R16_SNORM
- R8_SNORM
- A8_UNORM
- B5G6R5_UNORM
- B5G5R5A1_UNORM
- B4G4R4A4_UNORM
Aby określić obsługę wszelkich dodatkowych formatów, należy wywołać ID3D11Device::CheckFeatureSupport ze strukturą D3D11_FEATURE_DATA_D3D11_OPTIONS2 jako pierwszy parametr. Bit TypedUAVLoadAdditionalFormats
zostanie ustawiony, jeśli jest obsługiwana lista "obsługiwana jako zestaw" powyżej. Wykonaj drugie wywołanie CheckFeatureSupportprzy użyciu struktury D3D11_FEATURE_DATA_FORMAT_SUPPORT2 (sprawdzanie zwróconej struktury względem elementu członkowskiego D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD wyliczenia D3D11_FORMAT_SUPPORT2), aby określić obsługę na liście opcjonalnie obsługiwanych formatów powyżej, na przykład:
D3D11_FEATURE_DATA_D3D11_OPTIONS2 FeatureData;
ZeroMemory(&FeatureData, sizeof(FeatureData));
HRESULT hr = pDevice->CheckFeatureSupport(D3D11_FEATURE_D3D11_OPTIONS2, &FeatureData, sizeof(FeatureData));
if (SUCCEEDED(hr))
{
// TypedUAVLoadAdditionalFormats contains a Boolean that tells you whether the feature is supported or not
if (FeatureData.TypedUAVLoadAdditionalFormats)
{
// Can assume “all-or-nothing” subset is supported (e.g. R32G32B32A32_FLOAT)
// Cannot assume other formats are supported, so we check:
D3D11_FEATURE_DATA_FORMAT_SUPPORT2 FormatSupport;
ZeroMemory(&FormatSupport, sizeof(FormatSupport));
FormatSupport.InFormat = DXGI_FORMAT_R32G32_FLOAT;
hr = pDevice->CheckFeatureSupport(D3D11_FEATURE_FORMAT_SUPPORT2, &FormatSupport, sizeof(FormatSupport));
if (SUCCEEDED(hr) && (FormatSupport.OutFormatSupport2 & D3D11_FORMAT_SUPPORT2_UAV_TYPED_LOAD) != 0)
{
// DXGI_FORMAT_R32G32_FLOAT supports UAV Typed Load!
}
}
}
Używanie typowanych obciążeń UAV z HLSL
W przypadku typowanych niezależnych dostawców oprogramowania flaga HLSL jest D3D_SHADER_REQUIRES_TYPED_UAV_LOAD_ADDITIONAL_FORMATS.
Oto przykładowy kod cieniowania do przetwarzania typizowanego ładowania UAV:
RWTexture2D<float4> uav1;
uint2 coord;
float4 main() : SV_Target
{
return uav1.Load(coord);
}
Tematy pokrewne
-
funkcje Direct3D 11.3
-
model cieniowania 5.1