PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 電腦硬體討論群組 > 顯示卡討論區
帳戶
密碼
 

  回應
 
主題工具
giligula
Major Member
 

加入日期: Dec 2002
文章: 156
引用:
Originally posted by GPF
老兄,
是GDI(Graphics Display Interface)效能不佳吧!
別Windows API混為一談。

Win32 API是一個抽象的programming interface(以C function call export),
Win9X、WinNT、Win2000、WinXP都有之。理論上program只要針對Win32 API開發,就可以同時在各個support Win32 API的Windows上執行。

雖然表面上看起來programming interface都一樣,
底層可是大異其趣。
舉個例子,
若以CreateFile()這個API來說,
在Windows2000、XP下最後會經由CSRSS.exe傳達至OS內部的system call,
然後再轉成IRP packet傳達至底層負責disk I/O的kernel driver。
在Win9x下的話,最後則是送給底層的VXD driver,透過interrupt的方式提供I/O的服務。

所以你說的"Windows 的 programming interface 是以安全穩定為考量"這句話是有問題的,因為Windows API只是一個interface,真正implement這些function的是OS本身。

DirectX則是以COM的programming model,提供遊戲一個直接存取硬體的interface。

你說的沒錯
但是用這種方式留言
不寫程式的能看得懂嗎

而且並不是用 Windows API 寫
就能在所有 OS 下執行
不同 OS 有差異性
而且微軟在新 OS 推出後
API 也會同時改變
一些不適用的 API 也會建議改用其他函式使用

我希望大多數人能看懂
而不是用一堆技術名詞像 component object model 這種東西去堆
     
      
舊 2003-07-27, 02:12 PM #41
回應時引用此文章
giligula離線中  
bluesystem
Master Member
 

加入日期: Jan 2000
您的住址: 台灣桃園
文章: 1,717
引用:
Originally posted by giligula
DX 的開發沒有太多陰謀
NV 純粹是一意走自己的路
想把 Cg 拱起來而已

DX 的規範在制定時廠商都有參與
微軟與廠商之間的關係就像魚和水一樣
DX 的出現本來就是一定會有的
Windows API 根本就不適合寫遊戲
遊戲需要榨乾硬體的極限
而 Windows 的 programming interface 是以安全穩定為考量
而不是效能
所以處理圖形上就遜掉了
而且是很遜
這是當初微軟推廣 Windows 出現的盲點
所以才推出了 DirectX
DirectX 的出現就是為了提供程式設計師一個介面
不經由 Windows API
而直接 access 硬體的層面
Glide 是 3dfx 特有的
單獨硬體廠商獨佔的更糟
微軟怎麼可能不自己出個 D3D 呢

D3D 的改版不是借用廠商新的硬體功能
新版 DirectX 的制定是老早就決定好了
去年的這個時候
Pixel Shader 3.0 和 Vertex Shader 3.0 就早制定好了
早在硬體出現的一年半前就出現的規格
怎能說是借用呢
各家廠商也早早就知道那些新的規範
這些新的規範是微軟和廠商共同定出來的
微軟定個沒人做得到的規範是死路一條
廠商一意孤行走自己的規格也下場不好

DirectX 也沒什麼所謂效能不佳的問題
真如此
那也沒人用了
寫的小程式測試硬體效能
出來的數值是跟規格幾乎一樣
只能說
用 DirectX 就不能用廠商特有的 extension 了
不能發揮個別硬體特有的功能
微軟有很多優秀人才在裡面
我們不要把它想簡單了

NV 不走 DX9
就是想拱 Cg 而已
看看去年的這個時候
NV 對 Cg 的鼓吹
為了讓大家對 Cg 驚豔
只好搞個 PS2.0+, VS2.0+ 出來
希望大家用 Cg 寫遊戲來代替其他的 API
這不是更糟嗎
雖然我不喜歡微軟的商業手段
但用 Cg 更是不好
要不是現在效能不如預期
(也許如預期  只是對手效能不在預期)
NV 也不會對 Cg 暫時閉嘴

