Browse Source

Merge pull request #35310 from akien-mga/gles3-irradiance-small-optimization

GLES3: Slight optimization to irradiance compute
Rémi Verschelde 5 years ago
parent
commit
90a224c6eb

+ 0 - 2
drivers/gles3/rasterizer_storage_gles3.cpp

@@ -1994,7 +1994,6 @@ void RasterizerStorageGLES3::sky_set_texture(RID p_sky, RID p_panorama, int p_ra
 				glActiveTexture(GL_TEXTURE0);
 				glActiveTexture(GL_TEXTURE0);
 				glBindTexture(GL_TEXTURE_2D_ARRAY, sky->radiance);
 				glBindTexture(GL_TEXTURE_2D_ARRAY, sky->radiance);
 				shaders.cubemap_filter.set_uniform(CubemapFilterShaderGLES3::SOURCE_ARRAY_INDEX, j - 1); //read from previous to ensure better blur
 				shaders.cubemap_filter.set_uniform(CubemapFilterShaderGLES3::SOURCE_ARRAY_INDEX, j - 1); //read from previous to ensure better blur
-				shaders.cubemap_filter.set_uniform(CubemapFilterShaderGLES3::SOURCE_RESOLUTION, float(size / 2));
 			}
 			}
 
 
 			for (int i = 0; i < 2; i++) {
 			for (int i = 0; i < 2; i++) {
@@ -2124,7 +2123,6 @@ void RasterizerStorageGLES3::sky_set_texture(RID p_sky, RID p_panorama, int p_ra
 				glActiveTexture(GL_TEXTURE0);
 				glActiveTexture(GL_TEXTURE0);
 				glBindTexture(GL_TEXTURE_2D, sky->radiance);
 				glBindTexture(GL_TEXTURE_2D, sky->radiance);
 				shaders.cubemap_filter.set_uniform(CubemapFilterShaderGLES3::SOURCE_MIP_LEVEL, float(lod - 1)); //read from previous to ensure better blur
 				shaders.cubemap_filter.set_uniform(CubemapFilterShaderGLES3::SOURCE_MIP_LEVEL, float(lod - 1)); //read from previous to ensure better blur
-				shaders.cubemap_filter.set_uniform(CubemapFilterShaderGLES3::SOURCE_RESOLUTION, float(size));
 			}
 			}
 
 
 			for (int i = 0; i < 2; i++) {
 			for (int i = 0; i < 2; i++) {

+ 2 - 4
drivers/gles3/shaders/cubemap_filter.glsl

@@ -23,6 +23,7 @@ precision highp int;
 
 
 #ifdef USE_SOURCE_PANORAMA
 #ifdef USE_SOURCE_PANORAMA
 uniform sampler2D source_panorama; //texunit:0
 uniform sampler2D source_panorama; //texunit:0
+uniform float source_resolution;
 #endif
 #endif
 
 
 #ifdef USE_SOURCE_DUAL_PARABOLOID_ARRAY
 #ifdef USE_SOURCE_DUAL_PARABOLOID_ARRAY
@@ -44,7 +45,6 @@ uniform samplerCube source_cube; //texunit:0
 
 
 uniform int face_id;
 uniform int face_id;
 uniform float roughness;
 uniform float roughness;
-uniform float source_resolution;
 
 
 in highp vec2 uv_interp;
 in highp vec2 uv_interp;
 
 
@@ -332,6 +332,7 @@ void main() {
 
 
 		if (ndotl > 0.0) {
 		if (ndotl > 0.0) {
 
 
+#ifdef USE_SOURCE_PANORAMA
 			float D = DistributionGGX(N, H, roughness);
 			float D = DistributionGGX(N, H, roughness);
 			float ndoth = max(dot(N, H), 0.0);
 			float ndoth = max(dot(N, H), 0.0);
 			float hdotv = max(dot(H, V), 0.0);
 			float hdotv = max(dot(H, V), 0.0);
@@ -342,17 +343,14 @@ void main() {
 
 
 			float mipLevel = roughness == 0.0 ? 0.0 : 0.5 * log2(saSample / saTexel);
 			float mipLevel = roughness == 0.0 ? 0.0 : 0.5 * log2(saSample / saTexel);
 
 
-#ifdef USE_SOURCE_PANORAMA
 			sum.rgb += texturePanorama(L, source_panorama, mipLevel).rgb * ndotl;
 			sum.rgb += texturePanorama(L, source_panorama, mipLevel).rgb * ndotl;
 #endif
 #endif
 
 
 #ifdef USE_SOURCE_DUAL_PARABOLOID_ARRAY
 #ifdef USE_SOURCE_DUAL_PARABOLOID_ARRAY
-
 			sum.rgb += textureDualParaboloidArray(L).rgb * ndotl;
 			sum.rgb += textureDualParaboloidArray(L).rgb * ndotl;
 #endif
 #endif
 
 
 #ifdef USE_SOURCE_DUAL_PARABOLOID
 #ifdef USE_SOURCE_DUAL_PARABOLOID
-
 			sum.rgb += textureDualParaboloid(L).rgb * ndotl;
 			sum.rgb += textureDualParaboloid(L).rgb * ndotl;
 #endif
 #endif