芭樂永生

2015年3月15日 星期日

前 nVidia 驅動程式開發人員解釋

http://www.gamedev.net/topic/666419-what-are-your-opinions-on-dx12vulkanmantle/#entry5215019
--
1.被遊戲公司ㄎㄅ說效能不好, 結果流程是錯的, 或寫出超爛的 shader, 請顯卡公司幫忙優化.
2.驅動程式已經達到 100 萬行, 尤其是 D3D9 的 Clear.
3.已經是多線程, 遊戲在繪圖上再用多線程是沒意義.
4.SLI 是超級複雜的功能. 跟 1 和 2 點相關.
--
AMD Mantle 由 DICE 的開發人員制定的, 難怪第一個使用.
Khronos Vulkan 看到 Mantle 出現, 由 Unity, Epic, Valve 聯合制定.
Apple Metal 是 D3D11 超級簡化版

然後都會說會把這寫 API 合併到 OpenGL 喔, 這是什麼意思呢?
簡直是個災難, OpenGL 就像個垃圾場一樣, 什麼東西都有 ...

其實這邊看得出來繪圖 API 的發展, 早期先是 D3D/GL 的競爭, 接下來是 AMD/NV 的兢爭, 現在是 Game Engine 的反撲了.

2012年3月2日 星期五

x32

http://www.linuxplumbersconf.org/2011/ocw/proposals/531

竟然因為 x64 太長了
衍生出 x32 這種東西
擁有 IA32 的效能
卻有 x64 的暫存器
只是還是限制 4GB 記憶體空間

2010年9月26日 星期日

Viusal C++ .NET 2003 的 nox87copy

這曾經是個 x86 的 Optimize 功能
但是發生了 KB822412 的問題
就是當你的 Floating Point 是有問題的
而且有開 Floating Point Exception 的時候
會因為這個 Optimize 導致 miss 掉
所以之後的 Visual Studio 2003 Service Pack 1
就出現這個指令來控制

但是 Visual C++ 2005 之後就沒這個指令了
原因不明... 但是昨天終於讓我找到了
功能還是在的, 只是沒被列在 Options 裡面
很簡單, 就是 -d2QInomapX87 (大小寫必須一致)

範例
struct Coord
{
 Coord (float x, float y)
  :X (x), Y (y) {}
 float X;
 float Y;
};

Coord foo ()
{
 return Coord (1.0f, 2.0f);
}

沒開 nox87copy
fld1
mov  eax,dword ptr [esp+4]
fstp dword ptr [eax]
fld  dword ptr [__real@40000000]
fstp dword ptr [eax+4]
ret

開 nox87copy
mov  eax,dword ptr [esp+4]
mov  dword ptr [eax],3F800000h
mov  dword ptr [eax+4],40000000h

ret

果然簡潔, 連 x87 都不用跑了