IDirect3D9 :: CreateDevice вызывает исключение FPU - PullRequest
0 голосов
/ 11 мая 2018

Когда я вызываю IDirect3D9 :: CreateDevice, я получаю исключение FPU, и мое приложение падает («деление с плавающей запятой на ноль»).

Это происходит с момента последнего обновления Windows 10 (апрель 2018 года) и ноутбуков с двойнымграфика (NVIDIA + Intel).

Мы нашли временное решение - глобально отключить все исключения FPU в нашем приложении, вызвав Set8087CW ($ 133F) при запуске нашего приложения.

I 'Я уверен, что наш код, который работает с DirectX, является правильным и нет ошибок в параметрах, которые я передаю CreateDevice ().Также я передаю флаг D3DCREATE_FPU_PRESERVE CreateDevice ().

Эта проблема не возникала ни с какой предыдущей версией Windows 10 или с Windows 8/7 / Vista / XP.Также эта проблема не возникает, если вручную выбрать видеокарту Intel для нашего приложения вместо NVIDIA.

Наше приложение написано на Delphi (Pascal).

1 Ответ

0 голосов
/ 18 мая 2018

В документации для D3DCREATE_FPU_PRESERVE действительно говорится, что " Части Direct3D предполагают, что исключения с плавающей запятой замаскированы; снятие маски с этих исключений может привести к неопределенному поведению ". Я полагаю, это означает, что вам повезло в прошлом; это один из тех случаев, когда «неопределенный» означает «раньше работал, а теперь нет».

Исключения с плавающей точкой в основном приводят к любой операции, которая выдает NaN или бесконечное значение из конечных значений (наиболее распространенным является деление на ноль).

Если это происходит на одной комбинации драйвера / графического процессора, но не на другой, вполне вероятно, что драйверы / графические процессоры округляются по-разному в определенных угловых случаях. Следите за значениями ребер - например, очень маленькими значениями, умноженными на очень большие. Например, (x * 1e10 + y) / 1e10 может привести к нулю в некоторых сценариях, что может привести к появлению ошибок деления на ноль. Этот вид отладки может быть довольно раздражающим, но является частью реальности работы с различными графических процессоров.

...