Di chuyển tập lệnh sang Vulkan

Đối với tải công việc mà điện toán GPU là giải pháp lý tưởng, việc di chuyển tập lệnh RenderScript sang điện toán Vulkan sẽ giúp ứng dụng có thể quyền kiểm soát trực tiếp hơn đối với phần cứng GPU, qua đó có thể giúp tăng hiệu suất so với các API khác.

Dưới đây là thông tin tổng quan cấp cao để giúp bạn sử dụng chương trình tính toán đổ bóng Vulkan để thay thế tập lệnh RenderScript.

Khởi chạy Vulkan

Thay vì tạo đối tượng bối cảnh RenderScript trong Kotlin hoặc Java, hãy thực hiện các bước sau để tạo một bối cảnh Vulkan bằng NDK.

  1. Tạo một thực thể Vulkan.

  2. Chọn một thiết bị thực tế Vulkan có hỗ trợ hàng đợi điện toán.

  3. Tạo một thiết bị logic Vulkan và lấy hàng đợi điện toán.

Bạn có thể tuỳ ý thiết lập các lớp xác thực Vulkan trên Android để tăng tốc độ phát triển ứng dụng bằng Vulkan.

Ứng dụng mẫu minh hoạ cách khởi chạy ngữ cảnh Vulkan trong VulkanContext.h. Để tìm hiểu thêm, hãy xem các phần Khởi độngThiết bị và Hàng đợi trong tài liệu thông số kỹ thuật Vulkan.

Lớp truyền dữ liệu giữa các nhân Vulkan (Vulkan Allocation)

Bạn có thể di chuyển lớp truyền dữ liệu giữa các nhân RenderScript sang hình ảnh lưu trữ Vulkan hoặc vùng đệm lưu trữ Vulkan. Để có hiệu suất tốt hơn với hình ảnh chỉ đọc, hãy sử dụng hình ảnh được lấy mẫu có thao tác tìm nạp dưới dạng trình lấy mẫu ảnh kết hợp hoặc với trình lấy mẫu riêng và liên kết hình ảnh mẫu.

Các tài nguyên Vulkan được phân bổ trong Vulkan. Để tránh tình trạng bộ nhớ sao chép các tập hợp tài nguyên gián tiếp khi tương tác với các thành phần khác của Android, hãy cân nhắc sử dụng tiện ích VK_ANDROID_external_memory_android_hardware_buffer để nhập AHardwareBuffer Android vào Vulkan. Tiện ích này có sẵn trên tất cả thiết bị Android hỗ trợ Vulkan 1.1. Để biết thêm thông tin, hãy xem FEATURE_VULKAN_HARDWARE_VERSION.

Ứng dụng mẫu minh hoạ cách tạo tài nguyên Vulkan trong VulkanResources.h. Để tìm hiểu thêm, hãy xem các phần tạo tài nguyênđặc tả tài nguyên trong tài liệu thông số kỹ thuật Vulkan.

Chuyển đổi sang chương trình đổ bóng điện toán Vulkan

Tập lệnh RenderScript phải được chuyển đổi sang chương trình đổ bóng điện toán Vulkan. Bạn cũng có thể cần điều chỉnh mã tuỳ thuộc vào việc sử dụng các tập lệnh RenderScript toàn cục.

Viết chương trình tính toán hiệu ứng đổ bóng trong Vulkan

Chương trình tính toán hiệu ứng đổ bóng trong Vulkan thường được viết bằng Ngôn ngữ tô bóng OpenGL (GLSL), sau đó được biên dịch sang định dạng Đại diện trung gian di động tiêu chuẩn-V (SPIR-V).

Để biết thông tin chi tiết và hướng dẫn tích hợp chương trình đổ bóng vào ứng dụng, hãy xem phần trình biên dịch đổ bóng của Vulkan trên Android.

Điều chỉnh tập lệnh toàn cục

