• Thứ Năm, 26/07/2007 11:42 (GMT+7)

    DirectX 10 nền tảng đồ họa đa luồng

    Được nói đến nhiều từ khi Vista xuất hiện, DirectX 10 hơn gì so với DirectX 9 và các bản trước đó? Tại sao các nhà sản xuất phần cứng và game đều đang hướng về nó? Microsoft kỳ vọng gì vào nó? Và đến lúc này, nó đã làm được gì?

    Từ khi Vista xuất hiện, bạn nghe nói nhiều đến DirectX 10. Nó hơn gì so với đàn anh DirectX 9 và các bản trước đó? Tại sao các nhà sản xuất phần cứng và game đều đang hướng về nó, Microsoft kỳ vọng vào nó? Và đến lúc này, nó đã làm được gì?

    Ta cùng nhìn lại lịch sử của DirectX một chút. Cách đây 13 năm, lúc Windows 95 xuất hiện (1994), các nhà lập trình vẫn còn phát triển game trên nền DOS. Lý do mà các nhà phát triển chuộng DOS hơn Windows 95 là vì trên nền hệ điều hành DOS, họ có thể truy cập trực tiếp đến card đồ họa, màn hình, bàn phím, chuột... trong khi Windows 95 giới hạn điều này. Chính vì vậy, sau khi Windows 95 xuất hiện được vài tháng thì 2 nhà lập trình của Microsoft đưa ra một giải pháp “mở cửa” cho Windows 95, giúp các nhà lập trình dễ dàng phát triển game trên nền Windows 95. Thế là DirectX ra đời vào tháng 9/1995 (bản DirectX 1.0), và qua nhiều lần chỉnh sửa, cho đến tháng 11/2006, Microsoft đã nâng cấp lên phiên bản DirectX 10.0.

    DirectX 10 được xem là một nền tảng mới hoàn toàn, không mang tính kế thừa từ nền tảng cũ như các phiên bản DirectX trước. Với một nền tảng mới như vậy, các nhà phát triển, nhất là các nhà phát triển game cũng phải từ bỏ lối cũ, đi theo nền mới này (vì DirectX chủ yếu hướng đến game, ít hỗ trợ các mục đích khác như video, xử lý hình ảnh, nghe nhìn...). Điểm chú ý là DirectX 10 chỉ có trong bản Windows Vista, không chạy trên Windows XP hay các bản Windows cũ khác (để biết được máy tính của bạn đang chạy bản DirectX nào, bạn vào mục Start.Run và gõ vào dxdiag). DirectX 10 cũng tương thích ngược với các ứng dụng chạy nền DirectX cũ. Để có được điều này, DirectX 10 thực chất trong mình nó chứa cả 3 phiên bản: DirectX 9, DirectX 9.0Ex (xem mục “Các thư viện đồ họa đáng chú ý”) và DirectX 10. Tới thời điểm viết bài, dòng card GeForce 8800 của NVIDIA và ATI 2900 XT (R600) của AMD đã hỗ trợ đầy đủ (về phần cứng) tập lệnh đồ họa này. Tuy vậy, các nhà phát triển game hơi chậm chân, hiện vẫn chưa có game nào hỗ trợ đầy đủ DirectX 10 nhưng danh sách từ nay đến cuối năm có khoảng 17 tựa game, xem tại http://www.answers.com/topic/list-of-games-with-directx-10-support. Do đó, bài viết chưa có được những con số thử nghiệm thực tế từ game. Một đổi mới khác là Microsoft không “cặm cụi” làm một mình như các bản DirectX trước, hãng kết hợp với các công ty đồ họa như NVIDIA, ATI (đã được AMD mua lại) để xây dựng nền tảng mới này. Điều này cũng là điều kiện thuận lợi cho các công ty hợp tác vì họ không phải tốn thêm công nghiên cứu sản phẩm của mình để đạt tính tương thích tốt nhất với DirectX 10.

    Điểm mới của DirectX 10 có thể gói gọn trong 4 thứ: sự xuất hiện của WDDM (Windows Display Driver Model), tập lệnh giao tiếp máy tính API (Application Programming Interface) được chỉnh sửa lại mới hoàn toàn, ống lệnh mới và cuối cùng là bộ bóng đổ Shader Model 4.0 nâng cấp từ Shader Model 3.0. Ta cùng dạo qua 4 thành phần trên, thứ mà Microsoft đã tốn bao nhiêu “chất xám” từ khi DirectX 9.0c “già nua” xuất hiện từ cuối 2004.

    Windows Display Driver Model (WDDM)

    Bạn có bao giờ chơi cùng lúc 2 game trên một PC chưa? Nếu bạn là thần dân của thể loại MMORPG chắc là đã từng nghe đến chuyện chơi cùng 1 game với 2 account. “Trình độ” hơn nữa, giả sử bạn chơi 2 game song song nhưng với thiết lập độ phân giải màn hình của 2 game đó khác nhau, khi chuyển qua lại giữa 2 game, bạn sẽ khổ sở xem màn hình “nhảy múa” cho dù PC của bạn có thuộc hàng “dữ”. Microsoft giải quyết vấn đề này bằng phát minh WDDM trong DirectX 10, điều khiển cách chạy cùng lúc nhiều ứng dụng 3D. WDDM là kiến trúc trình điều khiển đồ họa chỉ dành cho Vista. Kiến trúc này thay đổi toàn bộ so với kiến trúc trên nền XP.

    Thực tế, khi chạy với giao diện Aero trong Vista, đây là giao diện 3D hoàn toàn với nhiều ứng dụng 3D chạy cùng lúc. WDDM giúp cho hệ thống của bạn không bị đứng vì đồ họa “tải không nổi” hoặc vì xung đột tài nguyên hệ thống.

    Nhờ có WDDM, lần đầu tiên Microsoft đã ảo hóa được phần cứng đồ họa khi đưa ra giải pháp phân luồng cho GPU. Nhờ có WDDM, tài nguyên của GPU được phân bổ đều hơn, xử lý được cùng lúc nhiều ống lệnh. Và ngoài việc chuyên xử lý đồ họa 3D, GPU còn được “chỉ định” chạy những tác vụ khác còn gọi là GP-GPU (General Purpose GPU). Hai hãng đồ họa AMD/ATI và NVIDIA cũng đã tận dụng khả năng xử lý song song này như là công nghệ Close to Metal (AMD giới thiệu hồi tháng 10 năm ngoái) và CUDA (Compute Unified Device Architecture, NVIDIA giới thiệu hồi tháng 2/2007), xem thêm mục “GPGPU -xâm lấn CPU”.

    WDDM hiện đã lên phiên bản 2.0 trên nền Windows Vista (trước khi Vista chính thức công bố, WDDM là bản 1.0) và Microsoft đang có kế hoạch tung ra bản nâng cấp WDDM 2.1 (chưa biết thời gian cụ thể, sẽ tung ra cùng với việc nâng cấp DirectX 10.1 xem thêm mục “DirectX 10.1”) và xa hơn nữa sẽ là WDDM 3.0.

    Bạn có thể tham khảo danh sách GPU và card đồ họa có hỗ trợ WDDM tại: http://technet.microsoft.com/en-us/windowsvista/aa905088.aspx

    Theo Microsoft, tốc độ phát triển của GPU về mặt nào đó cũng đạt được đến định luật Moore, nghĩa là cứ sau mỗi hai năm, tốc độ xử lý của GPU tăng lên gấp đôi. Theo Microsoft, nền WDDM sẽ mang lại 3 thứ: ổn định, tốc độ và an toàn.

    Ổn định

     

    Trong XP, trình điều khiển đồ họa khá lớn và phức tạp, điều này chính là nguyên nhân gây mất ổn định cho hệ thống. Các trình điều khiển này đều nằm trọn trong nhân (kernel) hệ điều hành nên khi trình điều khiển gặp trục trặc là toàn bộ hệ thống sẽ bị khởi động lại. Theo số liệu thu thập được của Microsoft, trình điều khiển đồ họa chiếm đến 20% lỗi là treo hệ thống (chúng ta thường gọi bằng thuật ngữ “màn hình xanh chết chóc” trong XP). Còn trong Vista, trình điều khiển WDDM được chia làm 2 phần, Kernel Mode Driver (KMD) và User-Mode Driver (UMD). Phần KMD được lưu trong kernel, chỉ làm những phần việc ở cấp thấp, phần lớn công việc thuộc UMD. Điều này giúp tránh được lỗi đứng máy. Ngoài ra, WDDM có một cơ chế nhận diện lỗi, chỉ cần khởi động lại trình điều khiển mà không cần khởi động cả hệ thống. Một điểm phụ khác là trình điều khiển trong Vista được đơn giản hóa rất nhiều, bỏ đi các đoạn mã hỗ trợ cho nhiều giao tiếp thiết bị khác nhau nên thiết lập của Vista chỉ có một giao tiếp duy nhất.

    Tốc độ

    Trước đây, khi một ứng dụng cần đến GPU thì các ứng dụng khác mà GPU đang xử lý đều bị “cho ra rìa”. Lý do đơn giản vì GPU không có khả năng xử lý nhiều ứng dụng cùng lúc. Còn trong Vista, GPU có thể cùng lúc xử lý nhiều tác vụ nhờ vào 2 công nghệ: GPU Memory Manager (cấp phát bộ nhớ video) và GPU Scheduler (phân bổ ứng dụng được xử lý theo mức độ ưu tiên).

    An toàn

     

    Với bất kỳ nền tảng nào chạy đa tác vụ thì tính ổn định đều được các chuyên gia chú trọng. Một hệ điều hành an toàn phải đảm bảo được nguồn tài nguyên nào đó đang được sử dụng thì nó phải được “cô lập” hoàn toàn - ứng dụng khác không thể truy cập. Hiện thời, đây cũng là yêu cầu bắt buộc của các chương trình đọc phim HD. WDDM cũng được xây dựng trên nguyên tắc này.

    Để biết thêm chi tiết về WDDM, xem tại: http://msdn2.microsoft.com/en-us/library/aa480220.aspx

    Ống lệnh đồ họa truyền thống, ở mỗi GPU thay đổi một chút.

    API (Application Programming Inteface)

    Ngoài WDDM là “hàng mới”, cái tên API đã xuất hiện từ khá lâu trong “ngôn ngữ máy tính”. API có thể xem là ngôn ngữ giao tiếp giữa ứng dụng với hệ điều hành. Nhà lập trình viết các hàm gọi để “móc” với API, API “ra lệnh” cho máy tính làm việc. Có thể xem một API như một module của chương trình để chạy tác vụ nào đó.

     

    Ống lệnh của DirectX 9

    Riêng về đồ họa, có nhiều thư viện API mà các nhà phát triển game thường dựa vào, trong đó đáng chú ý nhất là thư viện đồ họa DirectX và OpenGL, ít tên tuổi hơn như DirectDraw, GDI/GDI+. Trong “thư viện” DirectX 10, API được Microsoft hướng theo một hướng đi khác. Lý do chính khiến Microsoft hướng API sang lối khác là capability bit trong API (còn gọi là cap bit). Trước đây, các nhà sản xuất card màn hình tận dụng cap bit để đưa vào sản phẩm của mình những tính năng đồ họa “râu ria” khác (dĩ nhiên họ phải tuân theo nguyên tắc để đảm bảo tính tương thích với DirectX và Shader Model). Cho nên, dù trên nền của NVIDIA hay ATI, các nhà sản xuất card màn hình luôn đưa ra những tính năng phụ mà hãng kia không có. Chính điều này là “địa ngục” đối với các nhà sản xuất game. Họ phải lọc ra cap bit và cấu hình của mỗi GPU để đảm bảo game của họ hỗ trợ đúng tính năng, đúng card đồ họa. Nên không ngạc nhiên gì khi bạn thấy game này hỗ trợ tính năng kia, mà tính năng kia chỉ có trên loại card đồ họa nọ. Thật nhức đầu! Nhưng với DirectX 10, các nhà phát triển game loại bỏ được rắc rối này. Đây cũng là lý do khi mà các nhà phát triển game “khoái” viết game cho hệ console hơn cho PC, vì cấu hình từng thế hệ console rất ít thay đổi.

    Chuyện tất yếu khi bỏ đi cap bit là NVIDIA, AMD/ATI và các nhà sản xuất chip đồ họa cũng thay đổi cách phát triển GPU. Họ tìm cách khác để đẩy công nghệ sản xuất GPU lên, đưa ra nhiều công nghệ mới cho game. Nhưng cho dù nếu có nhiều công nghệ mới trên nền DirectX 10 xuất hiện thì nhà phát triển game cũng không còn vướng phải rắc rối như trước nữa. Và một điều nữa là các công nghệ đồ họa dựa trên API sẽ rất ít, thậm chí không còn nữa vì Microsoft đã “ cấm cửa” cap bit của API rồi.

    Hơn nữa, API trong DirectX 10 có nhiều khả năng mới hơn, nhưng trước hết, ta hãy xem khiếm khuyết của DirectX 9.0c. Số lượng vật thể (cây cối, bàn ghế, súng ống...) được render bị giới hạn vì API chỉ có thể vẽ được một số lượng nhất định, cụ thể là khoảng 500 vật thể khác nhau trong một khung hình. Do đó, nhà phát triển không thể tạo một bãi cỏ mà từng cọng cỏ có chuyển động riêng được nên bạn chỉ có thể thấy được một mảng cỏ giống hệt nhau, chuyển động y như nhau, có chăng là mỗi cọng cỏ có một chút khác biệt về sắc độ màu. Điều này không phải vì nhà phát triển không có khả năng nhưng vì do giới hạn của API và tải CPU. Họ luôn phải nhức đầu trong việc cân bằng tải giữa chất lượng hình ảnh game và CPU. Sang bản DirectX 10, API được thiết kế lại, dựa trên kiến trúc WDDM, có tốc độ xử lý mới, cách thức tiếp cận mới và nhất là khả năng ảo hóa bộ nhớ GPU, không còn bị quá tải và “nhờ vả” nhiều đến CPU nữa.
    So với DirectX 9, API của DirectX 10 có những khả năng mới như:

    • Xử lý song song, mở rộng và thu hẹp dữ liệu trong quá trình đổ bóng hình học (geometry shader)

    • Xuất dữ liệu bóng đỉnh sang bộ nhớ trong quá trình stream output

    • Giảm tải cho CPU trong các tác vụ như validation, xử lý tiến trình và trình điều khiển

    • Các loại tài nguyên mới (ví dụ như mảng vân (texture) bóng đổ có chỉ mục) và các định dạng tài nguyên

    • Tổng hợp tài nguyên trong bộ nhớ nhiều hơn và cấp phát tài nguyên cho một ứng dụng duy nhất ở một thời điểm

    • Bỏ cap bit

    • API được xây dựng theo dạng lớp, khởi đầu là lớp có chức năng cơ bản ở gốc, các lớp sau tùy chọn do các nhà phát triển hỗ trợ (layered runtime)

    • Tăng lượng đối tượng được render, không giới hạn chiều dài bóng đổ.

    Vì đơn giản hóa API nên DirectX 10 chỉ chạy được với GPU có hỗ trợ DirectX 10. Thư viện API gọn nhẹ hơn cũng có nghĩa giảm thiểu được thời gian GPU gửi lệnh, dữ liệu... Vì thế, API yêu cầu ít nguồn lực CPU hơn trên mỗi lệnh nên có thể tăng số lệnh và có thể tăng tính phức tạp của khung hình cần render.

     

    GPGPU – XÂM LẤN CPU

     
     

    General-Purpose Computing on Graphics Processing Units (GPGPU hay còn gọi tắt là GPGP) là xu hướng gần đây mà các nhà phát triển đồ họa muốn mở rộng hơn nữa khả năng của GPU. Thay vì trước đây GPU chỉ chuyên xử lý các phần việc liên quan đến đồ họa thì nay GPU có thể “vượt rào”, xâm lấn cả công việc của CPU, như xử lý mô hình, phân tích cấu trúc phân tử, dựng hình mô phỏng trong các ngành khoa học chuyên biệt như dự báo thời tiết, y khoa, dầu khí... Và để thực hiện được điều này, một GPU thông thường phải có khả năng xử lý song song các tác vụ, GPU có thể xử lý nhiều ống lệnh đồ họa cùng lúc.
    Tháng 11/2006, NVIDIA đưa ra công nghệ CUDA (Compute Unified Device Architecture) có trong dòng card đồ họa GeForce 8800.

     

    Card PhysX

     

     

    Công nghệ này dành cho các nhà phát triển chương trình tận dụng được sức mạnh xử lý song song của GPU. CUDA dựa trên ngôn ngữ lập trình c++. Nếu bạn là lập trình viên và quan tâm đến công nghệ đa luồng GPU này, đến http://developer.nvidia.com/object/cuda.html để có thêm thông tin và tải về bộ phát triển SDK của CUDA.
    Cạnh tranh với CUDA của NVIDIA chính là công nghệ Close to Metal (CTM) của AMD/ATI, cũng là một giải pháp tính toán song song cho GPU và tận dụng GPU để xử lý các công việc không liên quan đến đồ họa. Dòng GPU ATI R5x trở về sau đều hỗ trợ công nghệ CTM này. AMD cũng đưa ra dòng sản phẩm Stream Processor kết hợp CPU và GPU trên một chip. Bạn có thể tải về tài liệu tham khảo công nghệ Close to Metal tại: http://ati.amd.com/companyinfo/researcher/documents/ATI_CTM_Guide.pdf
    Ngoài 2 giải pháp trên cho tính toán song song, còn có một cách tiếp cận khác để nâng cao khả năng hoạt động của GPU: Physics Processing Unit (PPU). Đây là bộ xử lý riêng biệt được thêm vào hệ thống máy tính để tính toán các tác động vật lý (chuyển động cơ thể, va chạm giữa các vật thể, giả lập lông tóc, quần áo...), nhất là các engine vật lý trong game. Mục đích chính của PPU cũng là nhằm giảm tải cho CPU. Hiện tại, có 2 PPU đang cạnh tranh: chip PhysX của AGEIA (www.ageia.com/physx) và Havok FX của Havok (www.havok.com). Cả hai được xem như là dạng engine vật lý chuyên biệt. PhysX là card phần cứng gắn thêm vào hệ thống, hoạt động như một engine vật lý riêng biệt. Hiện tại chỉ có 3 công ty đồ họa sản xuất card này: BFK, Asus và ELSA. Trong khi Havok FX là công nghệ tận dụng công nghệ đồ họa kép CrossFire của AMD và SLI của NVIDIA. Havok FX chia giả lập vật lý thành 2 phần: hiệu ứng vật lý (như bụi, khói, bóng đổ...) và gameplay vật lý (đối tượng chuyển động). Hiệu ứng vật lý sẽ được chuyển cho GPU xử lý, trong khi gameplay vật lý vẫn như cũ, là công việc của CPU. Việc tách biệt ra như vậy là vì hiệu ứng vật lý sẽ không ảnh hưởng đến gameplay vật lý. Còn với PhysX, AGEIA chuyển hết hiệu ứng vật lý và gameplay vật lý cho card xử lý.

     


    Ống lệnh DirectX 10 (pipeline)

    Ngoài cuộc “lột xác” của API, ống lệnh của DirectX 10 cũng được Microsoft tân trang lại, đáng chú ý nhất là 2 khả năng mới: bộ đổ bóng hình học (geometry shader) và khả năng stream output.

    Geometry shader (bộ đổ bóng hình học)

    Trước đây, khi có được dữ liệu đỉnh, DirectX đẩy dữ liệu lên CPU để dựng hình. Do đó, phần việc của CPU khá nặng nề, kéo chậm hệ thống. Trong DirectX10, Microsoft thêm vào ống lệnh bộ đổ bóng hình học (GS) để giải tỏa công việc này cho CPU, nhờ vậy gỡ bỏ được những giới hạn mà CPU vấp phải trong những bản DirectX trước. Bộ đổ bóng đỉnh (vertex shader) có nhiệm vụ dựng ảnh dựa trên các dữ liệu đỉnh, còn bộ đổ bóng điểm (pixel shader) có nhiệm vụ tạo hiệu ứng bóng đổ dựa trên điểm ảnh nên bộ đổ bóng hình học (nhập dữ liệu đỉnh) có thể xử lý kiêm nhiệm các công việc trên ngay từ đầu (như là dựng hình điểm, đường thẳng, tam giác...) và xuất sang giai đoạn khác mà không cần CPU can thiệp.

    Dữ liệu vertex (đỉnh) đi ra giai đoạn đổ bóng hình học này có thể nhiều hơn (amplification) hoặc ít hơn (minimisation) dữ liệu vertex đi vào. Bộ đổ bóng hình học có “ngưỡng” xuất từ 0 đến 1024 bề mặt đỉnh (vertice) cho mỗi vertex đi vào. Microsoft chọn trong khoảng dữ liệu xuất này là vì đây là giới hạn hợp lý giữa chi phí phần cứng và mức hoạt động hiệu quả của quá trình amplification hay minimisation.

    Ngoài công việc trên, GS còn có khả năng ánh xạ phủ bề mặt (displacement mapping) bằng kỹ thuật tessellation. Kỹ thuật phủ tessellation là dạng phủ 3 chiều, tự tạo ra các khối đa giác phủ kín bề mặt trước khi được render. Trong DirectX 9 không có kỹ thuật phủ này vì phần cứng không có khả năng tự tạo ra dữ liệu. Kỹ thuật phủ tessellation tăng chi tiết hình ảnh rất nhiều nhưng lại tiêu hao khá nhiều sức mạnh tính toán hệ thống.

    Một chức năng phụ của GS là có thể lấy thông tin phụ của dữ liệu vertex. Những thông tin này là tập hợp dữ liệu từ các bề mặt đỉnh lân cận và sự liên quan giữa những bề mặt đỉnh này với nhau. Dữ liệu này giúp hệ thống nội suy ra được các thuật toán liên quan đến tạo hình lông, tóc, lượng bóng đổ, xử lý chi tiết hình ảnh...

    Stream output

    Điểm mới thứ 2 trong ống lệnh của DirectX 10 là stream output. Giai đoạn này nằm ngay sau bộ đổ bóng hình học. Stream output ghi dữ liệu vào bộ nhớ sau khi bộ đổ bóng đỉnh và đổ bóng hình học tính toán xong lớp phủ bề mặt. Các GPU trước đây chưa hỗ trợ DirectX 10, chúng chỉ có thể ghi điểm ảnh vào bộ nhớ. Các GPU mới (dòng GeForce 8800 và ATI R600) có khả năng ghi cả dữ liệu đỉnh và hình học vào bộ nhớ đệm. Nhờ vậy mà khi các bộ bóng đỉnh và GS có thể dựng hình lại nhanh chóng hơn, và nhất là không cần đến nguồn lực từ CPU. Do vậy, quyền quyết định dữ liệu “đi đâu về đâu” trước đây thuộc về CPU, nay chuyển hết sang GPU, như là tạo mới, hủy, xuất dữ liệu... và các nhà phát triển cũng không còn lo ngại về tình trạng quá tải CPU.

    DirectX 10 thêm vào bộ đổ bóng hình học (geometry shader) và stream output, giúp giảm tải cho CPU.

    Các giai đoạn khác

    Ngoài 2 giai đoạn mới kể trên, những giai đoạn còn lại của ống lệnh đồ họa DirectX 10 không có khác biệt nhiều so với ống lệnh trước đây. Một số tính năng được chỉnh sửa lại chút ít cho trơn tru hơn. Ví dụ như giai đoạn tạo mành lưới (rasterization) có thêm chức năng phỏng đoán render hoặc vẽ đối tượng để giảm tải cho CPU. Vì có nhiều cảnh 3D trùng nhau nên việc phỏng đoán dựng hình là cần thiết, nếu hệ thống phải dựng nhiều hình trùng nhau sẽ không hiệu quả và tiêu hao tài nguyên. Ngoài ra, trong giai đoạn rasterization có đệm dữ liệu Z (gọi là Early Z). Dữ liệu Z dựa trên điểm ảnh, loại bỏ những điểm ảnh nào không hiển thị ra màn hình trong quá trình render cuối cùng. Ví dụ bạn chỉ thấy được 3 mặt của một khối vuông 6 mặt ở bất kỳ góc độ nào. Nên nếu hệ thống render cả 3 mặt khuất thì phí nguồn lực và thời gian. Với các mô hình càng phức tạp thì Early Z càng tỏ ra có ích. Tuy nhiên, kỹ thuật Early Z không phải loại bỏ được hết những điểm ảnh không nhìn thấy. Kỹ thuật Early Z đã có từ các phiên bản DirectX trước đây nhưng trong DirectX 10, nó không cần đến nguồn lực của CPU nữa.

    Giai đoạn cuối cùng trong ống lệnh DirectX 10 là Output Merger, tạo màu cho điểm ảnh, hay hiện hình điểm ảnh. Dữ liệu về điểm ảnh lấy từ bộ đổ bóng điểm, nội dung của đối tượng render và từ bộ đệm chiều sâu/khuôn. Dữ liệu từ bộ đệm chiều sâu/khuôn cũng quyết định điểm ảnh đó có được hiển thị hay không (còn gọi là z-buffering). Kế tiếp, Output Merger trộn nhiều điểm ảnh thành 1 điểm ảnh cuối cùng nếu cần thiết, còn không, điểm ảnh sẽ xuất trực tiếp từ Pixel Shader Output.

     

    DirectX 10.1

     
     

    Tuy các nhà phát triển phần cứng và game đang phải vất vả bám theo Microsoft với bản DirectX 10 thì hãng đã hăm he tung ra bản nâng cấp DirectX 10.1. Tuy chưa có chi tiết cụ thể nhưng Microsoft cũng đã hé lộ cho các nhà phát triển một số điểm thêm vào của DirectX 10.1.
    Tập API sẽ được chỉnh sửa lại, trong đó đáng chú ý là bộ lọc điểm động (floating-point filtering) 16-bit được nâng lên 32-bit. Điều này có nghĩa là chất lượng render High Dynamic Range sẽ được nâng lên đáng kể.
    Bên cạnh đó, phiên bản mới sẽ có tính năng khử răng cưa toàn phần, cho phép ứng dụng sử dụng khử răng cưa theo cả multi-sample lẫn super-sample và khả năng chọn mẫu khử nào tốt nhất tùy cảnh. Khử răng cưa super-sample cho chất lượng hình ảnh mượt mà hơn nhiều so với multi-sample nhưng rất ngốn tài nguyên hệ thống. Ngoài ra, ứng dụng sẽ còn có khả năng tạo mặt phủ điểm ảnh (pixel coverage mask), mặt phủ này giúp ứng dụng ước lượng các mẫu cho một vùng điểm ảnh. Điều này thực sự hữu ích khi phải xử lý khử răng cưa cho các đối tượng, khung cảnh... có hiệu ứng chuyển động mờ. Để tăng cường khả năng khử răng cưa, DirectX 10.1 hỗ trợ tối thiểu 4 mẫu/điểm ảnh (4x anti-liasing).
    WDDM phiên bản 2.0 được nâng lên phiên bản 2.1 với 2 cải tiến quan trọng: khả năng chuyển qua lại giữa các ứng dụng 3D tốt hơn và giải quyết được lỗi page fault.
    Hiện thời, theo lộ trình sản phẩm mới nhất của AMD/ATI, hãng đang rục rịch chuẩn bị tung ra GPU RV670, R670 cho nền để bàn và 3 GPU cho nền di động là M88, M86 và M82. Các GPU trên đều sẽ hỗ trợ DirectX 10.1 và CrossFire, được sản xuất trên quy trình 55nm.

     

    Model Shader 4.0

    Để có được một ống lệnh được nâng cấp chi tiết ở từng giai đoạn khác nhau như đề cập trên, mọi chuyện đều dựa trên định chuẩn mới: Model Shader 4.0. Từ bản Model Shader 1.1 (có trong DirectX 8) cho đến nay, cứ lên mỗi phiên bản thì số tập lệnh (instruction) và thanh ghi (register) nhiều hơn. Mục tiêu nâng cấp là Microsoft muốn nới càng lỏng ràng buộc càng tốt cho các nhà phát triển. Các chi tiết kỹ thuật giữa bộ đổ bóng điểm, bộ đổ bóng đỉnh gần như nhau (cả bộ đổ bóng hình học nữa). Tuy nhiên, với SM4 thì bộ đổ bóng đỉnh, điểm và hình học cùng chia sẻ công việc cho nhau, tối ưu hóa quá trình render đỉnh và điểm, điều mà Microsoft gọi là hợp nhất các bộ đổ bóng (xem thêm bài “NVIDIA GeForce 8 định chuẩn mới”, ID: A0702_94 để biết thêm mô hình hợp nhất này). Đây là điểm đột phá của SM 4.0 so với các phiên bản trước (bên cạnh việc tăng số lượng các tập lệnh, thanh ghi).

    So sánh với bản SM 3.0 của DirectX 9.0c, bản SM 4.0 có những cải tiến vượt bậc:

    Số tập lệnh tăng từ 512 lên 65536, hơn gấp 128 lần và không bị giới hạn số lệnh thực thi. Số thanh ghi tạm cũng tăng từ 32 lên 4096; nhưng với 32 thanh ghi tạm thì các nhà sản xuất không phải tích hợp nhiều thứ vào phần cứng, tối ưu hóa được tốc độ. Với 4096 thanh ghi tạm, trình điều khiển sẽ phải hỗ trợ bộ đổ bóng có khả năng tận dụng nhiều thanh ghi. Ngoài ra, SM 4.0 hỗ trợ hoàn toàn tính toán số nguyên 32 bit (integer) thêm vào tính toán dấu chấm động (floating point). Số đối tượng render cũng tăng lên 8 (SM 3.0 là 4)...

     

    CÁC THƯ VIỆN ĐỒ HỌA ĐÁNG CHÚ Ý KHÁC (RENDERING API)

     
     

    DirectX 9.0Ex
    Còn có tên khác là DirectX 9.L (có người cho rằng L viết tắt từ “Longhorn”), được xem là bước đệm của DirectX 10. Vì DirectX 10 chỉ chạy trên nền Vista, DirectX 9.0Ex có những tính năng (không hoàn toàn) của DirectX 10 và có thể chạy trên nền Windows XP. Đáng chú ý DirectX 9.0Ex có khả năng ảo hóa và một số chức năng khác. Ví dụ như bạn chạy 2 ứng dụng cùng lúc với giao diện bề mặt đồ họa khác nhau thì DirectX 9.0Ex có thể chia sẻ những dữ liệu bề mặt đồ họa chung. Vì có khả năng ảo hóa để chạy nhiều ứng dụng đồ họa, 9.0Ex tận dụng triệt để dung lượng bộ nhớ để đệm dữ liệu. Do đó hệ thống cần được trang bị bộ nhớ RAM thật nhiều. Đương nhiên 9.0Ex có chức năng quản lý hoàn toàn bộ nhớ. Ngoài ra, vì có khả năng xử lý cùng lúc đa luồng nên 9.0Ex cũng có cơ chế quản lý nguồn tài nguyên, đưa ra mức độ ưu tiên cho từng luồng. Hai chức năng mới khác của bản 9.0Ex là hỗ trợ khử răng cưa văn bản và giải quyết được sự cố đứng máy do lỗi trình điều khiển, ví dụ như thông báo lỗi device_lost.

    OpenGL
    Thư viện đồ họa OpenGL do SGI (Silicon Graphics) phát triển vào năm 1992 (OpenGL.org). Phiên bản mới nhất của OpenGL là 2.1 (tháng 8/2006, có tên mã là Longs Peak). Sắp đến (chưa biết thời gian cụ thể nhưng trong khoảng giữa năm nay), OpenGL sẽ nâng lên bản OpenGL 3.0 với tên mã là Mount Evans và chỉ hỗ trợ cho phần cứng DirectX 10 (được sản xuất sau ngày 8/11/2006). OpenGL 3.0 sẽ có những tính năng mới đáng chú ý như render tức thời, xuất dữ liệu đỉnh ra bộ đệm, hỗ trợ nhiều định dạng texture mới... và đáng chú ý nhất là OpenGL có liên kết với thư viện OpenGL ES là thư viện đồ họa 3D cho nền tảng di động. OpenGL ES được xem là át chủ bài trên nền di động, nền mà DirectX của Microsoft chưa thể chiếm lĩnh được. Ngoài ra, các ứng dụng thiết kế đồ họa lớn đều sử dụng OpenGL, không dùng DirectX, như là Maya, AutoCAD, Cinema4D, 3DS Max... Mảng game dùng OpenGL có lẽ đáng chú ý nhất là World Of Warcraft...
    Khác với DirectX là tập lệnh “đóng”, OpenGL là tập API nguồn mở. OpenGL có trên hầu hết các nền hệ điều hành phổ biến: Windows, Unix, Linux, Mac OS X, cả trên hệ console Wii và PlayStation 3. Trừ 2 nền Windows và Xbox, các hệ điều hành khác đều có khả năng tận dụng thư viện API của OpenGL làm công cụ chính để tăng tốc đồ họa 3D trên phần cứng.
    Với trình điều khiển OpenGL của riêng Microsoft, trừ Vista, các hệ điều hành Windows trước đó đều không có bộ tăng tốc phần cứng dựa trên OpenGL. Do đó, những phiên bản Windows cũ bắt người dùng phải cài trình điều khiển ICD (installable client drivers) do nhà sản xuất card đồ họa đưa ra cho riêng hỗ trợ phần cứng của OpenGL. Thực chất, những trình điều khiển ICD đã có trong trình điều khiển card đồ họa.
    Trong Vista, Microsoft đưa bộ tăng tốc đồ họa OpenGL vào theo 3 cách. Cách đầu tiên là ánh xạ các lệnh OpenGL thành các lệnh Direct3D, điều này có thể xem là “chuẩn hóa” việc cài đặt nhưng các lệnh OpenGL ánh xạ sang Direct3D chỉ tương đương với bản OpenGL 1.4. Cách thứ 2 là cài đặt OpenGL của XP nhưng lúc này bạn sẽ không chạy được giao diện đồ họa Aero. Cách cuối cùng là cài đặt bản OpenGL đầy đủ, chạy chính trong Vista, có thể truy cập đến GPU.

    GDI/GDI+

    GDI (Graphics Device Interface) là một thư viện đồ họa khác, được xem là thư viện đồ họa cơ bản và già. GDI xử lý đồ họa ở mức cơ bản nhất, như vẽ đường, render font... và khả năng scaling (phóng to/thu nhỏ) đối tượng trên nhiều thiết bị.

     
     

    Tuy nhiên, GDI chỉ dừng ở mức đồ họa 2D, không có khả năng đồ họa 3D. Trong Windows XP, GDI được nâng cấp lên GDI+, được phát triển trên ngôn ngữ C++, thêm vào một số tính năng như khử răng cưa cho đồ họa 2D, đổ bóng, thêm nhiều khả năng quản lý lệnh tiên tiến, hỗ trợ định dạng tập tin ảnh JPEG, PNG...
    Sang đến Vista, GDI/GDI+ hầu như được nhúng trọn vào Desktop Windows Manager (DWM). Do đó, các vấn đề liên quan đến giao diện cửa sổ trong Windows Vista như phóng to/thu nhỏ cửa sổ, di chuyển cửa sổ, độ trong suốt... đều được thực hiện ở nền cho dù chưa được hiển thị lên màn hình. Khi bạn mở cửa sổ nào đó lên thì cửa sổ đó không cần render nữa nên tốc độ thực hiện hoặc tốc độ đáp ứng khi chuyển giữa các cửa sổ trong Vista rất nhanh.

     
     

    NVIDIA và ATI

    Đối với 2 đại gia sản xuất chip đồ họa, DirectX 10 đã khiến họ phải chuyển hướng, định hướng lại sản phẩm vì bây giờ họ có thể đưa ra những khả năng mới, mạnh mẽ cho sản phẩm của mình. Có thể xem DirectX 10 là “vị cứu tinh” cho CPU vì mọi giai đoạn ống lệnh đồ họa của nó đều cố gắng tách ra khỏi CPU càng nhiều càng tốt. Bộ đổ bóng hình học, Stream Output và sự hợp nhất trong kiến trúc GPU rõ ràng khiến ATI và NVIDIA phải nghĩ ra những công nghệ mới hơn đem đến cho người dùng, mà cụ thể là game thủ. Tuy DirectX 10 có một ống lệnh mới, thống nhất nhưng qua bàn tay nhào nặn của NVIDIA và ATI, ống lệnh này có thay đổi chút ít.

    Đối với AMD/ATI, chuyển sang kiến trúc hợp nhất các đơn vị bóng đổ có thể xem là một đà tiến mới từ các kiến trúc cũ. Kiến trúc hợp nhất cần có một cơ chế quản lý luồng xử lý dữ liệu tốt. Với dòng Radeon x1000 thì ATI đã làm được điều này rồi nhưng hãng chỉ dừng lại ở bộ đổ bóng điểm. Với kiến trúc hợp nhất mới, cả 3 bộ đổ bóng được xử lý trong 1 quá trình duy nhất, khép kín, tận dụng triệt để hiệu suất của GPU. Đây cũng là lợi thế của AMD/ATI so với NVIDIA vì hãng đã có những kinh nghiệm trong việc chế tác luồng xử lý điểm ảnh.

    Với NVIDIA, xem biểu đồ, bạn thấy quá trình xử lý điểm ảnh nằm gần cuối ống lệnh. Do vậy, nếu chuyển từ ống lệnh xử lý tuần tự truyền thống sang kiến trúc hợp nhất thì NVIDIA sẽ gặp rủi ro cao hơn ATI vì sẽ ảnh hưởng đến quá trình render hình ảnh cuối cùng. Hơn nữa, chi phí sản xuất chip dựa trên kiến trúc hiện thời của NVIDIA thấp hơn so với của AMD/ATI. Vì thế việc không hợp nhất hoàn toàn cả 3 bộ đổ bóng trong dòng chip GeForce 8 giúp NVIDIA đảm bảo được tốc độ xử lý và duy trì ưu thế về chi phí.

    NVIDIA đã tung ra chip GeForce 8800 hỗ trợ đầy đủ DirectX 10 và ATI/AMD tiếp bước với chip Radeon 2900XT và nhiều hãng sản xuất card đã đưa ra sản phẩm ứng dụng 2 GPU đồ họa này. Những “đối thủ” khác như XGI, S3 hay Matrox vẫn chưa có động thái gì về hỗ trợ DirectX 10. Hiện thời, ta không thể so sánh về hiệu năng của card NVIDIA và AMD/ATI ai hơn ai về DirectX 10 vì thị trường game hỗ trợ chưa “chín tới” và còn nhiều ứng dụng vẫn còn phát triển trên nền DirectX cũ. Hơn nữa, ta cũng chưa biết được sau này các nhà phát triển sẽ đứng về phe nào. Nhưng rõ ràng tốc độ xử lý đồ họa không hoàn toàn phụ thuộc vào kiến trúc mới, mà còn vào mật độ chip (kích thước wafer), tần số hoạt động... NVIDIA vẫn đi trước một bước về kích thước chip, AMD/ATI trội hơn về kiến trúc hợp nhất.

    Ống lệnh của NVIDIA, dòng card GeForce 8800 (trái) và của AMD/ATI dòng Radeon 2900.

    Tham khảo: MSDN; Behardware.com; Elitebastards.com.


    ID: A0707_122