5200 支援 DX9 真是好嗎
真有 programmer 敢讓 5200 跑 DX9 的 shader 嗎
跑不動還不是得用較短的 shader code
一樣落入 ps1.4 以下的 spec 內
要不然就是用單純的 multitexturing
最後結果還是一樣
這部份時間會證明
(也許我會是錯的  兩年後就知道了)



如果有人知道D3D的歷史的話,D3D本來就是買了人家現成的3D API來用
的........

另外,D3D中很多技術絕對不是微軟先訂好之後,再由硬體廠商實作的.
很多都是由硬體廠商自己先往這方面去研究,再與微軟協調加進去的.
與其說微軟是規格的制定者,不如說是協調者(有點像OPEN GL ARB那樣),
DX Team聽說人數並不多,哪有那個人力時間去自己研究規格再叫廠商
follow??如果您是微軟主管DX開發的人,您會選擇找一票人來研究新規
格,硬體廠商照做就好,還是像OPEN GL ARB那樣,大家把規格提上來再
協調決定要什麼呢??

新的DX規格基本上當然是由微軟主導,但是會有一個主要的配合廠商.
像DX7/8.0的nVidia,8.1~9.0的ATi.在開發過程中當然是有其它廠商參
與,也都知道下一版會有什麼功能,但是主導規格的廠商就會先起跑,這
一點很明顯,光是看DX推出時間跟各廠商推出新GPU的時間跟效能就
知道了.

另外DX效能不佳,這個感覺是蠻明顯的.NV自己在GDC的簡報也有提出
來過,而且是很小的程式去測Batch Rendering,條件單純化的測試.在NV
自己的晶片上約有20%以上的差距.如果要那份文件我可能要找一下.
不知道為什麼D3D的效能在PC上就是很不好.據我聽同業說過,他們在把
PC的繪圖引擎改版到XBOX上面之後,就感覺出以倍數差的效能改變!
我是不很清楚究竟是NV去修改晶片符合DX,還是DX修改成NV2A專用的
API,不過手頭上的資料來看,應該屬於後者.另外全世界唯二使用過DX做
為繪圖API的遊樂器,SEGA的DreamCast,用DX寫的東西也是其差無比....
我碰過PS跟DC的原生API.人家原生的API跟DX比起來真的是精簡有效率
得多了....

NV不走DX9,說穿了就是因為NV跟MS鬧翻了而已.另外就MS的角度來看
,不可能讓NV在DX這個API主導太久.所以NV自己就搞了個Cg.而Cg也沒
什麼不好的,只要在寫程式的時候注意一些限制,一些在OPEN GL底下的
Extension,在DX不會出現之外.Cg complie出來的shader code還不是一
樣在DX的程式底下跑得很高興?!

最後,如果FX5200這種硬體夠普及的話,為什麼不敢跑shader??有ps2.0
的指令集可用,為什麼要用ps1.4??也許FX5200跑不動指令長的shader,
但是沒人規定shader要寫多長才算是ps2.0的code吧?!但是程式設計者
卻有更多的更好用的指令集可用,不用再使用早期shader的指令集去兜
那些功能,很多ps1.3/1.4要用三四個指令去組合的動作,也許PS2.0一個
指令就解決了,速度又快.另外我們在寫shader code的時候,是有很多段
程式去堆起來一個shader的,真的跑不動的話,把shader的某些程式碼關
掉不啟用也可以,這樣較底階的硬體也能跑,但高階的顯示晶片又能在ps2.0
的基礎下發揮能力,這樣有什麼不好的呢??我真的不懂......

最後,我們在寫遊戲,第一順位就是「遊戲能不能跑」再來才是「效能如
何」.我信相絕大部份的人都能輕易的看出遊戲畫面,特效的差距,而比較
看不出效能的差距.有很多的遊戲類型也比較不重視畫面更新的速度.玩
家在選擇遊戲的時候我想大家都是看畫面的吧?很多玩家也都能接受畫
面漂亮但是遊戲效能不好時,自己要去昇級硬體.今天遊戲不太敢使用新
的技術,問題絕對不是出在效能上,而是出在支援硬體不夠普及上面.

