Метод ID3D12GraphicsCommandList5::RSSetShadingRateImage (d3d12.h)
Задает изображение с затенения экранного пространства для заливки с переменной скоростью (VRS). Дополнительные сведения см. в разделе Заливка с переменной скоростью (VRS). Для этого метода требуется поддержка затенения уровня 2 с переменной скоростью (VRS). См . D3D12_FEATURE_DATA_D3D12_OPTIONS6 и D3D12_VARIABLE_SHADING_RATE_TIER.
Синтаксис
void RSSetShadingRateImage(
ID3D12Resource *shadingRateImage
);
Параметры
shadingRateImage
Тип: ID3D12Resource*
Необязательный указатель на ID3D12Resource , представляющий изображение скорости заливки экранного пространства. Если значение РАВНО NULL, результат будет таким же, как и изображение со скоростью заливки, где все значения имеют скорость заливки 1x1.
К этой текстуре должно быть применено D3D12_RESOURCE_STATE_SHADING_RATE_SOURCE состояние.
Размер плитки изображения с затенения можно определить с помощью D3D12_FEATURE_DATA_D3D12_OPTIONS6. Таким образом, размер изображения с затенения должен быть таким:
ceil((float)rtWidth / VRSTileSize), ceil((float)rtHeight / VRSTileSize)
Изображение с частотой заливки должно быть двухd текстурой с одним MIP и форматировать DXGI_FORMAT_R8_UINT. Каждый тексель должен быть значением, соответствующим D3D12_SHADING_RATE. Он должен иметь макет D3D12_TEXTURE_LAYOUT_UNKNOWN и не может быть набором элементов глубины, целевым объектом отрисовки, ресурсом с одновременным доступом или перекрестным адаптером.
Так как (0, 0) — это левая верхняя часть в DirectX, слишком малое или большое изображение с затенения приводит к тому, что в нижнем или правом углу отсутствует область изображения с затенения или изображение расширяется в этих направлениях. При превышении он игнорируется (но по закону), а если изображение слишком малое, все области в нижней и правой части будут иметь скорость заливки по умолчанию 1x1 от изображения (но это не означает, что это конечная скорость затенения). Объединение по-прежнему будет применяться к этому значению по умолчанию 1x1).
Возвращаемое значение
None
Remarks
Чтобы повлиять на изображение со скоростью затенения экрана, необходимо вызвать ID3D12GraphicsCommandList5::RSSetShadingRate , чтобы задать объединители для заливки. Кроме того, если используются сочетания по умолчанию (оба D3D12_SHADING_RATE_COMBINER_PASSTHROUGH), при определении степени детализации затенения экранного пространства игнорируется.
Второй комбинатор, передаваемый в [ID3D12GraphicsCommandList5::RSSetShadingRate], применяется к изображению со скоростью заливки, которая возникает после объединения глобальной скорости заливки и коэффициента затенения по примитиву.
Алгоритм для окончательной скорости затенения определяется
postRasterizerRate = ApplyCombiner(Combiners[0], CommandListShadingRate, Primitive->PrimitiveSpecifiedShadingRate);
finalRate = ApplyCombiner(Combiners[1], postRasterizerRate, ScreenSpaceImage[xy]);
где ApplyCombiner
—
UINT ApplyCombiner(D3D12_SHADING_RATE_COMBINER combiner, UINT a, UINT b)
{
MaxShadingRate = options6.AdditionalShadingRatesSupported ? 4 : 2;
switch (combiner)
{
case D3D12_SHADING_RATE_COMBINER_PASSTHROUGH: // default
return a;
case D3D12_SHADING_RATE_COMBINER_OVERRIDE:
return b;
case D3D12_SHADING_RATE_COMBINER_MAX:
return max(a, b);
case D3D12_SHADING_RATE_COMBINER_MIN:
return min(a, b);
case D3D12_SHADING_RATE_COMBINER_SUM:
return min(MaxShadingRate, a + b);
case default:
return a;
}
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | сборка Windows 10 20348 |
Минимальная версия сервера | сборка Windows 10 20348 |
Верхняя часть | d3d12.h |