2012-05-08 97 views
1

着色器進/出變量的順序和/或大小是否會影響內存使用或性能?例如,有這些:glsl着色器進/出變量包裝

相當於
// vert example: 
out vec4 colorRadius; 

// tess control example: 
out vec4 colorRadius[]; 

// frag example: 
in smooth vec4 colorRadius; 

這些:

// vert example: 
out vec3 color; 
out float radius; 

// tess control example: 
out vec3 color[]; 
out float radius[]; 

// frag example: 
in smooth vec3 color; 
in smooth float radius; 

是否存在與第二種形式的任何額外費用或將編譯器在內存中把它們捆綁在一起,並把它們完全一樣?

回答

4

編譯器可能將包裝在一起。但它並不一定,而且幾乎沒有證據表明編譯器通常會這樣做。所以頂級版本至少不會低於底部版本。

與此同時,這更多的是微觀優化。所以除非你知道這是一個瓶頸,否則就放手吧。最好編寫清晰易懂的代碼,並在知道問題出在哪裏時優化它,而不是優化它,而不知道它是否會成爲問題。

+0

總的來說,我同意「優化瓶頸」哲學,但同時我也學會盡可能地儘量優化,只要它不會對易讀性產生不利影響。 – atb

+1

@atb:不可能「在編寫時進行優化」,因爲幾乎不可能評估代碼的所有不同類型的副作用。如果通過分析發現,還有一些不成熟的優化很可能會使您陷入死衚衕,您最好優化一些不同的東西,但是您的早期「優化」需要完全重寫才能做到這一點。 – datenwolf