Tôi đang đấu tranh để hiểu sự khác biệt về khái niệm giữa bộ đệm đồng nhất và hằng số đẩy. Từ những gì tôi có thể thu thập bằng cách đọc thông số kỹ thuật, sự khác biệt chính là:
- Buffers Uniform có thể nhiều lớn hơn hằng đẩy.
- UBO sử dụng std140, PC sử dụng std430.
- Các UBO có thể được cập nhật bất cứ lúc nào với vkCmdUpdateBuffer (hoặc ánh xạ máy chủ) và duy trì giá trị của chúng nếu không, PC phải được đẩy lại cho mỗi lần kết xuất. (Điều này làm tôi ngạc nhiên - dựa trên tên. Tôi nghĩ rằng tôi thực sự sẽ cập nhật các hằng số trong đường ống tại chỗ, và những thay đổi đó vẫn tồn tại)
Trong kịch bản của tôi, tôi có khoảng ~ 200 byte dữ liệu mà tôi mong đợi hầu như không đổi . Đó là, tôi sẽ thay đổi chúng rất ít khi. Sẽ tốt hơn nếu (giả sử kích thước cho phép) sử dụng hằng số đẩy mặc dù tôi phải gửi lại chúng trong mỗi bộ đệm lệnh? Hoặc sẽ tốt hơn nếu sử dụng UBO 200 byte và chỉ cập nhật nó không thường xuyên với vkCmdUpdatebuffer?
Cũng thế. Điều gì xảy ra nếu tôi có, ví dụ như float random_seed
tôi sẽ cập nhật mỗi khi shader chạy? Giả sử tôi đã có UBO, sẽ tốt hơn nếu kết hợp với UBO, mặc dù phần còn lại của UBO là không đổi, hoặc tôi sẽ có được lợi ích từ việc sử dụng hằng số đẩy cho biến này, vì vậy tôi có thể tránh phải vkCmdUpdateBuffer trước mỗi lần kết xuất?