'

DX10 – новые возможности и вопросы производительности

Понравилась презентация – покажи это...





Слайд 0

DX10 – новые возможности и вопросы производительности Юрий Уральский, NVIDIA


Слайд 1

DX10 Много новой функциональности Не только геометрические шейдеры Возможность перестроить ваш графический движок Мотивация к созданию новых эффектов


Слайд 2

Outline D3D10 API Ресурсы и представления Инстансинг Геометрические шейдеры и stream out Массивы текстур и другие возможности


Слайд 3

10 > 9 ! Новый, компактный API Меньше HRESULT, больше void Стейт-объекты Новая модель драйвера Позволяет значительно сократить CPU overhead Виртуализация ресурсов Больше нет lost devices! Новый уровень программируемости Унифицированные шейдеры (SM 4.0)


Слайд 4

D3D9 Вершинный шейдер Видеопамять Текстуры/RT Текстуры/RT VB/IB VB/IB Сборка примитивов Растеризация Пиксельный шейдер Операции с буфером кадра


Слайд 5

D3D10 Вершинный шейдер Видеопамять Сборка примитивов Растеризация Пиксельный шейдер Операции с буфером кадра


Слайд 6

D3D10 Вершинный шейдер Видеопамять Сборка примитивов Растеризация Пиксельный шейдер Операции с буфером кадра Input Assembler (IA)


Слайд 7

D3D10 Вершинный шейдер Видеопамять Растеризация Пиксельный шейдер Операции с буфером кадра Input Assembler (IA) Геометрический шейдер


Слайд 8

D3D10 Вершинный шейдер Видеопамять Растеризация Пиксельный шейдер Операции с буфером кадра Input Assembler (IA) Геометрический шейдер Stream Out


Слайд 9

D3D10 API ID3D10Device::IA… e Input Assembler ID3D10Device::VS… e Vertex Shader ID3D10Device::GS… e Geometry Shader ID3D10Device::SO… e Stream Output ID3D10Device::RS… e Rasterizer Stage ID3D10Device::PS… e Pixel Shader ID3D10Device::OM… e Output Merger


Слайд 10

Забудьте про CapsBits! Вся функциональность всегда присутствует Большинство форматов всегда поддерживается есть исключения e блендинг RGB32F Поддержка форматов проверяется вызовом ID3D10Device::CheckFormatSupport


Слайд 11

Настройка конвейера D3D10 Настройки конвейера сгруппированы в стейт-объекты Больше нет SetRenderState(…) Драйвер может эффективно кэшировать состояния конвейера 4096 стейт-объектов каждого типа ID3D10Device ID3D10InputLayout ID3D10RasterizerState ID3D10DepthStencilState ID3D10BlendState ID3D10SamplerState


Слайд 12

Ресурсы D3D10 Буферы ~Последовательный доступ Элементы могут быть разного типа/размера Текстуры Произвольный доступ Состоят из суб-ресурсов Тип элементов указывать необязательно Виртуализированы OS ID3D10Buffer ID3D10Texture1D ID3D10Texture2D ID3D10Texture3D ID3D10TextureCube ID3D10Resource


Слайд 13

Типы доступа к ресурсам D3D10_USAGE_DEFAULT Обновляется редко, маппинг невозможен D3D10_USAGE_DYNAMIC Обновляется часто, CPU имеет прямой доступ D3D10_USAGE_IMMUTABLE Никогда не обновляется D3D10_USAGE_STAGING Используется для получения данных из GPU


Слайд 14

Представления (view) Позволяют по-разному интерпретировать данные в ресурсах Рендеринг в VB/IB Рендеринг в константы шейдера Использование stencil-буфера как текстуры Позволяют получить доступ к суб-ресурсам Рендеринг в отдельные mip-уровни ID3D10ShaderResourceView ID3D10RenderTargetView ID3D10DepthStencilView


Слайд 15

Методы Draw() в D3D10 Draw(…) DrawInstanced(…) DrawIndexed(…) DrawIndexedInstanced(…) DrawAuto(…) Используется вместе с StreamOut


Слайд 16

Инстансинг в D3D10 Полноценная поддержка в API Рендеринг без инстансинга – просто частный случай Другие возможности D3D10 делают инстансинг еще более полезным Геометрические шейдеры Массивы текстур Stream Out Instance ID


Слайд 17

Геометрический шейдер (GS) Программируемость на этапе “сборки примитивов” Можно создавать новые примитивы! Имеет доступ к соседним примитивам Может использовать семантику SV_PrimitiveID 0 1 2 3 4 5 0 1 2 3 Triangles with adjacency Lines with adjacency


Слайд 18

Геометрический шейдер (GS) [MaxVertexCount(10)] void GS_Simple(lineadj VSOut In[4], inout TriangleStream<GSOut> Stream) { GSOut v; … Stream.Append(v); … Stream.Append(v); … Stream.RestartStrip(); … Stream.Append(v); }


Слайд 19

Примеры использования GS Генерирование shadow volume “на лету” Определяем ребра силуэта, генерируем грани Motion Blur Считаем локальные скорости, генерируем дополнительную геометрию Изо-поверхности на GPU GDC’06, “Practical Metaballs and Isosurfaces”


Слайд 20

Геометрический шейдер (GS) Количество выходных атрибутов ограничено Максимум - 1024 скалярных атрибута в D3D10 Не используйте для тесселяции! Старайтесь не использовать большие значения MaxVertexCount


Слайд 21

Stream Out Возможность записи результатов работы GS в вершинный буфер Или VS если GS отсутствует Всегда выводятся списки примитивов Дает возможность повторно использовать результаты работы GS/VS


Слайд 22

Массивы текстур Могут быть динамически индексированы из шейдеров Текстуры для инстанцируемых объектов SV_InstanceID можно использовать в качестве индекса


Слайд 23

Рендеринг в массив текстур Массивы текстур могут использоваться как RT через ID3D10RenderTargetView В GS переменная с семантикой SV_RenderTargetArrayIndex определяет индекс render-текстуры в массиве Можно использовать для рендеринга в cubemap в одном прохоже Не то же самое, что MRT! Каждый примитив из GS проходит растеризацию и PS


Слайд 24

Прощай, Fixed Function! Нет тумана... ...Эмулируем в VS/PS Нет point-спрайтов... ...Используйте GS для создания геометрии Нет плоскостей отсечения... ...Используйте семантику SV_ClipDistance[n] в VS/GS Нет альфа теста! ...Используйте инструкцию clip() в пиксельном шейдере См. пример FixedFuncEMU в DX10 SDK


Слайд 25

Предикативный рендеринг Условное выполнение вызовов Draw() Без остановки конвейера ... по результату occlusion query Эффективный occlusion culling ... при переполнении буфера stream out


Слайд 26

Предикативный рендеринг m_pPredicateQuery->Begin(); //… // Здесь рисуем простую геометрию //… m_pPredicateQuery->End(NULL); pD3D10Device->SetPredication(m_pPredicateQuery, FALSE); //… // Здесь рисуем сложную геометрию //… // отключаем предикативный рендеринг pD3D10Device->SetPredication(NULL, FALSE);


Слайд 27

Заключение DX10 – большой шаг вперед в функциональности и гибкости Начинайте изучать DX10 уже сегодня! Документация/примеры в февральском DX9 SDK


Слайд 28

Наши следующие лекции


Слайд 29

Есть идеи? Пишите - yuralsky@nvidia.com !


×

HTML:





Ссылка: