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

Содержание

Слайд 2

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

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

Слайд 3

Outline

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

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

Слайд 4

10 > 9 !

Новый, компактный API
Меньше HRESULT, больше void
Стейт-объекты
Новая модель драйвера
Позволяет значительно

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

Слайд 5

D3D9

Вершинный шейдер

Видеопамять

Текстуры/RT

Текстуры/RT

VB/IB

VB/IB

Сборка примитивов

Растеризация

Пиксельный шейдер

Операции
с буфером кадра

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

Слайд 6

D3D10

Вершинный шейдер

Видеопамять

Сборка примитивов

Растеризация

Пиксельный шейдер

Операции
с буфером кадра

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

Слайд 7

D3D10

Вершинный шейдер

Видеопамять

Сборка примитивов

Растеризация

Пиксельный шейдер

Операции
с буфером кадра

Input Assembler (IA)

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

Слайд 8

D3D10

Вершинный шейдер

Видеопамять

Растеризация

Пиксельный шейдер

Операции
с буфером кадра

Input Assembler (IA)

Геометрический шейдер

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

Слайд 9

D3D10

Вершинный шейдер

Видеопамять

Растеризация

Пиксельный шейдер

Операции
с буфером кадра

Input Assembler (IA)

Геометрический шейдер

Stream Out

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

Слайд 10

D3D10 API

ID3D10Device::IA… ? Input Assembler
ID3D10Device::VS… ? Vertex Shader
ID3D10Device::GS… ? Geometry Shader
ID3D10Device::SO… ?

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

Слайд 11

Забудьте про CapsBits!

Вся функциональность всегда присутствует
Большинство форматов всегда поддерживается
есть исключения ? блендинг

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

Слайд 12

Настройка конвейера D3D10

Настройки конвейера сгруппированы в стейт-объекты
Больше нет SetRenderState(…)
Драйвер может эффективно кэшировать

Настройка конвейера D3D10 Настройки конвейера сгруппированы в стейт-объекты Больше нет SetRenderState(…) Драйвер
состояния конвейера
4096 стейт-объектов каждого типа

ID3D10Device

ID3D10InputLayout

ID3D10RasterizerState

ID3D10DepthStencilState

ID3D10BlendState

ID3D10SamplerState

Слайд 13

Ресурсы D3D10

Буферы
~Последовательный доступ
Элементы могут быть разного типа/размера
Текстуры
Произвольный доступ
Состоят из суб-ресурсов
Тип элементов указывать

Ресурсы D3D10 Буферы ~Последовательный доступ Элементы могут быть разного типа/размера Текстуры Произвольный
необязательно
Виртуализированы OS

ID3D10Buffer

ID3D10Texture1D

ID3D10Texture2D

ID3D10Texture3D

ID3D10TextureCube

ID3D10Resource

Слайд 14

Типы доступа к ресурсам

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

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

Слайд 15

Представления (view)

Позволяют по-разному интерпретировать данные в ресурсах
Рендеринг в VB/IB
Рендеринг в константы шейдера
Использование

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

ID3D10ShaderResourceView

ID3D10RenderTargetView

ID3D10DepthStencilView

Слайд 16

Методы Draw() в D3D10

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

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

Слайд 17

Инстансинг в D3D10

Полноценная поддержка в API
Рендеринг без инстансинга – просто частный случай
Другие

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

Слайд 18

Геометрический шейдер (GS)

Программируемость на этапе “сборки примитивов”
Можно создавать новые примитивы!
Имеет доступ к

Геометрический шейдер (GS) Программируемость на этапе “сборки примитивов” Можно создавать новые примитивы!
соседним примитивам
Может использовать семантику SV_PrimitiveID

0

1

2

3

4

5

0

1

2

3

Triangles with adjacency

Lines with adjacency

Слайд 19

Геометрический шейдер (GS)

[MaxVertexCount(10)]
void GS_Simple(lineadj VSOut In[4], inout TriangleStream Stream)
{
GSOut v;

Stream.Append(v);

Stream.Append(v);

Stream.RestartStrip();

Stream.Append(v);
}

Геометрический шейдер (GS) [MaxVertexCount(10)] void GS_Simple(lineadj VSOut In[4], inout TriangleStream Stream) {

Слайд 20

Примеры использования GS

Генерирование shadow volume “на лету”
Определяем ребра силуэта, генерируем грани
Motion Blur
Считаем

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

Слайд 21

Геометрический шейдер (GS)

Количество выходных атрибутов ограничено
Максимум - 1024 скалярных атрибута в D3D10
Не

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

Слайд 22

Stream Out

Возможность записи результатов работы GS в вершинный буфер
Или VS если GS

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

Слайд 23

Массивы текстур

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

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

Слайд 24

Рендеринг в массив текстур

Массивы текстур могут использоваться как RT через ID3D10RenderTargetView
В GS

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

Слайд 25

Прощай, Fixed Function!

Нет тумана...
...Эмулируем в VS/PS
Нет point-спрайтов...
...Используйте GS для создания геометрии
Нет плоскостей

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

Слайд 26

Предикативный рендеринг

Условное выполнение вызовов Draw()
Без остановки конвейера
... по результату occlusion query
Эффективный occlusion

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

Слайд 27

Предикативный рендеринг

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

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

Слайд 28

Заключение

DX10 – большой шаг вперед в функциональности и гибкости
Начинайте изучать DX10 уже

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

Слайд 29

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

Наши следующие лекции
Имя файла: DX10-–-новые-возможностии-вопросы-производительности.pptx
Количество просмотров: 104
Количество скачиваний: 0