Dựa trên các đặc điểm của tập lệnh toàn cục, các tập lệnh toàn cục không được chỉnh sửa trong chương trình đổ bóng nên sử dụng hằng số đặc biệt, hằng số đẩy hoặc đối tượng đệm đồng nhất:

  • Hằng số đặc biệt: Nên dùng cho các tập lệnh toàn cục mà gần như nhất quán trong các lệnh gọi nhân. Sẽ cần phải tạo lại quy trình điện toán khi thay đổi giá trị của các hằng số đặc biệt.
  • Hằng số đẩy: Nên dùng cho các tập lệnh toàn cục được thay đổi thường xuyên có kích thước nhỏ hơn maxPushConstantsSize (kích thước tối thiểu được đảm bảo là 128 byte).
  • Vùng đệm đồng nhất: Nên dùng cho tập lệnh toàn cục được thay đổi thường xuyên có kích thước lớn hơn kích thước của hằng số đẩy.

Đối với các tập lệnh toàn cục được thay đổi trong chương trình đổ bóng, bạn có thể sử dụng hình ảnh lưu trữ Vulkan hoặc vùng đệm lưu trữ Vulkan.

Tính toán

Bạn sẽ cần tạo một quy trình điện toán Vulkan để yêu cầu GPU thực thi chương trình đổ bóng điện toán.

Tạo quy trình tính toán trong Vulkan

Tệp ComputePipeline.h trong ứng dụng mẫu minh hoạ cách tạo quy trình tính toán trong Vulkan.

Để sử dụng chương trình đổ bóng SPIR-V được biên dịch trong Vulkan, hãy tạo quy trình tính toán trong Vulkan như sau:

  1. Tạo mô-đun chương trình đổ bóng với chương trình đổ bóng SPIR-V được biên dịch.
  2. Tạo bố cục tập hợp đặc tả chỉ định các liên kết tài nguyên (xem Lớp truyền dữ liệu giữa các nhân để biết thêm chi tiết).
  3. Tạo tập hợp đặc tả từ bố cục tập hợp mô tả.
  4. Tạo bố cục quy trình từ bố cục tập hợp đặc tả.
  5. Tạo một quy trình tính toán với mô-đun chương trình đổ bóng và bố cục quy trình.

Để biết thêm thông tin, hãy xem phần Quy trình tính toán trong tài liệu thông số kỹ thuật Vulkan.

Bắt đầu tính toán

Để bắt đầu tính toán bằng quy trình điện toán, hãy thực hiện các bước sau:

  1. Cập nhật tập hợp đặc tả bằng các tài nguyên Vulkan.
  2. Tạo vùng đệm lệnh Vulkan và ghi lại các lệnh sau:
    1. Liên kết quy trình và tập hợp đặc tả.
    2. Gửi các nhóm làm việc điện toán.
  3. Gửi vùng đệm lệnh đến hàng đợi điện toán.
  4. Chờ hàng đợi hoặc trở lại hàng rào đồng bộ hoá nếu muốn.

Để liên kết nhiều nhân với nhau (ví dụ: để di chuyển mã bằng ScriptGroup), hãy ghi lại chúng trong một vùng đệm lệnh và đồng bộ hoá với các rào cản bộ nhớ.

Ứng dụng mẫu minh hoạ hai tác vụ tính toán:

  • Xoay HUE: Một tác vụ tính toán đơn giản bằng một chương trình tính toán hiệu ứng đổ bóng. Hãy xem ImageProcessor::rotateHue để biết mã mẫu.
  • Làm mờ: Một tác vụ điện toán phức tạp, thực thi tuần tự hai chương trình đổ bóng điện toán. Hãy xem ImageProcessor::blur để biết mã mẫu.

Để tìm hiểu thêm về vùng đệm lệnh hoặc rào cản bộ nhớ, hãy tham khảo các phần trong tài liệu thông số kỹ thuật Vulkan, gọi là Vùng đệm lệnhRào cản bộ nhớ.