Экспозиция потоковых ресурсов HLSL

Для поддержки потоковых ресурсов в модели шейдера 5 требуется определенный синтаксис HLSL.

Синтаксис HLSL модели шейдера 5 разрешен только на устройствах с поддержкой потоковых ресурсов. Каждый соответствующий метод HLSL для потоковых ресурсов в следующей таблице принимает один (feedback) или два (сначала clamp, а затем feedback) дополнительных необязательных параметра. Например, метод Sample выглядит так:

Sample(sampler, location [, offset [, clamp [, feedback] ] ])

Пример метода Sample — Texture2D.Sample(S,float,int,float,uint).

Параметры offset, clamp и feedback необязательны. Необходимо указать все необязательные параметры вплоть до требуемого в соответствии с правилами C++ касательно аргументов функций по умолчанию. Например, если требуется состояние feedback, необходимо явным образом предоставить параметры offset и clamp методу Sample, даже если логически они не нужны.

Параметр clamp — скалярное значение с плавающей точкой. Литеральное значение clamp=0.0f указывает, что операция прикрепления не выполнена.

Параметр feedback — это переменная uint, которую можно передать встроенной функции опроса доступа к памяти CheckAccessFullyMapped. Значение параметра feedback нельзя изменять или интерпретировать. Но компилятор не предоставляет средств расширенного анализа и диагностики для обнаружения изменений значения.

Вот синтаксис CheckAccessFullyMapped:

bool CheckAccessFullyMapped(in uint FeedbackVar);

CheckAccessFullyMapped интерпретирует значение FeedbackVar и возвращает значение true, если все данные, к которым осуществляется доступ, сопоставлены в ресурсе. В противном случае CheckAccessFullyMapped возвращает значение false.

Если параметр clamp или feedback присутствует, компилятор выдает вариант базовой инструкции. Например, выборка потокового ресурса приводит к созданию инструкции sample_cl_s.

Если параметры clamp и feedback не указаны, компилятор выдает базовую инструкцию, чтобы исключить отклонение от текущего поведения.

Если параметру clamp присвоено значение 0.0f, прикрепление не выполнено. Компилятор драйвера может дополнительно настроить инструкцию под целевое оборудование. Если значением параметра feedback является регистр NULL в инструкции, параметр feedback не используется. Таким образом, компилятор драйвера может дополнительно настроить инструкцию под целевую архитектуру.

Если компилятор HLSL делает логический вывод, что значение параметра clamp — 0.0f, а параметр feedback не используется, компилятор выдает соответствующую базовую инструкцию (например, sample вместо sample_cl_s).

Если доступ к потоковому ресурсу состоит из нескольких инструкций байт-кода, например для структурированных ресурсов, компилятор выполняет статистическое вычисление отдельных значений параметра feedback через операцию ИЛИ, чтобы получить окончательное значение параметра feedback. Таким образом, для такого сложного доступа вы получаете одно значение параметра feedback.

Это сводная таблица методов HLSL, измененных для обеспечения поддержки параметров feedback и clamp. Все эти методы работают с плиточными и не потоковыми ресурсами любых размеров. Не потоковые ресурсы всегда отображаются как полностью сопоставленные.

Объекты HLSL Встроенные методы с параметром feedback (*) — также с параметром clamp

[RW]Texture2D

[RW]Texture2DArray

TextureCUBE

TextureCUBEArray

Gather

GatherRed

GatherGreen

GatherBlue

GatherAlpha

GatherCmp

GatherCmpRed

GatherCmpGreen

GatherCmpBlue

GatherCmpAlpha

[RW]Texture1D

[RW]Texture1DArray

[RW]Texture2D

[RW]Texture2DArray

[RW]Texture3D

TextureCUBE

TextureCUBEArray

Sample*

SampleBias*

SampleCmp*

SampleCmpLevelZero

SampleGrad*

SampleLevel

[RW]Texture1D

[RW]Texture1DArray

[RW]Texture2D

Texture2DMS

[RW]Texture2DArray

Texture2DArrayMS

[RW]Texture3D

[RW]Buffer

[RW]ByteAddressBuffer

[RW]StructuredBuffer

Загрузить

 

Конвейерный доступ к потоковым ресурсам