Shader mảnh của tôi đã bị chậm lại đáng kể bởi một thay đổi gần đây và tôi đã cố gắng để hiểu tại sao.
Tôi đã tách phần chậm chính để truy cập vào một số float cụ thể. Nếu tôi bao gồm dòng này:
float not_used = my_uniform;
sau đó shader chạy chậm hơn hai lần so với khi không có dòng này. Các not_used
phao không bao giờ được tham chiếu một lần nữa.
Tại sao điều này sẽ xảy ra? Tôi hy vọng hiểu nó để tôi có thể cố gắng đưa ra một cách giải quyết nhanh hơn.
Tôi đang chạy ứng dụng này trên máy Mac với Intel HD Graphics 3000. Tôi đang đo hiệu suất bằng cách thực hiện các truy vấn dấu thời gian OpenGL trước và sau khi thực hiện glDraw
các cuộc gọi của mình và xem xét các khoảng thời gian ms. Tôi có thể cung cấp thêm thông số kỹ thuật / chi tiết nếu nó hữu ích trong chẩn đoán vấn đề.
gl{Begin,End}Query
với GL_TIME_ELAPSED
số liệu. Thiết lập này được thiết kế để tính đến cách các lệnh OpenGL được thực thi không đồng bộ với CPU. Xem opengl.org/registry/specs/ARB/timer_query.txt
glFinish()
hoặc các chức năng hoán đổi bộ đệm của mình, để mã thực sự được thực thi. Ngoài ra, một trình biên dịch glsl tốt sẽ loại bỏ mọi đồng phục không sử dụng khỏi mã của bạn.