[Bf-blender-cvs] [8cf524cec9] blender2.8: plug ShaderInterface into GPUShader

Mike Erwin noreply at git.blender.org
Fri Mar 3 03:51:01 CET 2017


Commit: 8cf524cec9434cb2aa4b94ee29fd0a57dc502a33
Author: Mike Erwin
Date:   Thu Mar 2 21:46:54 2017 -0500
Branches: blender2.8
https://developer.blender.org/rB8cf524cec9434cb2aa4b94ee29fd0a57dc502a33

plug ShaderInterface into GPUShader

Renamed existing getter/setter that only FX shaders use. We could convert FX code to use the richer new interface or leave it as is.

Removed unused GPUShader fields. ShaderInterface tracks the same information.

===================================================================

M	source/blender/gpu/GPU_shader.h
M	source/blender/gpu/intern/gpu_compositing.c
M	source/blender/gpu/intern/gpu_shader.c
M	source/blender/gpu/intern/gpu_shader_private.h

===================================================================

diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h
index fe29b1edc5..31b066e7e8 100644
--- a/source/blender/gpu/GPU_shader.h
+++ b/source/blender/gpu/GPU_shader.h
@@ -71,8 +71,12 @@ void GPU_shader_bind(GPUShader *shader);
 void GPU_shader_unbind(void);
 
 int GPU_shader_get_program(GPUShader *shader);
+
 void *GPU_shader_get_interface(GPUShader *shader);
