Метод ID3D12GraphicsCommandList1::SetSamplePositions (d3d12.h)
Этот метод настраивает образцы позиций, используемые для последующих операций рисования, копирования, разрешения и аналогичных операций.
Синтаксис
void SetSamplePositions(
[in] UINT NumSamplesPerPixel,
[in] UINT NumPixels,
[in] D3D12_SAMPLE_POSITION *pSamplePositions
);
Параметры
[in] NumSamplesPerPixel
Тип: UINT
SAL: In
Указывает количество выборок для каждого пикселя. Это значение может быть равно 1, 2, 4, 8 или 16, в противном случае вызов SetSamplePosition будет удален. Количество выборок должно соответствовать количеству выборок, настроенным в PSO во время рисования, в противном случае поведение не определено.
[in] NumPixels
Тип: UINT
SAL: In
Указывает количество пикселей, для которых указываются образцы шаблонов. Это значение может быть равно 1 или 4, в противном случае вызов SetSamplePosition будет удален. Значение 1 настраивает один образец шаблона, который будет использоваться для каждого пикселя; Значение 4 настраивает отдельные образцы шаблонов для каждого пикселя в сетке 2x2 пикселей, которая повторяется в пространстве целевого объекта отрисовки или окна просмотра, выровненном по четным координатам.
Обратите внимание, что максимальное число объединенных выборок не может превышать 16, в противном случае вызов будет удален. Если numPixels имеет значение 4, NumSamplesPerPixel может указать не более 4 выборок.
[in] pSamplePositions
Тип: D3D12_SAMPLE_POSITION*
SAL: In_reads(NumSamplesPerPixel*NumPixels)
Задает массив элементов D3D12_SAMPLE_POSITION. Размер массива — NumPixels * NumSamplesPerPixel. Если numPixels имеет значение 4, то первая группа позиций выборки соответствует верхнему левому пикселю в сетке 2x2 пикселей; Следующая группа позиций выборки соответствует правому верхнему пикселю, следующая группа — левому нижнему пикселю, а последняя — нижнему правому пикселю.
Если во время отрисовки используется интерполяция центроидов, приоритет выборки определяется порядком позиций для каждого пикселя. То есть в качестве расположения выборки центроида выбирается первая охваченная выборка в указанном порядке.
Возвращаемое значение
None
Remarks
Операционная семантика позиций выборки определяется различными операциями рисования, копирования, разрешения и другими операциями, которые могут выполняться.
CommandList: При отсутствии каких-либо предыдущих вызовов SetSamplePositions в CommandList примеры принимают позицию по умолчанию на основе объекта состояния конвейера (PSO). Позиции по умолчанию определяются либо SAMPLE_DESC частью PSO, если она присутствует, либо стандартными позициями выборки, если для RASTERIZER_DESC части PSO параметр ForcedSampleCount имеет значение больше 0.
После вызова SetSamplePosition последующие вызовы draw должны использовать PSO, который указывает соответствующее число выборок с использованием SAMPLE_DESC части PSO или ForcedSampleCount в RASTERIZER_DESC части PSO.
Метод SetSamplePositions можно вызывать только в графическом commandList. Он не может быть вызван в пакете; Пакеты наследуют пример состояния позиции из вызывающего CommandList и не изменяют его.
Вызов Метода SetSamplePositions(0, 0, NULL) возвращает значения по умолчанию для позиций образца.
Очистить RenderTarget: Позиции примеров игнорируются при очистке целевого объекта отрисовки.
Clear DepthStencil: При очистке глубинной части поверхности трафарета глубины или любой ее области позиции выборки должны быть заданы так, чтобы они соответствовали позициям будущей отрисовки в очищенной поверхности или области; содержимое любых неясных регионов, созданных с использованием различных позиций выборки, становится неопределенным.
При очистке части трафарета поверхности трафарета или любой ее области позиции образца игнорируются.
Рисование в RenderTarget: При рисовании в целевом объекте отрисовки позиции примеров можно изменять для каждого вызова draw, даже если рисование в области, перекрывающей предыдущие вызовы draw. Текущие позиции выборок определяют операционную семантику каждого вызова draw, а образцы взяты из сохраненного содержимого целевого объекта отрисовки, даже если содержимое было создано с использованием разных позиций выборки.
Рисование с помощью DepthStencil: При рисовании на поверхности трафарета глубины (для чтения или записи) или в любой ее области позиции образца должны быть заданы так, чтобы они соответствовали тем, которые использовались для очистки затронутой области ранее. Чтобы использовать другую позицию выборки, необходимо сначала очистить целевой регион. Пиксели за пределами ясной области не затрагиваются.
Оборудование может хранить часть глубины или поверхность трафарета глубины в виде уравнений плоскости и оценивать их для получения значений глубины, когда приложение выдает чтение. Для поддержки программируемых позиций выборки на глубине поверхности трафарета требуется только средство растеризатора и слияния выходных данных. Любое другое чтение или запись части глубины, которая была отрисовывается с заданными примерами позиций, может игнорировать их и вместо этого выборку в стандартных позициях.
Разрешение RenderTarget: При разрешении целевого объекта отрисовки или любой его области позиции образца игнорируются; эти API работают только с сохраненными значениями цвета.
Разрешение depthStencil: При разрешении части глубины поверхности трафарета глубины или любой ее области позиции выборки должны быть заданы так, чтобы они соответствовали позициям предыдущей отрисовки для разрешенной поверхности или области. Чтобы использовать другую позицию выборки, необходимо сначала очистить целевой регион.
При разрешении части трафарета поверхности трафарета глубины или любой ее области позиции образца игнорируются; разрешение набора элементов работает только с сохраненными значениями набора элементов.
Копировать RenderTarget: При копировании из целевого объекта отрисовки позиции образца игнорируются независимо от того, является ли он полной или частичной копией.
Copy DepthStencil (full subresource): При копировании полного подресурса из поверхности трафарета глубины позиции выборки должны быть заданы в соответствии с позициями образца, используемыми для создания исходной поверхности. Чтобы использовать другую позицию выборки, необходимо сначала очистить целевой регион.
На некоторых аппаратных свойствах исходной поверхности (таких как сохраненные уравнения плоскости для значений глубины) перенос в место назначения. Таким образом, если впоследствии отрисовывается область назначения, позиции образца, изначально использовавшиеся для создания исходного содержимого, должны использоваться с целевой поверхностью. Api требует этого на всем оборудовании для согласованности, даже если он может применяться только к некоторым.
Copy DepthStencil (частичный подресурс): При копировании частичного подресурса из поверхности трафарета глубины позиции выборки должны быть заданы в соответствии с позициями выборки, используемыми для создания исходной поверхности, аналогично копированию полного подресурса. Однако если содержимое затронутых целевых подресурсов только частично охватывается копией, содержимое обнаруженной части в этих подресурсах становится неопределенным, если только все они не были созданы с использованием тех же позиций образца, что и источник копирования. Чтобы использовать другую позицию выборки, необходимо сначала очистить целевой регион.
При копировании частичного подресурса из части трафарета поверхности трафарета глубины образец пропускается. Не имеет значения, какие позиции образцов использовались для создания содержимого для любых других областей буфера назначения, не охваченных копией, — это содержимое остается действительным.
Примеры шейдеровПоставка: Встроенная функция HLSL SamplePos не знает о программируемых положениях образца, а результаты, возвращаемые шейдерам, вызывающим это на поверхности, отображаемой с программируемыми позициями, не определено. При необходимости приложения должны передавать координаты в свой шейдер вручную. Аналогичным образом оценка атрибутов по индексу выборки не определена с помощью программируемых позиций выборки.
Переход из состояния DEPTH_READ или DEPTH_WRITE: Если подресурс в состоянии DEPTH_READ или DEPTH_WRITE переходит в любое другое состояние, включая COPY_SOURCE или RESOLVE_SOURCE, может потребоваться распаковка поверхности некоторым оборудованием. Таким образом, позиции образца должны быть заданы в списке команд, чтобы они соответствовали тем, которые использовались для создания содержимого в исходной области. Кроме того, для любых последующих переходов поверхности, в то время как в ней остаются те же данные глубины, позиции выборки должны по-прежнему соответствовать значениям, заданным в списке команд. Чтобы использовать другую позицию выборки, необходимо сначала очистить целевой регион.
Если приложению требуется свести к минимуму распаковку области, когда требуется использовать только часть, или просто для сохранения сжатия, можно вызвать ResolveSubresourceRegion() в режиме DECOMPRESS с заданным прямоугольником. При этом будет распаковка только соответствующей области в отдельный ресурс, оставив источник нетронутым на некотором оборудовании, хотя на другом оборудовании даже исходная область распаковка. Затем отдельный явно распакованный ресурс можно перевести в требуемое состояние (например, SHADER_RESOURCE).
Переход из RENDER_TARGET состояния: Если подресурс в состоянии RENDER_TARGET переключен на что-либо, кроме COPY_SOURCE или RESOLVE_SOURCE, некоторые реализации могут потребовать распаковки поверхности. Эта распаковка не зависит от позиций выборки.
Если приложению требуется свести к минимуму распаковку области, когда требуется использовать только часть, или просто для сохранения сжатия, можно вызвать ResolveSubresourceRegion() в режиме DECOMPRESS с заданным прямоугольником. При этом будет распаковка только соответствующей области в отдельный ресурс, оставив источник нетронутым на некотором оборудовании, хотя на другом оборудовании даже исходная область распаковка. Затем отдельный явно распакованный ресурс можно перевести в требуемое состояние (например, SHADER_RESOURCE).
Требования
Требование | Значение |
---|---|
Целевая платформа | Windows |
Header | d3d12.h |
Библиотека | D3d12.lib |
DLL | D3d12.dll |