
D7VK 2.2 hiện đã có sẵn dưới dạng phiên bản mới của lớp chuyển đổi đồ họa được thiết kế để chạy các trò chơi Windows kinh điển trên Linux. Dự án này, được phát triển từ DXVK, tập trung vào việc chuyển đổi các API Direct3D 7, 6, 5 và 3 cũ hơn sang Vulkan để sử dụng với Wine và Proton, và phiên bản mới này dành một phần đáng kể công sức cho một trong những lĩnh vực vẫn còn nhiều thiếu sót nhất: hỗ trợ Direct3D 3.
Bản cập nhật này ra mắt chỉ vài tuần sau D7VK 2.1 và tiếp tục quá trình hoàn thiện của một công nghệ đặc biệt thú vị đối với những người muốn chơi các trò chơi từ cuối những năm 90 và đầu những năm 2000 trên các hệ thống Linux hiện đại. Ngoài việc cải thiện Direct3D 3, D7VK 2.2 còn tích hợp nhiều bản sửa lỗi và điều chỉnh nội bộ, và dựa trên phiên bản DXVK 3.1 gần đây.
D7VK 2.2 tập trung vào Direct3D 3.
Tính năng mới chính trong D7VK 2.2 liên quan đến Direct3D 3, một API đã phần nào tụt hậu so với các công nghệ cũ hơn được dự án hỗ trợ. Mặc dù các trò chơi Direct3D 3 mà nhà phát triển đã thu thập và thử nghiệm đều hoạt động với D7VK, nhưng vẫn còn một số trường hợp ngoại lệ và hành vi chưa được triển khai chính xác.
Điều này đặc biệt gây khó khăn vì việc tái tạo lại danh mục các trò chơi sử dụng Direct3D 3 rất phức tạp. Đó là những tựa game rất cũ, nhiều trong số đó không còn được bán trên thị trường hoặc rất khó tìm, khiến việc kiểm tra tất cả các cách triển khai có thể gặp phải trong thực tế trở nên đầy thách thức.
Với phiên bản này, nhà phát triển đã sửa đổi phần lớn cách triển khai Direct3D 3 để đưa nó đến gần hơn với mức độ hoàn thiện đạt được bởi các API khác tương thích với D7VK.
Hành vi của các thiết bị D3D3 phù hợp với thiết kế ban đầu.
Một trong những thay đổi kỹ thuật liên quan đến việc làm lại hệ thống đếm tham chiếu cho các thiết bị Direct3D 3. D7VK 2.2 sửa đổi cơ chế này để hoạt động của nó phù hợp với cách triển khai API gốc.
Loại chi tiết này có vẻ không quan trọng đối với người dùng, nhưng nó lại rất cần thiết trong lớp dịch thuật. Các trò chơi cũ có thể dựa vào các hành vi cụ thể liên quan đến việc tạo và hủy đối tượng, và một sự khác biệt tưởng chừng nhỏ cũng có thể dẫn đến những lỗi khó chẩn đoán.
Do đó, cách triển khai mới này làm giảm khả năng một số tựa game không thể quản lý thiết bị đồ họa theo cách mà D7VK không lường trước được.
D7VK 2.2 giới thiệu những cải tiến về độ trong suốt bằng cách sử dụng khóa màu.
D7VK 2.2 cũng sửa đổi việc quản lý phím màu trên các thiết bị Direct3D 3 thuần túy. Cho đến nay, dự án đã sử dụng một mô hình rất đơn giản, trong đó chức năng này luôn được bật trong một số trường hợp nhất định.
Phiên bản mới cho phép kiểm soát chính xác thời điểm kích hoạt tính năng này, tái tạo chân thực hơn hoạt động của Direct3D 3. Điều này đặc biệt quan trọng đối với các trò chơi cũ sử dụng kỹ thuật trong suốt dựa trên các màu sắc cụ thể.
Ngoài ra, các phép tính liên quan đến dải màu chuẩn hóa đã được tối ưu hóa. Các giá trị này hiện chỉ được cập nhật khi mô tả bề mặt thay đổi, cho phép chúng được lưu vào bộ nhớ đệm và sử dụng lại sau này.
Kết quả mong muốn là hiệu năng sẽ được cải thiện ở mức độ nhỏ đến trung bình trong các trò chơi sử dụng độ trong suốt của khóa màu, cũng như hoạt động chính xác hơn.
Các trường hợp biên trong bộ đệm thực thi được sửa lỗi.
Một khía cạnh quan trọng khác của D7VK 2.2 là việc sửa đổi các quy tắc kiểm tra bộ đệm thực thi Direct3D 3. Dự án đã tổ chức lại một phần logic này để giải quyết các trường hợp ngoại lệ khác nhau được xác định trong quá trình thử nghiệm.
Để kiểm chứng hoạt động dự kiến của API, nhà phát triển cũng đã dựa vào các bài kiểm tra Wine liên quan cụ thể đến Direct3D 3. Các bài kiểm tra này cho phép so sánh hoạt động của D7VK với hoạt động dự kiến từ một triển khai tương thích và phát hiện những khác biệt có thể không được chú ý khi chỉ sử dụng các trò chơi quen thuộc.
Công trình này đặc biệt có giá trị đối với một API cũ như vậy, nơi mà các tài liệu có sẵn để kiểm thử rất khan hiếm và không phải lúc nào cũng bao quát hết tất cả các khả năng của phiên bản gốc.
Độ bền cao hơn đối với các texture Direct3D 5 và 3.
Bản cập nhật này không chỉ giới hạn ở Direct3D 3. D7VK 2.2 cũng cải thiện khả năng xử lý các texture được sử dụng bởi Direct3D 5 và Direct3D 3 để ngăn các bề mặt bên dưới bị vượt quá phạm vi trong khi vẫn đang được sử dụng.
Sự thay đổi này giúp tăng cường độ ổn định của việc xử lý tài nguyên đồ họa và có thể giải quyết các lỗi chỉ xuất hiện trong một số chuỗi thao tác nhất định. Nhà phát triển cũng lưu ý rằng cải tiến này đã có tác động tích cực đến trò chơi Frogger , được phát hành lần đầu vào năm 1997.
Bản vá này cho thấy những thay đổi nội bộ nhằm giải quyết các vấn đề quản lý tài nguyên có thể gây ra những ảnh hưởng rõ rệt đến các trò chơi cụ thể, ngay cả khi bản sửa đổi đó không được thiết kế dành riêng cho chúng.
D7VK 2.2 cũng sửa các vấn đề về phép biến đổi và ma trận.
D7VK 2.2 cũng khắc phục một lỗi liên quan đến việc chuyển đổi bộ đệm thực thi Direct3D 3. Vấn đề này do việc xác định sai định dạng FVF được sử dụng cho đầu vào đỉnh gây ra.
Một vấn đề liên quan đến tính toán ma trận chiếu cũ cũng đã được khắc phục. Lỗi này được phát hiện thông qua một bài kiểm tra Wine không hoạt động như mong đợi và có thể ảnh hưởng tiêu cực đến một số ứng dụng Direct3D 6, 5 và 3.
Những thay đổi này càng chứng minh tầm quan trọng của việc kiểm tra khả năng tương thích đối với D7VK. Nhiều vấn đề với các API đồ họa cũ không nhất thiết xuất hiện trong các trò chơi phổ biến nhất, mà thay vào đó là ở những sự kết hợp cụ thể của các tính năng có thể bị ẩn giấu trong nhiều năm.
Giảm chi phí xử lý cho các đường dẫn vẽ cũ.
Phiên bản mới cũng sắp xếp lại đường dẫn vẽ. Begin() / Vertex() / End() Được sử dụng bởi Direct3D 6 và Direct3D 5. Việc sửa đổi này giúp giảm mức tiêu thụ bộ nhớ và mang lại một chút cải thiện hiệu năng.
Một lần nữa, Frogger lại là một trong những trò chơi có thể hưởng lợi từ sự thay đổi này. Mặc dù việc tối ưu hóa này sẽ không làm tăng gấp đôi FPS của tất cả các tựa game cổ điển, nhưng nó giúp giảm bớt một số chi phí phát sinh trên các đường dẫn được sử dụng bởi các API cũ hơn.
D7VK đã được tối ưu hóa hiệu năng đáng kể trong các phiên bản trước, vì vậy công việc hiện tại đang tập trung nhiều hơn vào việc hoàn thiện quá trình triển khai và loại bỏ các chi phí không cần thiết.
D7VK 2.2 là một phần của DXVK 3.1
Một tính năng quan trọng khác của phiên bản này là D7VK 2.2 đã được thay thế bằng DXVK 3.1 . Điều này cho phép dự án tận dụng nền tảng mới hơn và giữ cho quá trình triển khai phù hợp với sự phát triển của DXVK.
Mối quan hệ giữa hai dự án này đặc biệt quan trọng. D7VK ban đầu là một nhánh phát triển từ DXVK, chuyên về các API Direct3D cũ hơn không được DXVK tiêu chuẩn hỗ trợ, trong khi cả hai đều sử dụng Vulkan làm đích đến cho các lệnh gọi đồ họa bắt nguồn từ Windows.
Nhờ mối quan hệ này, những cải tiến về cấu trúc mà DXVK mang lại có thể đóng vai trò là nền tảng để D7VK tiếp tục phát triển mà không cần phải xây dựng lại toàn bộ cơ sở hạ tầng cần thiết để giao tiếp với Vulkan từ đầu.
Một dự án được thiết kế để hồi sinh các trò chơi kinh điển.
D7VK có một mục tiêu rất cụ thể trong hệ sinh thái Linux: cho phép các trò chơi Windows sử dụng Direct3D 7, 6, 5 và 3 chạy bằng Vulkan. Điều này tạo nên sự khác biệt so với DXVK, vốn chủ yếu tập trung vào Direct3D 9, 10 và 11.
Tầm quan trọng của dự án càng tăng lên đối với những tựa game phụ thuộc vào các công nghệ đồ họa mà Wine không trực tiếp triển khai theo cùng một cách hoặc có thể hưởng lợi từ việc chuyển đổi chính xác hơn sang Vulkan.
Bằng cách kết hợp D7VK với Wine hoặc Proton, người dùng Linux có thể khôi phục một lượng lớn phần mềm từ cuối thế kỷ 20 và đầu thế kỷ 21 mà không nhất thiết phải sử dụng lại bản cài đặt Windows cũ.
Đối với những người sử dụng Wine hoặc Proton để chơi game trên Linux và quan tâm đến việc hồi sinh các tựa game kinh điển, D7VK 2.2 củng cố một trong những thành phần quan trọng nhất của cơ sở hạ tầng tương thích. Và mặc dù nhiều cải tiến của nó có thể không hiển thị rõ ràng với người dùng, mỗi bản vá lỗi đều làm tăng cơ hội để một trò chơi bị mất trong kỷ nguyên Direct3D 3, 5, 6 hoặc 7 có thể hoạt động chính xác trở lại trên hệ thống Linux hiện đại.