新技術不能低價化,對大家絕對不是好事的......
 
舊 2003-07-27, 03:08 PM #42
回應時引用此文章
bluesystem離線中  
GPF
Senior Member
 
GPF的大頭照
 

加入日期: Nov 2001
文章: 1,397
引用:
Originally posted by giligula
你說的沒錯
但是用這種方式留言
不寫程式的能看得懂嗎

而且並不是用 Windows API 寫
就能在所有 OS 下執行
不同 OS 有差異性
而且微軟在新 OS 推出後
API 也會同時改變
一些不適用的 API 也會建議改用其他函式使用

我希望大多數人能看懂
而不是用一堆技術名詞像 component object model 這種東西去堆

1.小弟只是指出你錯用了Windows API這個名詞。
小弟天天跟Win32 API打交道,
當然知道Win32 API在各個平台的behavior還是有差異性。(這真的會整死人)
所以我特別加了個"理論上"...
事實上這些差異性有許多都是因為訂API時不夠謹慎有關係,產生很多模糊地帶。
寫程式一不注意時可能就會導致換到別的Win32 platform上後無法執行。

2.軟體工程的大忌,就是去動到既有的Interface,(這也是後來為何M$會搞出COM(Component Object Model)的原因之一)
所以微軟在新的OS推出時,絕對不會去改變既有的API,而是新增API。
因為動到既有API的下場就是...既有APP死傷遍野。
若API真的設計不良時 or 該被淘汰時,
M$會建議developer"盡量"改用其他API,錯的就繼續讓它錯下去。(例如錯得離譜的GetVersion() vs GetVersionEx(),GetDiskFreeSpace() vs GetDiskFreeSpaceEx(),還有該淘汰的WinExec() vs CreateProcess())。
舊 2003-07-27, 10:55 PM #43
回應時引用此文章
GPF離線中  
宗毛
Elite Member
 
宗毛的大頭照
 

加入日期: Mar 2002
您的住址: 台北市
文章: 4,505
呵呵,回到正題吧
giligula順便幫我想一下問題吧

先來看看我今天得到的畫面:


詳細方法,cp裡面的af設定為application喜好
再去\UT2003\System\UT2003.ini
修改[D3DDrv.D3DRenderDevice]下面那一段
LevelOfAnisotropy=8(即是由應用程式開啟8XAF)
結果就可以得到上圖,看起來是Trilinear Filtering無誤

會這樣試是因為一個朋友跟我解釋的:
(呃,他看得懂中文,但是不會用中文打字)
引用:
ATI’s take is, if you can only see the top texture in the game, they don’t need to Trilinear filtering EVERY TEXTURE in the game since you can’t see them. That means Trilinear filter the TOP LAYER texture and bilinear the ones at the bottom (because they are hidden). This works very well until a game like UT2003. UT2003 reports 1 texture as the surface texture BUT IT ISN’T. So Radeon filters it but it’s covered by other textures. But since Radeon only Trilinear filters the surface texture, you will get the impression that it is not doing Trilinear. This is a misunderstanding. If you select APPLICATION PREFERENCE, the game decide what to trilinear filter, you will get the correct image. But there is NO AF selection from the control panel in UT2003, you need to manually change the setting INI in the game folder to activate AF. Once you do that, and you have application preference AND you select “enable Trilinear” in UT2003, you should get a correct image.


現在疑問點在於,是否由ut2003決定如何做filtering就是對所有的layer都進行trilinear filtering呢?
因為在我測試ut2003 custom demo,用cp裡開的8xafQ和由ut2003.ini設定的
性能分別為47.287fps和44.840fps
我猜想這應該是因為由ut2003.ini設定的話會對所有layer做trilinear filtering
因此效能會比ati driver只做一個layer的trilinear filtering而其他做bilinear filtering
來得差?
但是在最上一層的layer,ati driver設置的確是只有bilinear(姑且假設driver沒有省工)
但是這應該也算是個bug吧?
各位有何看法?
舊 2003-07-27, 11:12 PM #44
回應時引用此文章
宗毛離線中  
GPF
Senior Member
 
