В D3D9 архитектура драйвера такова, что ресурсы должны быть проверены, когда они используются. Это увеличивает накладные расходы многих вызовов API и является частью причины, по которой вы должны оптимизировать работу с меньшим количеством вызовов API.
Кроме того, на старых платформах Windows (например, Windows XP) драйвер D3D был полностью в режиме ядра, поэтому вызовы API вызывали режим переключения режима пользователя в режим ядра (это не так в Windows Vista , 7 или 8, которые имеют интерфейс пользовательского режима, такой как OpenGL).
В D3D10 ресурсы проверяются только при их создании. Вероятно, потому что D3D10 накладывается поверх WDDM, что сделало переход из полного режима ядра в частично исполняемый режим D3D пользовательского режима. В WDDM, если сбой выполнения D3D, это не вызовет панику ядра (BSOD), поэтому проверка не так важна. Вы не должны быть почти параноиком об этом, когда работаете в пользовательском режиме.
Теперь, что касается производительности между 8-битовым целочисленным и 16-битным fp, этого действительно следует ожидать. Не так много, потому что одно целое, а другое - FP (графические процессоры великолепны с FP), но потому, что он вдвое больше другого. У графических процессоров много пропускной способности памяти, но вы все равно можете повысить производительность, просто используя наименьший тип данных.
Это чистый C++, поэтому не задействовано JIT. Также время, которое занимает операция, очень длинное, о чем сообщает PIX как 898916352 для 8-битного целевого случая визуализации. –
Даже без JIT, если они инициализируют вещи в первый раз (справочные таблицы, случайные числа и т. Д.), Вы можете получить удар производительности. Или, может быть, они вынимают кусок памяти в первый раз, что им не нужно делать при последующих вызовах. Просто пытаясь объяснить это, хотя это может быть реальной проблемой, так что ждите некоторых других ответов и посмотрите, видели ли кто-либо еще эти проблемы. –
Что странно в том, что это происходит каждый кадр ... –