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 } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs