GPU xử lý kết cấu và VRAM như thế nào?


18

Đó thực sự là một loạt các câu hỏi liên quan đến nhau:

  1. Các kết cấu nén (dxt5 / dxt1, v.v.) có bao giờ được giải nén hoàn toàn trong khi đi qua đường ống kết xuất không?

  2. Nếu câu trả lời cho câu hỏi đầu tiên là đúng, thì bộ nhớ được quản lý như thế nào đối với một số kết cấu không nén lớn?

  3. Bộ đệm khung có khác gì với VRAM trong GPU hiện đại không?

Câu trả lời:


29

Các định dạng kết cấu nén GPU như DXT / BC / ETC được thiết kế đặc biệt để được đọc trực tiếp từ dạng nén của chúng. Chúng không cần được giải nén vào bộ đệm RGBA thô.

Cách thức hoạt động này là mỗi khối texels (thường là 4 x 4) chiếm một số bit cố định - vì vậy chúng tôi biết chính xác khoảng cách trong bộ đệm để tìm kiếm một texel cụ thể - và các khối này có thể được giải nén mà không cần đọc tất cả các xung quanh / trước thông tin kết cấu. GPU chứa phần cứng chuyên dụng chỉ giải nén các khối texel được yêu cầu khi cần để thực hiện các yêu cầu lấy mẫu kết cấu từ các shader của bạn.

Điều này trái ngược với các định dạng như jpg & png, trong đó lượng không gian mà mỗi texel chiếm có thể thay đổi trên hình ảnh (các khu vực chi tiết chiếm nhiều dữ liệu hơn, các khu vực có thể dự đoán chiếm ít hơn), vì vậy, để tìm một texel cụ thể bạn phải giải nén toàn bộ hình ảnh, hoặc ít nhất là khối lớn / phân phối của nó. Nhưng vì chúng có thể nén có chọn lọc các vùng có thể dự đoán của kết cấu, chúng có xu hướng nén hình ảnh thành kích thước nhỏ hơn để lưu trữ trên đĩa hoặc truyền qua mạng so với những gì chúng ta nhận được từ các định dạng thân thiện với GPU. Chiến lược khác nhau cho việc sử dụng khác nhau.


Nói chung, nên hỏi nhiều câu hỏi qua nhiều bài đăng, nhưng vì đây là một câu trả lời khá ngắn nên tôi cũng sẽ đạt điểm 3:

" Framebuffer " chỉ là một phần bộ nhớ video cụ thể mà chúng tôi đã quyết định sử dụng để lưu trữ hình ảnh sáng tác mà chúng tôi muốn trình bày trên màn hình. Hãy lưu ý các chi tiết trong câu trả lời của JarkkoL, trong đó trên một số phần cứng chuyên dụng, chúng tôi có thể chọn định vị bộ đệm này trong một phần cụ thể của bộ nhớ video khả dụng được tối ưu hóa cho nhu cầu băng thông của các mục tiêu kết xuất.


Liên kết đó trên thuật toán nén là cực kỳ hữu ích và chuyên sâu. Đẹp tìm thấy!
Coburn

7

Câu trả lời cho câu hỏi của bạn thực sự phụ thuộc vào nền tảng. Nói chung các định dạng BC được giữ ở dạng nén trong bộ nhớ và giải nén được thực hiện trong chuyến bay bằng các đơn vị kết cấu GPU, nhưng vẫn có trường hợp ngoại lệ. Cụ thể Xbox 360 được biết là giải nén các khối BC 4 pixel hoàn chỉnh vào bộ đệm trước khi TU tìm nạp dữ liệu do đó làm tăng mức sử dụng bộ đệm. Mặc dù vậy, tôi không biết bất kỳ nền tảng nào sẽ giải nén toàn bộ kết cấu thành vram khi tải, nhưng tôi rất nghi ngờ về điều đó vì sử dụng bộ nhớ và băng thông được thêm vào.

Điều tương tự cũng xảy ra với bộ đệm khung - nó phụ thuộc vào nền tảng. Trên Xbox 360, bạn có 10 MB EDRAM băng thông cao chuyên dụng mà bạn phải sử dụng cho mục tiêu kết xuất. Trên Xbox One, bạn vẫn có 32 MB ESRAM đặc biệt được ưu tiên cho các mục tiêu kết xuất do băng thông cao (và cũng có thể được tìm nạp từ không giống như trên Xbox 360), nhưng các mục tiêu kết xuất cũng có thể nằm trong bộ nhớ DDR3 thông thường.

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.