Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Ресурсы — это основные элементы вашей сцены. Они содержат большую часть данных, которые Direct3D использует для интерпретации и отрисовки сцены. Ресурсы — это области в памяти, к которым можно получить доступ конвейера Direct3D. Ресурсы содержат следующие типы данных: геометрия, текстуры, данные шейдера. В этом разделе представлены ресурсы Direct3D, такие как буферы и текстуры.
Вы можете создавать ресурсы, строго типизированные или нетипизированные; вы можете контролировать, имеют ли ресурсы доступ на чтение и запись; ресурсы можно сделать доступными только для ЦП, GPU или обоих. Для каждого этапа конвейера может быть активно до 128 ресурсов.
Direct3D гарантирует возврат нуля для любого ресурса, доступ к которому осуществляется вне границ.
Жизненный цикл ресурса Direct3D:
- Создайте ресурс с помощью одного из методов создания интерфейса ID3D11Device.
- Привязать ресурс к конвейеру с помощью контекста и одного из методов набора интерфейсаID3D11DeviceContext.
- Освободить ресурс путем вызова метода Release интерфейса ресурса.
В этом разделе содержатся следующие разделы:
Сильная и слабая типизация
Существует два способа полностью указать макет ресурса (или объем памяти):
- Типизированный — полностью укажите тип при создании ресурса.
- Бестипный — полностью укажите тип, когда ресурс привязан к конвейеру.
Создание полностью типизированного ресурса ограничивает ресурс форматом, с которым он был создан. Это позволяет среде выполнения оптимизировать доступ, особенно если ресурс создается с флагами, указывающими на то, что он не может быть сопоставлен приложением. Ресурсы, созданные с определенным типом, не могут быть переопределены с помощью механизма представления, если только ресурс не был создан с использованием флага D3D10_DDI_BIND_PRESENT. Если установлен флаг D3D10_DDI_BIND_PRESENT, то представления целей рендеринга или ресурсов шейдера могут быть созданы на этих ресурсах с помощью любого полностью типизированного элемента из соответствующего семейства, даже если исходный ресурс был создан как полностью типизированный.
В меньшем типе ресурсов тип данных неизвестен при первом создании ресурса. Приложение должно выбрать из доступных бессимвольных форматов (см. DXGI_FORMAT). Необходимо указать размер памяти, который следует выделить, и нужно ли среде выполнения создавать подтексты в MIP-карте. Однако точный формат данных (будет ли память интерпретирована как целые числа, значения с плавающей запятой, целые числа без знака и т. д.) не определяется, пока ресурс не привязан к конвейеру с представлением ресурсов. Так как формат текстуры остается гибким, пока текстура не привязана к конвейеру, ресурс называется слабо типизированным хранилищем. Слабо типизированное хранилище имеет преимущество, что оно может быть повторно использовано или переосмыслено в другом формате, если количество компонентов и количество битов каждого компонента совпадают в обоих форматах.
Один ресурс может быть привязан к нескольким стадиям конвейера, если на каждой из них есть уникальное представление, которое полностью определяет форматы на каждой позиции. Например, ресурс, созданный с помощью формата DXGI_FORMAT_R32G32B32A32_TYPELESS, можно использовать в качестве DXGI_FORMAT_R32G32B32A32_FLOAT и DXGI_FORMAT_R32G32B32A32_UINT одновременно в разных расположениях конвейера.
Представления ресурсов
Ресурсы можно хранить в форматах памяти общего назначения, чтобы их можно было совместно использовать на нескольких этапах конвейера. Этап конвейера интерпретирует данные ресурсов с помощью представления. Представление ресурсов концептуально похоже на приведение данных ресурса, чтобы его можно было использовать в определенном контексте.
Представление можно использовать с ресурсом, не имеющим типа. То есть можно создать ресурс во время компиляции и объявить тип данных, когда ресурс привязан к конвейеру. Представление, созданное для ресурса без типа, всегда имеет одинаковое количество битов на компонент; способ интерпретации данных зависит от указанного формата. Указанный формат должен принадлежать тому же семейству, что и не типизированный формат, используемый при создании ресурса. Например, ресурс, созданный с использованием формата R8G8B8A8_TYPELESS, нельзя рассматривать как ресурс R32_FLOAT, даже если оба формата могут быть одинаковыми в памяти.
Представление также предоставляет другие возможности, такие как возможность чтения поверхностей глубины и набора элементов в шейдере, создания динамической карты куба в одном проходе и отрисовки одновременно на нескольких срезах тома.
Интерфейс ресурсов | Описание |
---|---|
ID3D11DepthStencilView | Доступ к ресурсу текстуры во время тестирования глубины и трафарета. |
ID3D11RenderTargetView | Доступ к ресурсу текстуры, используемому в качестве целевого объекта отрисовки. |
ID3D11ShaderResourceView | Доступ к ресурсу шейдера, например к буферу констант, буферу текстуры, текстуре или образцу. |
ID3D11UnorderedAccessView | Доступ к неупорядоченным ресурсам с помощью шейдера пикселей или шейдера вычислений. |
Необработанные представления буферов
Можно рассматривать необработанный буфер, который также можно назвать буфером байтового адреса , как пакет битов, к которому вы хотите получить необработанный доступ. Это буфер, к которому удобно получать доступ через наборы от одного до четырех безтиповых 32-разрядных адресных единиц. Вы указываете, что требуется необработанный доступ к буферу (или необработанное представление буфера) при вызове одного из следующих методов для создания представления к буферу:
- Чтобы создать представление ресурсов шейдера (SRV) в буфер, вызовите ID3D11Device::CreateShaderResourceView с флагом D3D11_BUFFEREX_SRV_FLAG_RAW. Этот флаг указывается в элементе флагов структуры D3D11_BUFFEREX_SRV. Вы устанавливаете D3D11_BUFFEREX_SRV в элементе BufferEx структуры D3D11_SHADER_RESOURCE_VIEW_DESC, на которую указывает параметр pDesc функции ID3D11Device::CreateShaderResourceView. Вы также задаете значение D3D11_SRV_DIMENSION_BUFFEREX в элементе ViewDimension элемента D3D11_SHADER_RESOURCE_VIEW_DESC, чтобы указать, что SRV является необработанным представлением.
- Чтобы создать неупорядоченное представление доступа (UAV) в буфер, вызовите ID3D11Device::CreateUnorderedAccessView с флагом D3D11_BUFFER_UAV_FLAG_RAW. Этот флаг указывается в элементе Flags структуры D3D11_BUFFER_UAV. Вы устанавливаете D3D11_BUFFER_UAV в элемент буфера члена D3D11_UNORDERED_ACCESS_VIEW_DESC структуры, к которой параметр pDesc функции ID3D11Device::CreateUnorderedAccessView указывает. Вы также задаете значение D3D11_UAV_DIMENSION_BUFFER в элементе ViewDimension элемента D3D11_UNORDERED_ACCESS_VIEW_DESC, чтобы указать, что UAV является необработанным представлением.
При работе с необработанными буферами можно использовать ByteAddressBuffer и RWByteAddressBuffer типы объектов из HLSL.
Чтобы создать необработанное представление для буфера, необходимо сначала вызвать ID3D11Device::CreateBuffer с флагом D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS, чтобы создать базовый ресурс буфера. Этот флаг указывается в элементе MiscFlags структуры D3D11_BUFFER_DESC, к которой параметр ID3D11Device::CreateBuffer точек. Вы не можете объединить флаг D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS с D3D11_RESOURCE_MISC_BUFFER_STRUCTURED. Кроме того, если указать D3D11_BIND_CONSTANT_BUFFER в BindFlagsD3D11_BUFFER_DESC, нельзя также указать D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS в MiscFlags. Это не ограничение только необработанных представлений, так как буферы констант уже имеют ограничение, которое невозможно объединить с любым другим представлением.
Кроме предыдущих недопустимых случаев, при создании буфера с D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS, вы не ограничены в функциональных возможностях по сравнению с неиспользованием D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS. То есть вы можете использовать такой буфер для опосредованного доступа различными способами, которые возможны с Direct3D. Если указать флаг D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS, вы просто расширяете доступные возможности.
Связанные разделы