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


Уязвимость ресурсов с плитками HLSL

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

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

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

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

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

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

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

Ниже приведен синтаксис CheckAccessFullyMapped:

bool CheckAccessFullyMapped(in uint FeedbackVar);

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

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

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

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

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

объекты HLSL Встроенные методы с параметром обратной связи (*) — также имеет параметр зажима
[RW]Текстура2D
[RW]Texture2DArray
TextureCUBE
TextureCUBEArray
Собирать
Сборред
Сборgreen
СборBlue
СборAlpha
СборCmp
СборCmpRed
СборCmpGreen
СборCmpBlue
СборCmpAlpha
[RW]Текстура1D
[RW]Texture1DArray
[RW]Текстура2D
[RW]Texture2DArray
[RW]Текстура3D
TextureCUBE
TextureCUBEArray
Образец*
SampleBias*
SampleCmp*
SampleCmpLevelZero
SampleGrad*
SampleLevel
[RW]Текстура1D
[RW]Texture1DArray
[RW]Текстура2D
Texture2DMS
[RW]Texture2DArray
Texture2DArrayMS
[RW]Текстура3D
[RW]Буфер
[RW]ByteAddressBuffer
[RW]StructuredBuffer
Груз

доступ к плиткам ресурсов