2017-02-20 10 views
0

Мне нужно преобразовать текстуру ID3D11Texture2D типа DXGI_FORMAT_R32G32B32A32_TYPELESS в текстуру типа DXGI_FORMAT_B8G8R8A8_TYPELESS (или любой другой 32-разрядный тип RGBA) эффективно. В основном уменьшает 128 бит на пиксельную текстуру до 32 бит на пиксель. Похоже, ID3D11DeviceContext :: CopyResource-метод не может обрабатывать такое преобразование формата. Должен ли я использовать шейдер для достижения этого? Если да, можно ли использовать шейдер с помощью метода CopyResource или мне нужно настроить полный конвейер рендеринга? Пробовал делать преобразования на процессоре, но он слишком медленный.Преобразование данных RGBA между форматами DXGI

ответ

1

Вообще говоря, самый быстрый способ сделать эти преобразования для использования графического процессора для рендеринга «полноэкранного квадрата» текстуры исходного текста для цели рендеринга целевого формата. Ограничения будут основаны на уровне аппаратных средств Direct3D, для которых поддерживаются форматы целевых форматов. Например, на всех уровнях возможностей с современными драйверами вы можете рассчитывать, что DXGI_FORMAT_B8G8R8A8_UNORM поддерживается как цель рендеринга, но не DXGI_FORMAT_B8G8R8A8_SNORM.

См MSDN и Direct3D Feature Levels

Для CPU на базе запасного варианта для всех возможных преобразований формата DXGI см DirectXTex.