GPF的大頭照
 

加入日期: Nov 2001
文章: 1,397
引用:
Originally posted by bluesystem
我碰過PS跟DC的原生API.人家原生的API跟DX比起來真的是精簡有效率
得多了....

個人覺得針對OpenGL or Glide寫的程式,
可讀性遠比D3D好的多!
純C language的programming interface跟精簡有力的API命名法則,
"看"起來就是比較簡潔。

至於為何D3D程式的可讀性會比較差呢?
個人認為COM難辭其咎。
舊 2003-07-27, 11:15 PM #45
回應時引用此文章
GPF離線中  
giligula
Major Member
 

加入日期: Dec 2002
文章: 156
引用:
Originally posted by GPF
個人覺得針對OpenGL or Glide寫的程式,
可讀性遠比D3D好的多!
純C language的programming interface跟精簡有力的API命名法則,
"看"起來就是比較簡潔。

至於為何D3D程式的可讀性會比較差呢?
個人認為COM難辭其咎。

所以後來又搞了個 COM+
用 COM 是「落落長」
要完全弄懂 COM 的機制也是很累
還好
不懂 COM 怎麼運作還是能用
舊 2003-07-27, 11:21 PM #46
回應時引用此文章
giligula離線中  
GPF
Senior Member
 
GPF的大頭照
 

加入日期: Nov 2001
文章: 1,397
引用:
Originally posted by giligula
所以後來又搞了個 COM+
用 COM 是「落落長」
要完全弄懂 COM 的機制也是很累
還好
不懂 COM 怎麼運作還是能用


COM的運作機制說穿了不值幾分錢。
只是因為相關技術的門檻比較高,(要懂DLL、function pointer、virtual function、v-table、registry、thread、process...)
入門比較不易。

有興趣的可以看看"Inslde COM"這本書,
看完後半年內你應該就會懂COM了。(作者講的 )

我自己弄通了後,
現在在Linux上寫程式也自己搞了個"類COM"的機制。
滿有趣的。

COM程式易讀性不佳其實不是最大的問題,
最大的問題是除錯非常不易,尤其是interface reference count的問題。(尤其跟C++ exception搞在一起的error handling會讓人抓狂) jolin:

有用ATI顯示卡的人不曉得有沒有注意到改變D3D的設定按"Apply"後,
畫面會突然變黑閃動一下?
個人推測可能是因為ATI的driver工程師自己也搞不定D3D reference count的問題,只好每次設定後重新reset自己D3D的component。
改變OpenGL的設定就不會。
舊 2003-07-27, 11:39 PM #47
回應時引用此文章
GPF離線中  
GPF
Senior Member
 
GPF的大頭照
 

加入日期: Nov 2001
文章: 1,397
引用:
Originally posted by 宗毛
ati的driver很糟榚,一定要結束遊戲不然不會生效
(有時候明明已經關了再改還是不生效! >_< )
而且一定要重開機才能解決這個問題,不然怎麼調都沒用


要改設定時FRAPS關掉了嗎?

若沒關的話,會因為咬住了某些interface沒有release掉的關係,
導致ATi的D3D COM component內部state亂掉,
最後非得重開機才行。
舊 2003-07-27, 11:51 PM #48
回應時引用此文章
GPF離線中  
giligula
Major Member
 

加入日期: Dec 2002
文章: 156
引用:
Originally posted by 宗毛
呵呵,回到正題吧
giligula順便幫我想一下問題吧

詳細方法,cp裡面的af設定為application喜好
再去\UT2003\System\UT2003.ini
修改[D3DDrv.D3DRenderDevice]下面那一段
LevelOfAnisotropy=8(即是由應用程式開啟8XAF)
結果就可以得到上圖,看起來是Trilinear Filtering無誤

