Cấu trúc dữ liệu để kết xuất dựa trên gạch (hoãn lại)


18

Kết xuất lát gạch được sử dụng trong các kiến ​​trúc GPU di động hiện đại để tăng tính liên kết của truy cập bộ nhớ bằng cách chia không gian hình ảnh thành một lưới thông thường gồm các ô nhỏ (ví dụ: 32x32 pixel). Thông tin khan hiếm về các loại cấu trúc dữ liệu được sử dụng để theo dõi các nguyên thủy được liên kết với mỗi ô, xem xét rằng nhiều tùy ý có thể chồng lấp bất kỳ ô cụ thể nào.

Từ quan điểm của một nhà phát triển trình điều khiển, cấu trúc dữ liệu nào thường được sử dụng để biểu diễn các bộ nguyên thủy thuộc về một ô và các cấu trúc đó được phân bổ / thay đổi kích thước theo hình học chồng lên một ô cụ thể?


3
Câu hỏi thực sự thú vị, và mặc dù tôi nghi ngờ hầu hết các chi tiết khó chịu là nước sốt bí mật, đây có thể là một điểm khởi đầu tốt cho bất cứ ai muốn thực hiện nghiên cứu và viết lên một bản tóm tắt: blog.imgtec.com/powervr/
John Calsbeek

Câu trả lời:


11

Bài đăng trên blog mà John đề cập là một khởi đầu khá tốt (nếu tôi tự nói như vậy!), Nhưng có một chút chi tiết bổ sung có thể hữu ích.

Đối với kiến ​​trúc PowerVR, cấu trúc dữ liệu trung gian - được gọi khác nhau là danh sách nguyên thủy hoặc bộ đệm tham số (PB) - lưu trữ dữ liệu trên mỗi ô, sau khi tất cả quá trình tô bóng đỉnh và quá trình ốp lát hoàn toàn được tạo ra và quản lý phần cứng, thay vì trình điều khiển.

Các cấu trúc trong bộ nhớ của PB được chia thành hai. Đầu tiên, các khối dữ liệu đỉnh được chuyển đổi, bao gồm các thuộc tính đỉnh. Các khối được nén và như bạn có thể tưởng tượng chúng chỉ được đóng gói và nén dữ liệu dấu phẩy động cho hầu hết các phần. Cấu trúc trong bộ nhớ thứ hai là dữ liệu ốp lát, đây thực sự là một danh sách các danh sách.

Danh sách cấp cao nhất trong cấu trúc dữ liệu đó được gọi là một khu vực và nó có thể mã hóa một tập hợp các ô thay vì một ô duy nhất tại một thời điểm, cho một khối nguyên thủy nhất định. Do đó, một vùng là một tập hợp các vị trí của các ô màn hình, trạng thái ô vuông và sau đó là danh sách các khối được nén giữ hình học trong vùng đó. Các khu vực là những gì trình rasteriser hoạt động và bạn có thể tưởng tượng rằng các ô trống sẽ tự động bị bỏ qua, mặc dù trong một số trường hợp, lý do chính đáng để rasteriser truy cập vào các vùng trống.

Bộ nhớ mà GPU sử dụng cho PB được phân bổ động trong tất cả các triển khai PowerVR hiện đại. Một con trỏ tới bộ nhớ đó được cung cấp bởi trình điều khiển và trình điều khiển, với sự trợ giúp của GPU, sẽ kích thước nó theo yêu cầu. Cơ chế đó là sự đánh đổi giữa việc phải phân bổ lại thường xuyên và giảm thiểu lượng không gian PB được phân bổ.

Các GPU hiện đại rất cố gắng để giảm thiểu tình trạng thiếu bộ nhớ, nhưng đi bộ PB để cung cấp cho giai đoạn rasterisation là một trong những trường hợp thực sự khó khăn và không có lựa chọn nào khác. Rất may, con trỏ đuổi theo kết thúc tốt các khối lớn mà lưu trữ tốt và được truyền vào lõi.

Các kiến ​​trúc khác không hoạt động chính xác như PowerVR, bởi vì một phần lý do PB là cách nó có trong kiến ​​trúc của chúng tôi là để giúp khái niệm che mờ pixel bị trì hoãn hoàn toàn mà chúng tôi triển khai, nhưng khái niệm chung áp dụng cho tất cả các trình xử lý khác trong không gian di động mà tôi biết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.