Tôi đang cố gắng sử dụng một mảng ma trận thống nhất trong trình đổ bóng tính toán của mình. Tuy nhiên, nó thực sự rất chậm. Tôi đã thu hẹp nó xuống dòng mã này:
uniform mat4 someMatrixArray[64];
...
vec4 result = vec4(0);
for (int i = 0; i < 2048; i++) {
result += someMatrixArray[i%64][0] * 0.01;
}
Khi không truy cập someMatrixArray tôi nhận được hơn 700 khung hình / giây. Khi truy cập nó, tôi có 10 khung hình / giây. Bất cứ ai cũng có một ý tưởng những gì có thể gây ra điều này? Nó có thể là một vấn đề trình điều khiển?
Tôi đã cố gắng để hủy bỏ các vòng lặp (thông qua #pragma optionNV (unroll all)
) nhưng điều đó không giúp được gì. Tôi đang sử dụng GTX670 với trình điều khiển mới nhất trên windows 7.
Biên tập:
Việc lắp ráp được tạo cho vòng lặp bên trong là:
MAD.F R0.xyz, c[196], {0.0099999998, 0, 0, 0}.x, R0;
result += someMatrixArray[i%64][0] / 100;
result
có thể được xác định tĩnh mà không cần phải được đánh giá trong shader. Tại sao không tính toán nó trên CPU và chuyển giá trị cuối cùng củaresult
shader thành đồng phục?