Monday, June 26, 2006

Disappointed DX 10

DX10中一個很重要的新功能,就是增加了所謂的Resource View,藉由 Resource View,你可以不再限制於1D Texture, 2D Texture, Vertex Buffer, Index Buffer或是Cube Texture,所有的這些都可視為Resource的一種,只要藉由Resource View就可以在各種資源之間做轉換,所以程式的寫法也更有彈性了。

本來相當期待使用Resource View來做一些新的嘗試的,結果今天看到了June DX SDK,實在十分失望。根據最新的SDK說明,首先是Constant Buffer無法跟其他任何一種資源做轉換,這代表著你無法將貼圖轉換為constant buffer,也無法stream out資料到constant buffer。再來是關於Vertex Buffer以及Index Buffer的限制,這兩個Buffer都無法跟貼圖資源做轉換,所以將貼圖當作Vertex Buffer以及Index Buffer的期待也落空了。

我相信當初微軟規劃Resource View的原因,就是希望能在shader resource的使用上能有更多的彈性,而上面的這些轉換,應該也在當初的規劃中,只是可能因為不知什麼原因,現在必須關閉某些的可能性。不過關閉了這 部分功能後,DX10就失去了很大一部分的彈性,實在是蠻令人失望的。

6 comments:

Anonymous said...

我在想resource指的是放在video ram上的, 但是constant buffer是register, 應該不太一樣.

Anonymous said...

constant buffer也是資料的buffer啊
就連constant register都有線性空間的特性, 所以實做應該也是用記憶體吧

至於轉換問題, 微軟一定是碰到不少預料以外的瓶頸吧, 這樣看來DX10似乎還沒有制定完成?

fallingCAT said...

Constant buffer在DX10中已經不再是register了,而是map到VMEM的一個區塊,所以每個shader的constant都可以獨立不受影響,這也大幅加快了切換shader的效率。

Anonymous said...

texture無法轉成vertex buffer...
這樣是否意味著DX10沒有R2VB的功能?

fallingCAT said...

基本上可能是沒有R2VB了,不過還是可以使用Vertex Texturing來做類似的功能。

Anonymous said...

I thought the main reason that the vertex buffer can not be reinterpreted to texture is efficiency. Because textures has different memory layout such as tiling compared to linear vertex stream, you can just output to a linear vertex stream but can not use reinterpreted vertex stream as texture fetchs.