會這樣試是因為一個朋友跟我解釋的:
(呃,他看得懂中文,但是不會用中文打字)


現在疑問點在於,是否由ut2003決定如何做filtering就是對所有的layer都進行trilinear filtering呢?
因為在我測試ut2003 custom demo,用cp裡開的8xafQ和由ut2003.ini設定的
性能分別為47.287fps和44.840fps
我猜想這應該是因為由ut2003.ini設定的話會對所有layer做trilinear filtering
因此效能會比ati driver只做一個layer的trilinear filtering而其他做bilinear filtering
來得差?
但是在最上一層的layer,ati driver設置的確是只有bilinear(姑且假設driver沒有省工)
但是這應該也算是個bug吧?
各位有何看法?

LevelOfAnisotropy 這個選項
自從換上 9700 就沒再用過了
之前 9000Pro 的時候
我必需親自去調 LevelOfAnisotropy
才能夠開啟 AF
在 control panel
很抱歉
不行 @_@
Tom's Hardware 有一篇評測
9000Pro 開啟 AF
在 UT2003
效能比 4600 開 AF 還高
廢話
因為根本沒動作
測試人員壓根沒發現 9000Pro 效能「完全沒」降低
會不會太強了一點
這個選項在 Splinter Cell 的 Demo 也可以找到
正式版沒玩就不曉得了

我不曉得 ATI 的 AF 有這種機制
聰明得讓人有點驚訝
照他說的(我相信他的說法)
ATI 如此做不算 bug 也不算作弊
反正只看得到最上層材質
但是
還是有點怪怪的
如果只看得到最上層的材質
那不在最上層的應該是連 bilinear filtering 也不需要才對

正常不是如此
如用四層材質貼圖
那是四層都看得到
在截圖上
雖然用了 color mip map
還是看得到 light map 在上面
ATI 這麼做有「省工」的嫌疑
「只看得到最上層材質」
這句話不曉得是怎麼定義的

UT2003 的設定是對所有 layer 都做 trilinear filtering 沒錯
照 9700 的 block diagram
只要有任何取樣材質的動作
都會經過 SMOOTHVISION II 的處理
也許 SMOOTHVISION II 有存在這種特殊處理機制
當沒在 control panel 開啟 AF 時
這種機制就不會啟用
毛兄
可以請你看看同時在 .INI 中開啟 AF 及 control panel 也同時開啟
結果會是哪種嗎?
9000Pro 的話
是會遵照 .ini 檔

我的看法和你一樣
效能的差別就是在這邊不同
也覺得是驅動程式的問題
可能是 bug
但「偷吃步」的機會也很高

這個消息有些勁爆
好像還沒在國外的網站上出現
舊 2003-07-28, 12:10 AM #49
回應時引用此文章
giligula離線中  
宗毛
Elite Member
 
宗毛的大頭照
 

加入日期: Mar 2002
您的住址: 台北市
文章: 4,505
引用:
Originally posted by GPF
要改設定時FRAPS關掉了嗎?

若沒關的話,會因為咬住了某些interface沒有release掉的關係,
導致ATi的D3D COM component內部state亂掉,
最後非得重開機才行。


大部時候是沒有開fraps出現這種情況耶
上次在測試的時候發現為什麼改了設定(開aa/af)結果成績一樣
(是用ut2003測custom demo)

據我的經驗,有時候按apply後,螢幕也黑了一下
再按兩個確定
再開遊戲,仍然會有失效的機會,這點我實在是不知道ati的driver在搞什麼
(相對於nv的driver,是可以開啟遊戲,改設定,回遊戲立即生效,非常方便)
或許GPF兄可以幫忙研究一下這個問題可以發生的原因
(還是直接去rage3d問catalyst maker XD)

一但沒有apply成功,結束、重啟遊戲一定沒用
必須要重開機才會生效…
舊 2003-07-28, 02:08 AM #50
回應時引用此文章
宗毛離線中  


    回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是03:25 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2025。