Tài liệu này giải thích lý do tại sao WebGPU có thể không hoạt động hoặc không hoạt động như mong đợi trong trình duyệt Chrome, với các bước rõ ràng để giải quyết vấn đề nếu có thể.
navigation.gpu là không xác định
Ví dụ sau đây minh hoạ lỗi JavaScript mà bạn có thể gặp phải khi gpu
không có trong navigator
:
const adapter = await navigator.gpu.requestAdapter();
cancel Uncaught TypeError: Cannot read properties of undefined (reading 'requestAdapter')
Điều này có thể là do một trong những lý do sau. Hãy xem các sản phẩm đó theo thứ tự cụ thể sau:
WebGPU yêu cầu Chrome 113 trở lên trên ChromeOS, macOS, Windows và Chrome 121 trở lên trên Android. Hãy kiểm tra phiên bản của bạn tại
chrome://version
và cập nhật nếu cần.Hiện không thể truy cập WebGPU từ một trình chạy dịch vụ hoặc một trình chạy dùng chung. Nếu bạn sử dụng trình chạy dịch vụ hoặc trình thực thi dùng chung, hãy di chuyển mã WebGPU sang một trình thực thi chuyên dụng hoặc trình thực thi cửa sổ chung.
WebGPU chỉ có thể truy cập được qua các ngữ cảnh an toàn. Nếu bạn phân phát mã qua một giao thức không an toàn (ví dụ:
http:
,file:
), hãy sử dụng giao thứchttps:
bảo mật hoặc giải quyết vấn đề này trong quá trình phát triển ứng dụng web theo một trong những cách sau:Phân phát mã của bạn cục bộ trên
http://localhost
hoặchttp://127.0.0.1
bằng một trong các lệnh sau:npx http-server
hoặcpython3 -m http.server
.Thêm nguồn gốc này vào danh sách "Các nguồn gốc không an toàn được coi là an toàn" của
chrome://flags/#unsafely-treat-insecure-origin-as-secure
rồi khởi động lại Chrome.Cài đặt Node.js và chạy
npx servez --ssl
để phân phát thư mục của bạn qua https bằng chứng chỉ giả mạo. Bạn vẫn sẽ nhận được cảnh báo trong Chrome mà bạn có thể bỏ qua bằng cách nhấp vào "Nâng cao" rồi nhấp vào "Tiếp tục...".Hiển thị máy chủ web cục bộ của bạn trên Internet bằng ngrok.
Bộ điều hợp GPU bị rỗng
Sau đây là ví dụ về lỗi JavaScript mà bạn có thể gặp phải khi bộ chuyển đổi bạn nhận được từ việc gọi requestAdapter()
có giá trị rỗng:
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
cancel Uncaught TypeError: Cannot read properties of undefined (reading requestDevice)
Điều này xảy ra vì một trong những lý do sau. Hãy xem các sản phẩm đó theo thứ tự cụ thể sau:
WebGPU sẽ bị tắt khi người dùng tắt tuỳ chọn "Sử dụng tính năng tăng tốc đồ hoạ khi có" trong
chrome://settings/system
. Kiểm tra xem chế độ cài đặt này đã tắt hay chưa rồi bật lạiWebGPU chưa được hỗ trợ trên nền tảng này. Bạn có thể bật cờ
chrome://flags/#enable-unsafe-webgpu
và khởi động lại Chrome. Để hỗ trợ thử nghiệm cho Linux, bạn cũng cần bật cờchrome://flags/#enable-vulkan
. Hãy xem bài viết hỗ trợ WebGPU trong giao diện người dùng Chrome để tìm hiểu thêm.Phần cứng GPU đã bị đưa vào danh sách chặn. Nếu thấy thông báo "WebGPU đã bị tắt qua danh sách chặn hoặc dòng lệnh" trong
chrome://gpu
, bạn có thể tắt danh sách chặn bộ chuyển đổi WebGPU bằng cách bật cờchrome://flags/#enable-unsafe-webgpu
và khởi động lại Chrome.Không có bộ chuyển đổi GPU nào phù hợp với các tuỳ chọn được truyền vào
requestAdapter()
. Hãy thử gọirequestAdapter()
bằng các tuỳ chọn khác.WebGPU yêu cầu GPU (mô phỏng phần cứng hoặc phần mềm). Bạn có thể kiểm tra xem Chrome có phát hiện thấy GPU hay không bằng cách truy cập
chrome://gpu
.
WebGPU chậm hơn WebGL
Mở
chrome://gpu
và đảm bảo bạn có thể đọc phần "WebGPU: Hardware Accelerated Accelerated (Đã tăng tốc phần cứng)". Nếu bạn đọc "WebGPU: Chỉ phần mềm, tăng tốc phần cứng không khả dụng", bạn có thể cần phải cập nhật trình điều khiển GPU của mình.Việc dịch trực tiếp các khái niệm WebGL sang WebGPU có thể không tận dụng được hết khả năng tối ưu hóa độc đáo của WebGPU. Hãy khám phá nội dung Từ WebGL đến WebGPU để tìm hiểu về một số khác biệt giữa hai thiết bị này.
Giới hạn dành riêng cho Windows
Hãy lưu ý các hạn chế sau khi sử dụng WebGPU trên thiết bị Windows:
Chrome không hỗ trợ sử dụng đồng thời nhiều bộ điều hợp GPU. Xem phần vấn đề về crôm:329211593.
Chrome luôn sử dụng cùng một bộ chuyển đổi GPU được phân bổ cho các tải công việc khác trên Chrome, đối với máy tính xách tay thường là thẻ đồ hoạ tích hợp do khía cạnh sử dụng điện năng (ví dụ: tiết kiệm điện năng). Điều này có nghĩa là tuỳ chọn
powerPreference
không có bất kỳ ảnh hưởng nào khi gọirequestAdapter()
.