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


Сопоставление текстур по умолчанию

Использование сопоставления текстур по умолчанию сокращает объем копирования и использования памяти при совместном использовании данных изображений между GPU и ЦП. Однако его следует использовать только в определенных ситуациях. Стандартный макет swizzle позволяет избежать копирования или перевертывания данных в нескольких макетах.

Общие сведения

Сопоставление текстур по умолчанию не должно быть первым выбором для разработчиков. Разработчикам следует сначала использовать дискретный графический процессор (т. е. не иметь доступа к ЦП для большинства текстур и отправлять их с помощью CopySubresourceRegion1). Но в некоторых случаях ЦП и GPU могут так часто взаимодействовать с одними и теми же данными, что сопоставление текстур по умолчанию становится полезным для экономии электроэнергии или ускорения конкретного проектирования на определенных адаптерах или архитектурах. Приложения должны обнаруживать эти случаи и оптимизировать ненужные копии.

В D3D11.3 текстуры, созданные с помощью D3D11_TEXTURE_LAYOUT_UNDEFINED (один из элементов перечисления D3D11_TEXTURE_LAYOUT ) и отсутствие доступа к ЦП, являются наиболее эффективными для частой отрисовки и выборки GPU. При тестировании производительности эти текстуры следует сравнивать с D3D11_TEXTURE_LAYOUT_UNDEFINED с доступом к ЦП, D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE с доступом к ЦП и D3D11_TEXTURE_LAYOUT_ROW_MAJOR для поддержки нескольких адаптеров.

Использование D3D11_TEXTURE_LAYOUT_UNDEFINED с доступом к ЦП позволяет использовать методы WriteToSubresource, ReadFromSubresource, Map (предварительное отключение доступа приложения к указателю) и Unmap; но может пожертвовать эффективностью доступа к GPU. Использование D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE с доступом к ЦП позволяет использовать WriteToSubresource, ReadFromSubresource, Map (который возвращает допустимый указатель на приложение) и Отменить сопоставление. Он также может пожертвовать эффективностью доступа к GPU более чем D3D11_TEXTURE_LAYOUT_UNDEFINED с доступом к ЦП.

Как правило, приложения должны создавать большинство текстур, доступных только для GPU, и с D3D11_TEXTURE_LAYOUT_UNDEFINED.

До использования функции текстур по умолчанию для сопоставления существовал только один стандартизированный макет для многомерных данных: "линейный", также известный как "основной строк". Приложения должны избегать USAGE_STAGING и USAGE_DYNAMIC текстур, если доступно сопоставление по умолчанию. Текстуры USAGE_STAGING и USAGE_DYNAMIC используют линейный макет.

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

Обратите внимание, что этот стандартный swizzle является аппаратной функцией и может поддерживаться не всеми GPU.

API D3D11.3

В отличие от D3D12, D3D11.3 по умолчанию не поддерживает сопоставление текстур, поэтому необходимо запрашивать D3D11_FEATURE_DATA_D3D11_OPTIONS2. Стандартный swizzle также необходимо запросить с помощью вызова ID3D11Device::CheckFeatureSupport и проверки StandardSwizzle64KBSupported поля D3D11_FEATURE_DATA_D3D11_OPTIONS2.

Следующие API-интерфейсы ссылались на сопоставление текстур:

Перечисления

Структуры

  • D3D11_TEXTURE2D_DESC1 : описывает двухd-текстуру. Обратите внимание на вспомогательную структуру CD3D11_TEXTURE2D_DESC1.
  • D3D11_TEXTURE3D_DESC1 : описывает трехмерную текстуру. Обратите внимание на вспомогательную структуру CD3D11_TEXTURE3D_DESC1.

Методы

Функции Direct3D 11.3