Поделиться через


Метод 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

См. также раздел

Variable-Rate Shading (VRS)