Tại sao truy cập kết cấu chậm hơn nhiều khi tính toán tọa độ kết cấu trong shader mảnh?


11

Khi sử dụng kết cấu trong GLSL, cách tốt nhất là tính toán tọa độ kết cấu cuối cùng trong trình tạo bóng đỉnh và bàn giao chúng cho trình tạo bóng mảnh bằng varyings. Ví dụ với một lần lật đơn giản trong tọa độ y:

// Vertex shader
attribute vec2 texture;
varying highp vec2 texCoord;
// ...
void main() {
    texCoord = vec2(texture.x, 1.0-texture.y);
    // ...
}

// Fragment shader
varying highp vec2 textureCoordinates;
uniform sampler2D tex;
// ...
void main() {
    highp vec4 texColor = texture2D(tex, texCoord);
    // ...
}

Nếu việc lật trong tọa độ y hoặc một thao tác thậm chí đơn giản hơn như thêm vec2(0.5)vào tọa độ kết cấu được thực hiện trong trình đổ bóng mảnh thì việc truy cập kết cấu sẽ chậm hơn nhiều. Tại sao?


Một lưu ý, ví dụ, pha trộn hai kết cấu, sử dụng tổng trọng số của chúng, rẻ hơn nhiều về thời gian và cũng cần phải được thực hiện cho từng pixel, do đó, việc tính toán tọa độ kết cấu dường như không tốn kém.


1
Tôi đoán là nếu các tia UV được tính bằng VS, đơn vị kết cấu có thể bắt đầu tìm nạp trước chúng trong khi PS đang bắt đầu. Nếu chúng được tính trong PS, đơn vị kết cấu phải đợi trước.
RichieSams

2
Fwiw này được gọi là "đọc kết cấu phụ thuộc", trong trường hợp nó giúp tìm kiếm của bạn.
Alan Wolfe

Bạn có một số phép đo cho thấy sự khác biệt hoàn hảo? Tôi thực sự không mong đợi sẽ có nhiều sự khác biệt; độ trễ tìm nạp kết cấu sẽ tràn vào một vài ops ALU. BTW, đọc kết cấu phụ thuộc là nơi có hai (hoặc nhiều) kết cấu đọc, với tọa độ cho lần thứ hai phụ thuộc vào đầu ra của lần đầu tiên. Những cái này chậm hơn vì yêu cầu nghiêm ngặt giữa hai lần đọc kết cấu.
Nathan Reed

Chà, bất kỳ thao tác nào được thực hiện trong shader mảnh sẽ đắt hơn sau đó trong shader đỉnh. Mỗi hình tam giác có 3 yêu cầu của một shader đỉnh, nhưng nó có thể nhận các lệnh lớn hơn của shader mảnh, tùy thuộc vào kích thước màn hình của nó.
glampert

@NathanReed Tôi không nghĩ bạn phải giới hạn "đọc kết cấu phụ thuộc" chỉ cho những người đến từ quyền truy cập kết cấu trước đó. Có lẽ tôi cũng bao gồm bất kỳ tọa độ nào được tính toán trong shader Frag, trái ngược với các tọa độ có thể được xác định chỉ từ phép nội suy tuyến tính (tốt, hyperbolic với phối cảnh) của các thuộc tính đỉnh.
Simon F

Câu trả lời:


11

Những gì bạn đang nói về thường được gọi là "đọc kết cấu phụ thuộc" trong cộng đồng phát triển di động. Đây là một chi tiết triển khai của một số phần cứng nhất định và do đó, nó thực sự phụ thuộc vào GPU về việc nó có bất kỳ ý nghĩa về hiệu suất hay không. Thông thường, đó là thứ bạn thấy mang đến cho PowerVR GPU trong phần cứng của Apple, vì nó được đề cập rõ ràng trong cả Tưởng tượngAppletài liệu. Nếu tôi nhớ lại một cách chính xác, vấn đề cơ bản đến từ phần cứng trong GPU sẽ bắt đầu tìm nạp trước kết cấu trước khi trình đổ bóng mảnh vỡ bắt đầu chạy, để nó có thể làm tốt hơn việc che giấu độ trễ. Các tài liệu tôi liên kết đề cập rằng nó không còn là vấn đề đối với phần cứng Series6, vì vậy ít nhất là trên phần cứng mới hơn của Apple, đó không phải là điều mà bạn phải lo lắng. Tôi thực sự không chắc chắn về các GPU di động khác, vì đó không phải là lĩnh vực chuyên môn của tôi. Bạn nên thử và tham khảo tài liệu của họ để tìm hiểu cho chắc chắn.

Nếu bạn quyết định thực hiện một số tìm kiếm của Google về vấn đề này, hãy lưu ý rằng có thể bạn sẽ tìm thấy một số tài liệu cũ hơn nói về kết cấu phụ thuộc tìm nạp trên phần cứng máy tính để bàn cũ hơn. Cơ bản trong những ngày đầu của các shader pixel / mảnh, thuật ngữ "tìm nạp kết cấu phụ thuộc" được gọi là sử dụng địa chỉ UV dựa trên tìm nạp kết cấu trước đó. Ví dụ kinh điển là kết xuất bản đồ môi trường được lập bản đồ, nơi bạn muốn sử dụng vectơ phản chiếu dựa trên bản đồ bình thường để lấy mẫu bản đồ môi trường. Trên phần cứng cũ hơn này có một số hàm ý hiệu năng chính và tôi nghĩ rằng nó thậm chí không được hỗ trợ trên một số GPU rất cũ. Với GPU hiện đại, phần cứng và shader ISA được khái quát hơn nhiều, và do đó, tình hình hiệu năng phức tạp hơn nhiều.


Nhân tiện: Tôi đã trải nghiệm điều đó trên iPad 3. Vì vậy, có lẽ đây thực sự là phần cứng cụ thể.
Nero
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.