-void GPU_shader_set_interface(GPUShader *shader, void *interface);
+
+void *GPU_fx_shader_get_interface(GPUShader *shader);
+void GPU_fx_shader_set_interface(GPUShader *shader, void *interface);
+
 int GPU_shader_get_uniform(GPUShader *shader, const char *name);
 int GPU_shader_get_uniform_block(GPUShader *shader, const char *name);
 void GPU_shader_uniform_vector(GPUShader *shader, int location, int length,
diff --git a/source/blender/gpu/intern/gpu_compositing.c b/source/blender/gpu/intern/gpu_compositing.c
index 528bdefc20..b4eaab7edf 100644
--- a/source/blender/gpu/intern/gpu_compositing.c
+++ b/source/blender/gpu/intern/gpu_compositing.c
@@ -712,7 +712,7 @@ void GPU_fx_compositor_XRay_resolve(GPUFX *fx)
 	depth_resolve_shader = GPU_shader_get_builtin_fx_shader(GPU_SHADER_FX_DEPTH_RESOLVE, false);
 
 	if (depth_resolve_shader) {
-		GPUDepthResolveInterface *interface = GPU_shader_get_interface(depth_resolve_shader);
+		GPUDepthResolveInterface *interface = GPU_fx_shader_get_interface(depth_resolve_shader);
 
 		GPU_shader_bind(depth_resolve_shader);
 
@@ -828,7 +828,7 @@ bool GPU_fx_do_composite_pass(
 
 			ssao_params[3] = (passes_left == 1 && !ofs) ? dfdyfac[0] : dfdyfac[1];
 
-			GPUSSAOShaderInterface *interface = GPU_shader_get_interface(ssao_shader);
+			GPUSSAOShaderInterface *interface = GPU_fx_shader_get_interface(ssao_shader);
 
 			GPU_shader_bind(ssao_shader);
 
@@ -924,7 +924,7 @@ bool GPU_fx_do_composite_pass(
 			{
 				float invrendertargetdim[2] = {1.0f / fx->dof_downsampled_w, 1.0f / fx->dof_downsampled_h};
 
-				GPUDOFHQPassOneInterface *interface = GPU_shader_get_interface(dof_shader_pass1);
+				GPUDOFHQPassOneInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass1);
 
 				GPU_shader_bind(dof_shader_pass1);
 
@@ -975,7 +975,7 @@ bool GPU_fx_do_composite_pass(
 				int rendertargetdim[2] = {fx->dof_downsampled_w, fx->dof_downsampled_h};
 				float selection[2] = {0.0f, 1.0f};
 
-				GPUDOFHQPassTwoInterface *interface = GPU_shader_get_interface(dof_shader_pass2);
+				GPUDOFHQPassTwoInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass2);
 
 				GPU_shader_bind(dof_shader_pass2);
 
@@ -1038,7 +1038,7 @@ bool GPU_fx_do_composite_pass(
 			{
 				float invrendertargetdim[2] = {1.0f / fx->dof_downsampled_w, 1.0f / fx->dof_downsampled_h};
 
-				GPUDOFHQPassThreeInterface *interface = GPU_shader_get_interface(dof_shader_pass3);
+				GPUDOFHQPassThreeInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass3);
 
 				GPU_shader_bind(dof_shader_pass3);
 
@@ -1120,7 +1120,7 @@ bool GPU_fx_do_composite_pass(
 			{
 				float invrendertargetdim[2] = {1.0f / fx->gbuffer_dim[0], 1.0f / fx->gbuffer_dim[1]};
 
-				GPUDOFPassOneInterface *interface = GPU_shader_get_interface(dof_shader_pass1);
+				GPUDOFPassOneInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass1);
 
 				GPU_shader_bind(dof_shader_pass1);
 
@@ -1159,7 +1159,7 @@ bool GPU_fx_do_composite_pass(
 				float tmp = invrendertargetdim[0];
 				invrendertargetdim[0] = 0.0f;
 
-				GPUDOFPassTwoInterface *interface = GPU_shader_get_interface(dof_shader_pass2);
+				GPUDOFPassTwoInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass2);
 
 				dof_params[2] = GPU_texture_width(fx->dof_near_coc_blurred_buffer) / (scale_camera * fx_dof->sensor);
 
@@ -1214,7 +1214,7 @@ bool GPU_fx_do_composite_pass(
 
 			/* third pass, calculate near coc */
 			{
-				GPUDOFPassThreeInterface *interface = GPU_shader_get_interface(dof_shader_pass3);
+				GPUDOFPassThreeInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass3);
 
 				GPU_shader_bind(dof_shader_pass3);
 
@@ -1242,7 +1242,7 @@ bool GPU_fx_do_composite_pass(
 				float invrendertargetdim[2] = {1.0f / GPU_texture_width(fx->dof_near_coc_blurred_buffer),
 				                               1.0f / GPU_texture_height(fx->dof_near_coc_blurred_buffer)};
 
-				GPUDOFPassFourInterface *interface = GPU_shader_get_interface(dof_shader_pass4);
+				GPUDOFPassFourInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass4);
 
 				GPU_shader_bind(dof_shader_pass4);
 
@@ -1267,7 +1267,7 @@ bool GPU_fx_do_composite_pass(
 			{
 				float invrendertargetdim[2] = {1.0f / fx->gbuffer_dim[0], 1.0f / fx->gbuffer_dim[1]};
 
-				GPUDOFPassFiveInterface *interface = GPU_shader_get_interface(dof_shader_pass5);
+				GPUDOFPassFiveInterface *interface = GPU_fx_shader_get_interface(dof_shader_pass5);
 
 				GPU_shader_bind(dof_shader_pass5);
 
@@ -1363,7 +1363,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
 			interface->ssao_concentric_tex = GPU_shader_get_uniform(shader, "ssao_concentric_tex");
 			interface->ssao_jitter_uniform = GPU_shader_get_uniform(shader, "jitter_tex");
 
-			GPU_shader_set_interface(shader, interface);
+			GPU_fx_shader_set_interface(shader, interface);
 			break;
 		}
 
@@ -1377,7 +1377,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
 			interface->depth_uniform = GPU_shader_get_uniform(shader, "depthbuffer");
 			interface->viewvecs_uniform = GPU_shader_get_uniform(shader, "viewvecs");
 
-			GPU_shader_set_interface(shader, interface);
+			GPU_fx_shader_set_interface(shader, interface);
 			break;
 		}
 
@@ -1391,7 +1391,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
 			interface->select_uniform = GPU_shader_get_uniform(shader, "layerselection");
 			interface->dof_uniform = GPU_shader_get_uniform(shader, "dof_params");
 
-			GPU_shader_set_interface(shader, interface);
+			GPU_fx_shader_set_interface(shader, interface);
 			break;
 		}
 
@@ -1407,7 +1407,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
 			interface->viewvecs_uniform = GPU_shader_get_uniform(shader, "viewvecs");
 			interface->depth_uniform = GPU_shader_get_uniform(shader, "depthbuffer");
 
-			GPU_shader_set_interface(shader, interface);
+			GPU_fx_shader_set_interface(shader, interface);
 			break;
 		}
 
@@ -1421,7 +1421,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
 			interface->depth_uniform = GPU_shader_get_uniform(shader, "depthbuffer");
 			interface->viewvecs_uniform = GPU_shader_get_uniform(shader, "viewvecs");
 
-			GPU_shader_set_interface(shader, interface);
+			GPU_fx_shader_set_interface(shader, interface);
 			break;
 		}
 		case GPU_SHADER_FX_DEPTH_OF_FIELD_PASS_TWO:
@@ -1434,7 +1434,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
 			interface->depth_uniform = GPU_shader_get_uniform(shader, "depthbuffer");
 			interface->viewvecs_uniform = GPU_shader_get_uniform(shader, "viewvecs");
 
-			GPU_shader_set_interface(shader, interface);
+			GPU_fx_shader_set_interface(shader, interface);
 			break;
 		}
 		case GPU_SHADER_FX_DEPTH_OF_FIELD_PASS_THREE:
@@ -1444,7 +1444,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
 			interface->near_coc_downsampled = GPU_shader_get_uniform(shader, "colorbuffer");
 			interface->near_coc_blurred = GPU_shader_get_uniform(shader, "blurredcolorbuffer");
 
-			GPU_shader_set_interface(shader, interface);
+			GPU_fx_shader_set_interface(shader, interface);
 			break;
 		}
 		case GPU_SHADER_FX_DEPTH_OF_FIELD_PASS_FOUR:
@@ -1454,7 +1454,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
 			interface->near_coc_downsampled = GPU_shader_get_uniform(shader, "colorbuffer");
 			interface->invrendertargetdim_uniform = GPU_shader_get_uniform(shader, "invrendertargetdim");
 
-			GPU_shader_set_interface(shader, interface);
+			GPU_fx_shader_set_interface(shader, interface);
 			break;
 		}
 		case GPU_SHADER_FX_DEPTH_OF_FIELD_PASS_FIVE:
@@ -1469,7 +1469,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
 			interface->depth_uniform = GPU_shader_get_uniform(shader, "depthbuffer");
 			interface->viewvecs_uniform = GPU_shader_get_uniform(shader, "viewvecs");
 
-			GPU_shader_set_interface(shader, interface);
+			GPU_fx_shader_set_interface(shader, interface);
 			break;
 		}
 
