Šejdrem

Chtěl jsem si zahrát novou komunitní modifikaci na Portal 2 s názvem „Portal: Revolution“, ale ukázalo se, že navzdory enginu z roku 2011 se jí nechce běžet na Windows 8.1. Čím to je? Inu, zdá se, že shaderapidx11.dll používá při inicializaci swapchainu příznak DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT, který je podporován výhradně na flip-model swapchainech (aneb se swap-effectem typu DXGI_SWAP_EFFECT_FLIP*). Ten je na Windows 8.1 ovšem podporován pouze jako DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL, zatímco hra obvykle pracuje s DXGI_SWAP_EFFECT_FLIP_DISCARD. Engine o tomhle ví, a tak v případě, kdy tento swap-effect není podporován, přepne do „starého“ režimu DXGI_SWAP_EFFECT_DISCARD. Jenže bez flip-modelu záhy přestane fungovat ten proklatý waitable object, což už si programátoři nezkontrolovali, a tak hra na starších OS zbytečně padá. Naštěstí ale stačilo při kontrole podpory příznaku místo IID DXGI 1.3 injektovat 1.5, což sice není úplně správně, ale má to za důsledek, že se aktivuje pouze na Windows 10 a novějších. A všechno běží, jak má!

Edit: to nejlepší nakonec – napsal jsem vývojářům enginu, že tam tohle ouvej mají, a už to opravili. Kéž by takovýhle byl třeba Google s Androidem!