Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Начиная с Windows 8 графические драйверы могут реализовать минимальные показатели точности скалярных типов данных HLSL с помощью любой точности, большей или равной заданной точности битов. Если код шейдера минимальной точности HLSL используется на оборудовании, реализующем минимальную точность HLSL, вы используете меньше пропускной способности памяти и в результате также используете меньше системной мощности.
Вы можете запросить минимальный уровень поддержки точности, который предоставляет графический драйвер, вызвав ID3D11Device::CheckFeatureSupport со значением D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT. Дополнительные сведения см. в о поддержке минимальной точности HLSL.
- Объявляйте переменные с типами данных минимальной точности
- Тестирование шейдерного кода минимальной точности
- Связанные темы
Объявляйте переменные с минимально возможной точностью типов данных
Чтобы использовать минимальную точность в коде шейдера HLSL, объявите отдельные переменные с такими типами, как min16float (min16float4 для вектора), min16int, min10floatи т. д. При использовании этих переменных код шейдера указывает, что он не требует больше точности, чем указывает переменные. Но оборудование может игнорировать минимальные показатели точности и выполняться в полной 32-разрядной точности. Если код шейдера используется на оборудовании, которое использует минимальную точность, используется меньше пропускной способности памяти, а в результате вы также используете меньше системной мощности, если код шейдера не ожидает больше точности, чем указано.
Вам не нужно создавать несколько шейдеров, некоторые из которых используют минимальную точность, а другие — нет. Вместо этого создайте шейдеры с минимальной точностью, а переменные минимальной точности ведут себя так, как если бы имели полную 32-разрядную точность, если графический драйвер сообщает, что он не поддерживает никакую минимальную точность. Шейдеры HLSL с минимальной точностью не работают на операционных системах раньше чем Windows 8, поэтому, если вы планируете использовать более ранние операционные системы, вам потребуется создать несколько шейдеров, некоторые из которых используют минимальную точность, а другие — нет.
Заметка
Не переключайтесь между различными уровнями точности в шейдере, так как эти типы преобразований являются расточительными и снижают производительность. Исключением является то, что константы шейдера всегда остаются 32-разрядными, однако поставщики могут разрабатывать графическое оборудование, которое может свободно преобразовывать их в любую более низкую точность, которая может быть использована инструкциями HLSL.
С помощью минимальной точности можно управлять точностью вычислений в различных частях кода шейдера.
Правила минимальной точности HLSL похожи на C/C++, где типы в выражении определяют точность операции, а не тип, в конечном итоге записанный.
Тестирование кода шейдера с минимальной точностью
Эталонный растризатор (D3D_DRIVER_TYPE_REFERENCE) дает приблизительное представление о том, как минимальная точность в коде шейдера HLSL ведет себя путем квантизации каждой инструкции HLSL до указанной точности. Это помогает обнаружить код, который может случайно полагаться на более чем минимальную точность. Эталонный растризатор не ускоряется, когда ваш код шейдера HLSL использует минимальную точность, но его можно использовать для проверки правильности выполнения кода. WARP (D3D_DRIVER_TYPE_WARP) не поддерживает использование минимальной точности в коде шейдера HLSL; WARP просто выполняется в полной 32-разрядной точности.
Связанные разделы
-
Руководство по программированию для HLSL