Phát hành D9VK 0.40, triển khai Direct3D 9 trên Vulkan

diễn ra phát hành dự án Đ9VK 0.40, cung cấp triển khai Direct3D 9 hoạt động bằng cách dịch các lệnh gọi sang API đồ họa Vulkan. Dự án dựa trên codebase của dự án phần mở rộng DXVK, đã được mở rộng để hỗ trợ Direct3D 9. So với triển khai Direct3D 9 dựa trên WineD3D, D9VK đạt được hiệu suất tốt hơn vì dịch Direct3D 9 qua OpenGL chậm hơn so với dịch qua Vulkan.

D9VK có thể được sử dụng để chạy các ứng dụng và trò chơi 3D trên Linux bằng Wine. Hầu hết các trò chơi dựa trên Direct3D 9 sử dụng phiên bản 2 hoặc 3 của Shader Model đều được hỗ trợ. Mã số dự án phân phối bởi theo giấy phép Zlib miễn phí. D9VK yêu cầu trình điều khiển hỗ trợ API Vulkan, chẳng hạn như AMD RADV 18.3+, NVIDIA 415.22+, Intel ANV 19.0+ và AMDVLK.

Cải tiến chính:

  • Khả năng sử dụng hơn 4 GB bộ nhớ video trong các ứng dụng 32 bit đã được triển khai, giúp giải quyết các vấn đề khi khởi chạy mod cho trò chơi Skyrim và Oblivion;
  • Đã bật xử lý không đồng bộ hiển thị kết quả hiển thị trên màn hình (giai đoạn trình bày). Để giảm độ trễ trên luồng kết xuất chính, quá trình xử lý đầu ra được thực hiện trong luồng gửi lệnh;
  • Đã xóa các điểm đồng bộ hóa luồng lệnh không cần thiết khi truy xuất dữ liệu được yêu cầu;
  • Mã để xác định thời gian nội bộ đã được dịch sang sử dụng bộ đếm thời gian dành riêng cho nền tảng, giúp giải quyết các vấn đề về hoạt động không chính xác của high_solution_clock từ MinGW;
  • Bộ đệm hoãn lại MANAGED và SYSTEMMEM đã được dỡ bỏ ở giai đoạn trước khi thực hiện Chuẩn bị, giải quyết các vấn đề về hiệu suất trong các trò chơi Risen và Legend of the Heroes: Trails of the Sky;
  • Đã thêm hỗ trợ D3DTA_CONSTANT, điều này giúp có thể triển khai kết xuất chính xác hiệu ứng phát sáng trong trò chơi SpinTyres và Mudrunner;
  • Cải thiện khả năng tương thích với DirectX 9Ex (D3D9Ex). Các chi tiết cụ thể về xử lý ResetEx và Reset được tính đến;
  • Mã được làm sạch và tái cấu trúc;
  • Ánh xạ trực tiếp các bộ đệm WRITEONLY được cung cấp, điều này có thể có tác động tích cực đến hiệu suất và bỏ qua lỗi trong trò chơi
    Counter-Strike: Global Offensive, dẫn đến việc tiếp tục ghi vào bộ đệm sau khi được mở khóa;

  • Phương pháp thực hiện SetDialogBoxMode, cho phép bạn sử dụng hộp thoại trong các ứng dụng toàn màn hình;
  • Hỗ trợ đã triển khai trộn các đỉnhBao gồm trộn đỉnh được lập chỉ mục, bắt buộc đối với SWVP (Xử lý phần mềm Vertex);
  • Bộ đếm mẫu, hiển thị phía trên hình ảnh hiện tại (màn hình hiển thị hướng lên trên, HUD), đã được thiết kế lại;
  • Đã thêm tùy chọn d3d9.dialogBoxMode, có thể được sử dụng để tắt chỉ hoạt động ở chế độ toàn màn hình;
  • Thực hiện tối ưu hóa hiệu suất và giải quyết các vấn đề xảy ra khi khởi chạy các trò chơi GTA: San Andreas, The Masquerade Bloodlines, Max Payne 2, The Sims 2, Silent Hunter 3, Senran Kagura Shinovi, Dungeons and Dragons, Crysis, Metal Slug X, ANGLE, Need for Tốc độ: Carbon và Risen 1.

Ngoài ra, có thể ghi nhận ý định nhà phát triển dự án phần mở rộng DXVK (việc triển khai DXGI, Direct3D 10 và Direct3D 11 trên API Vulkan) sẽ tạm thời chỉ tập trung nỗ lực vào việc sửa lỗi, làm chậm quá trình mở rộng chức năng. Mong muốn tương tự gây ra bởi lo ngại về việc giảm chất lượng của cơ sở mã và việc bảo trì khó khăn hơn trong tương lai. Mỗi bản cập nhật lên nhánh 1.4.x đều gây ra khiếu nại về những thay đổi lũy thoái không thể sao chép, bản địa hóa và sửa lỗi.

Những vấn đề này yêu cầu phân tích lý do xảy ra, nếu không, việc không khắc phục chúng trong khi tiếp tục tăng cường chức năng chỉ có thể làm tình hình trở nên trầm trọng hơn và biến quá trình bảo trì thành một cơn ác mộng. Các kế hoạch mà nhà phát triển DXVK dự định thực hiện trước khi chuyển sang chế độ chỉ sửa lỗi bao gồm bổ sung hỗ trợ cho một số tiện ích mở rộng Vulkan hữu ích và hợp nhất với sự phát triển của dự án D9VK.

Ngoài ra: nóng bỏng trên gót chân hình thành bản phát hành khắc phục D9VK 0.40.1, trong đó đã sửa đặt vec4(1) thành giá trị mặc định cho COLOR0 trong trình đổ bóng đỉnh và sửa lỗi trong đó các bit khe đầu ra của trình đổ bóng mặc định được áp dụng không chính xác và do đó được chương trình phụ trợ sửa không chính xác, khiến chúng bị thay thế bằng vec4(0).

Nguồn: opennet.ru

Thêm một lời nhận xét