[Bf-blender-cvs] [ef90d467008] blender2.8: Workbench: Shadow: Add geometry instancing extension.
Clément Foucault
noreply at git.blender.org
Sun May 20 19:20:13 CEST 2018
Commit: ef90d467008bbb471021e376b8d36554543544a4
Author: Clément Foucault
Date: Sat May 19 18:23:29 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBef90d467008bbb471021e376b8d36554543544a4
Workbench: Shadow: Add geometry instancing extension.
This give a very slight perf boost. (2ms gain over 67ms total in my test)
===================================================================
M source/blender/draw/engines/workbench/shaders/workbench_shadow_geom.glsl
===================================================================
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_shadow_geom.glsl b/source/blender/draw/engines/workbench/shaders/workbench_shadow_geom.glsl
index baf11a2a716..bee49c41870 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_shadow_geom.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_shadow_geom.glsl
@@ -1,5 +1,12 @@
+#extension GL_ARB_gpu_shader5 : enable
+
+#ifdef GL_ARB_gpu_shader5
+layout(lines_adjacency, invocations = 2) in;
+layout(triangle_strip, max_vertices = 4) out;
+#else
layout(lines_adjacency) in;
layout(triangle_strip, max_vertices = 8) out;
+#endif
uniform mat4 ModelMatrixInverse;
@@ -15,6 +22,16 @@ in VertexData {
#define len_sqr(a) dot(a, a)
+void extrude_edge(bool invert)
+{
+ ivec2 idx = (invert) ? ivec2(2, 1) : ivec2(1, 2);
+ gl_Position = vData[idx.x].frontPosition; EmitVertex();
+ gl_Position = vData[idx.y].frontPosition; EmitVertex();
+ gl_Position = vData[idx.x].backPosition; EmitVertex();
+ gl_Position = vData[idx.y].backPosition; EmitVertex();
+ EndPrimitive();
+}
+
void main()
{
/* TODO precompute light_direction */
@@ -61,18 +78,19 @@ void main()
ivec2 idx = ivec2(1, 2);
idx = (backface.x) ? idx.yx : idx.xy;
- gl_Position = vData[idx.x].frontPosition; EmitVertex();
- gl_Position = vData[idx.y].frontPosition; EmitVertex();
- gl_Position = vData[idx.x].backPosition; EmitVertex();
- gl_Position = vData[idx.y].backPosition; EmitVertex();
- EndPrimitive();
-
+#ifdef GL_ARB_gpu_shader5
+ if (gl_InvocationID == 0) {
+ extrude_edge(backface.x);
+ }
+ else if (is_manifold) {
+ /* Increment/Decrement twice for manifold edges. */
+ extrude_edge(backface.x);
+ }
+#else
+ extrude_edge(backface.x);
/* Increment/Decrement twice for manifold edges. */
if (is_manifold) {
- gl_Position = vData[idx.x].frontPosition; EmitVertex();
- gl_Position = vData[idx.y].frontPosition; EmitVertex();
- gl_Position = vData[idx.x].backPosition; EmitVertex();
- gl_Position = vData[idx.y].backPosition; EmitVertex();
- EndPrimitive();
+ extrude_edge(backface.x);
}
+#endif
}
More information about the Bf-blender-cvs
mailing list