Указанное шейдером эталонное значение набора элементов (графика Direct3D 12)

Включение пиксельных шейдеров для вывода эталонного значения трафарета вместо использования указанного в API элемента управления обеспечивает очень точный детализированный контроль над операциями набора элементов.

Значение ссылки на набор элементов обычно указывается с помощью метода ID3D12GraphicsCommandList::OMSetStencilRef . Этот метод задает ссылочное значение трафарета на уровне детализации для каждого рисования. Однако это значение может быть перезаписано пиксельным шейдером.

Эта функция D3D12 (и D3D11.3) позволяет разработчикам считывать и использовать эталонное значение набора элементов (SV_StencilRef), которое выводится из пиксельного шейдера, обеспечивая детализацию для каждого пикселя или выборки.

Указанное значение шейдера заменяет для этого вызова значение ссылки, указанное API. Это означает, что изменение влияет как на тест набора элементов, так и на то, когда операция набора элементов D3D12_STENCIL_OP_REPLACE (один член D3D12_STENCIL_OP) используется для записи ссылочного значения в буфер набора элементов.

Эта функция является необязательной в D3D12 и D3D11.3. Чтобы проверить его поддержку, проверка логическое поле PSSpecifiedStencilRefSupportedD3D12_FEATURE_DATA_D3D12_OPTIONS с помощью CheckFeatureSupport.

Ниже приведен пример использования SV_StencilRef в пиксельном шейдере:

uint main2(float4 c : COORD) : SV_StencilRef
{
    return uint(c.x);
}

Отрисовка

Привязка ресурсов в HLSL

Модель шейдера 5.1

Определение корневых подписей в HLSL