@@ -1479,7 +1479,7 @@ void GPU_fx_shader_init_interface(struct GPUShader *shader, GPUFXShaderEffect ef
 
 			interface->depth_uniform = GPU_shader_get_uniform(shader, "depthbuffer");
 
-			GPU_shader_set_interface(shader, interface);
+			GPU_fx_shader_set_interface(shader, interface);
 			break;
 		}
 
diff --git a/source/blender/gpu/intern/gpu_shader.c b/source/blender/gpu/intern/gpu_shader.c
index aeec2af8d0..629980da97 100644
--- a/source/blender/gpu/intern/gpu_shader.c
+++ b/source/blender/gpu/intern/gpu_shader.c
@@ -490,6 +490,8 @@ GPUShader *GPU_shader_create_ex(const char *vertexcode,
 	}
 #endif
 
+	shader->interface = ShaderInterface_create(shader->program);
+
 	return shader;
 }
 
@@ -521,6 +523,9 @@ void GPU_shader_free(GPUShader *shader)
 	if (shader->uniform_interface)
 		MEM_freeN(shader->uniform_interface);
 
+	if (shader->interface)
+		ShaderInterface_discard(shader->interface);
+
 	MEM_freeN(shader);
 }
 
@@ -538,18 +543,23 @@ int GPU_shader_get_uniform_block(GPUShader *shader, const char *name)
 	return glGetUniformBlockIndex(shader->program, name);
 }
 
-void *GPU_shader_get_interface(GPUShader *shader)
+void *GPU_fx_shader_get_interface(GPUShader *shader)
 {
 	return shader->uniform_interface;
 }
 
+void *GPU_shader_get_interface(GPUShader *shader)
+{
+	return shader->interface;
+}
+
 /* Clement : Temp */
 int GPU_shader_get_program(GPUShader *shader)
 {
 	return (int)shader->program;
 }
 
-void GPU_shader_set_interface(GPUShader *shader, void *interface)
+void GPU_fx_shader_set_interface(GPUShader *shader, void *interface)
 {
 	shader->uniform_interface = interface;
 }
diff --git a/source/blender/gpu/intern/gpu_shader_private.h b/source/ble

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list