Hi all! First of all, thanks for all the effort spent on porting the rendering engine to support the OpenGL2 backend by default on PV 5.0.0. Early tests with the binary from the download page shows a massive improvement over the PV 4.1 to 4.3 versions in terms of rendering time. I have repeated the test over a few different GPUs and got the same results.
Which brought me to thinking that similar performance improvements could be also achieved when performing software rendering with the MESA libraries. I downloaded the PV sources for the 5.0.0-RC1 release yesterday and compiled it with MESA and MPI support. MPI version is Intel 5.0.1 and MESA version is 10.5.5. The MESA libraries are compiled using: ./configure --enable-64-bit --enable-texture-float --enable-osmesa --disable-egl --disable-xorg --disable-xvmc --disable-opencl --disable-glx --disable-dri --disable-va --disable-shared-glapi --enable-gallium-llvm=no --with-gnu-ld --with-osmesa-bits=8 --disable-vdpau --enable-dependency-tracking --with-gallium-drivers="" --with-dri-drivers="" --with-egl-platforms="" Which corresponds to a "classic" compilation without LLVM support. Believe it or not, this was found to run faster on our CPU cluster than with the LLVM drivers. After linking PV 5.0.0 against the MESA libs with the OpenGL2 backend, I started running a simple benchmark to check possible performance benefits and here is the error output I got: GL_Version: 2.1 Mesa 10.5.5 Warning: In /panfs/srvpan01/code/repo/build/paraview-5.0.0-rc1/src/VTK/Rendering/OpenGL2/vtkOpenGLRenderWindow.cxx, line 549 vtkOSOpenGLRenderWindow (0x3c0eef60): VTK is designed to work with OpenGL version 3.2 but it appears it has been given a context that does not support 3.2. VTK will run in a compatibility mode designed to work with OpenGL 2.1 but some features may not work. ERROR: In /panfs/srvpan01/code/repo/build/paraview-5.0.0-rc1/src/VTK/Rendering/OpenGL2/vtkShaderProgram.cxx, line 369 vtkShaderProgram (0x4d4dbfe0): 1: #version 120 2: #extension GL_EXT_gpu_shader4 : require 3: #define highp 4: #define mediump 5: #define lowp 6: 7: /*========================================================================= 8: 9: Program: Visualization Toolkit 10: Module: vtkPolyDataFS.glsl 11: 12: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 13: All rights reserved. 14: See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 15: 16: This software is distributed WITHOUT ANY WARRANTY; without even 17: the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 18: PURPOSE. See the above copyright notice for more information. 19: 20: =========================================================================*/ 21: // Template for the polydata mappers fragment shader 22: 23: uniform int PrimitiveIDOffset; 24: 25: // VC position of this fragment 26: varying vec4 vertexVCVSOutput; 27: 28: // optional color passed in from the vertex shader, vertexColor 29: uniform bool OverridesColor; 30: uniform float opacityUniform; // the fragment opacity 31: uniform vec3 ambientColorUniform; // intensity weighted color 32: uniform vec3 diffuseColorUniform; // intensity weighted color 33: uniform vec3 specularColorUniform; // intensity weighted color 34: uniform float specularPowerUniform; 35: 36: 37: // optional surface normal declaration 38: uniform int cameraParallel; 39: 40: // extra lighting parameters 41: uniform int numberOfLights; 42: uniform vec3 lightColor[6]; 43: uniform vec3 lightDirectionVC[6]; // normalized 44: uniform vec3 lightHalfAngleVC[6]; // normalized 45: 46: // Texture coordinates 47: varying vec2 tcoordVCVSOutput; uniform sampler2D texture1; 48: 49: // picking support 50: //VTK::Picking::Dec 51: 52: // Depth Peeling Support 53: //VTK::DepthPeeling::Dec 54: 55: // clipping plane vars 56: //VTK::Clip::Dec 57: 58: // the output of this shader 59: //VTK::Output::Dec 60: 61: // Apple Bug 62: //VTK::PrimID::Dec 63: 64: void main() 65: { 66: // Apple Bug 67: //VTK::PrimID::Impl 68: 69: //VTK::Clip::Impl 70: 71: vec3 ambientColor; 72: vec3 diffuseColor; 73: float opacity; 74: vec3 specularColor; 75: float specularPower; 76: ambientColor = ambientColorUniform; 77: diffuseColor = diffuseColorUniform; 78: opacity = opacityUniform; 79: specularColor = specularColorUniform; 80: specularPower = specularPowerUniform; 81: vec4 texColor = texture2D(texture1, tcoordVCVSOutput.st); 82: diffuseColor = texColor.rgb; 83: opacity = opacity*texColor.a; 84: if (OverridesColor) { 85: ambientColor = ambientColorUniform; 86: diffuseColor = diffuseColorUniform; } 87: 88: 89: // VC position of this fragment 90: vec4 vertexVC = vertexVCVSOutput; 91: 92: // Generate the normal if we are not passed in one 93: vec3 fdx = normalize(vec3(dFdx(vertexVC.x),dFdx(vertexVC.y),dFdx(vertexVC.z))); 94: vec3 fdy = normalize(vec3(dFdy(vertexVC.x),dFdy(vertexVC.y),dFdy(vertexVC.z))); 95: vec3 normalVCVSOutput = normalize(cross(fdx,fdy)); 96: if (cameraParallel == 1 && normalVCVSOutput.z < 0.0) { normalVCVSOutput = -1.0*normalVCVSOutput; } 97: if (cameraParallel == 0 && dot(normalVCVSOutput,vertexVC.xyz) > 0.0) { normalVCVSOutput = -1.0*normalVCVSOutput; } 98: 99: vec3 diffuse = vec3(0,0,0); 100: vec3 specular = vec3(0,0,0); 101: for (int lightNum = 0; lightNum < numberOfLights; lightNum++) 102: { 103: float df = max(0.0, dot(normalVCVSOutput, -lightDirectionVC[lightNum])); 104: diffuse += ((df) * lightColor[lightNum]); 105: if (dot(normalVCVSOutput, lightDirectionVC[lightNum]) < 0.0) 106: { 107: float sf = pow( max(0.0, dot(lightHalfAngleVC[lightNum],normalVCVSOutput)), specularPower); 108: specular += ((sf) * lightColor[lightNum]); 109: } 110: } 111: diffuse = diffuse * diffuseColor; 112: specular = specular * specularColor; 113: gl_FragData[0] = vec4(ambientColor + diffuse + specular, opacity); //VTK::Light::Impl 114: 115: //VTK::TCoord::Impl 116: 117: if (gl_FragData[0].a <= 0.0) 118: { 119: discard; 120: } 121: 122: //VTK::DepthPeeling::Impl 123: 124: //VTK::Picking::Impl 125: 126: } 127: ERROR: In /panfs/srvpan01/code/repo/build/paraview-5.0.0-rc1/src/VTK/Rendering/OpenGL2/vtkShaderProgram.cxx, line 370 vtkShaderProgram (0x4d4dbfe0): 0:2(12): error: extension `GL_EXT_gpu_shader4' unsupported in fragment shader APPLICATION TERMINATED WITH THE EXIT STRING: Segmentation fault (signal 11) Was it to be expected? If so, is there any chance at all to run PV 5.0.0 in batch with MESA support on a CPU cluster? If so, which MESA version is required/recommended and what are the compile options to pass? Thank you very much in advance for any answer. Frank Albina
_______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the ParaView Wiki at: http://paraview.org/Wiki/ParaView Search the list archives at: http://markmail.org/search/?q=ParaView Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/paraview