Execute Service

In this exercise, you'll learn to execute the build command and view the terrain analysis report.

Examine Debug Settings

  1. Go to the text editor and find the script app_service_workload_analyze_terrain_util.ssl.
  2. Find the Execute() function.

    ///////////////////////////////////////////////////////////////////////////////
    // function
    ///////////////////////////////////////////////////////////////////////////////
    
    function bool Execute( CommandPresentationModuleInfo commandInfo )
    {
       auto Str a_oName;
       GetName( a_oName );
    
       //////////////////////////////////////////////////
       // Initialize source data and messages.
       //////////////////////////////////////////////////
    
       auto StrList a_slMessages;
       LibAppServiceBuild.GenerateServiceHeader(
          a_oName.Value, a_slMessages );
    
       auto FilePath a_oElevationDataPath = new FilePath(
          Application.GetApplicationDocumentsPath() );
       a_oElevationDataPath.AppendPath( "Library" );
       a_oElevationDataPath.AppendPath( "Textures" );
       a_oElevationDataPath.AppendPath( "Elevation" );
       a_oElevationDataPath.AppendPathWithFile( "USGS_13_n49w122.tif" );
    
       auto FileNode a_oData;
       a_oData.Name = a_oElevationDataPath.GetFileName();
       a_oData.FilePath = a_oElevationDataPath.GetPath();
    
       //////////////////////////////////////////////////
       // Declare and initialize build objects.
       //////////////////////////////////////////////////
    
       bool a_bDebug = true;
       int a_nDebugMaxChunksX = 4;
       int a_nDebugMaxChunksY = 4;
    
       ...
    

    Notes that a_bDebug is declared at the bottom of this code sample. At present, a_bDebug is true, a_nDebugMaxChunksX is set to 4, and a_nDebugMaxChunksY is set to 4. This allows us to run the compute workload on a limited set of data if we need to debug, or if we are only interested in a small area in the terrain. The variables a_nDebugMaxChunksX and a_nDebugMaxChunksY are used only when a_bDebug is true. You can use the debug flag in a variety of ways in your own implementations.

    For the first run, we'll leave the service in debug mode.

Execute Partial Workload

  1. Return to the running Layout app.
  2. Select File » Run Service from the main menu.
  3. Double click the entry named Spa.Service.AnalyzeTerrain.

    Service execution starts. Note that this should take around 10-20 seconds, depending on your computing hardware.

    The application creates a report and launches it in the default web browser on your computer.

    This is a picture of the debug avalanche terrain analysis.
  4. Left click one of the cells of the terrain to see the analysis: This is a picture of the debug analysis.

    This allows you to see the analysis for each cell.

Examine The Log Message

  1. Return to the running Layout application.
  2. Examine the output window.

    There is a detailed log message, including timings for each major operation.

    --- <Executing Service 'Spa.Service.AnalyzeTerrain'> ---
    
    Created directory: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122
    Created directory: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays
    Created directory: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps
    Created directory: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Analysis
    Created directory: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Analysis\Images
    Using 'Lens' sub-range for analysis: [0,0] spanning [4,4] chunks.
    Using scale factor: 111139
    Geotiff Original Width: 10812
    Geotiff Original Height: 10812
    Geotiff Original Chunks X: 43
    Geotiff Original Chunks Y: 43
    Geotiff Original Chunks Width: 256
    Geotiff Original Chunks Height: 256
    Geotiff Elevation Spacing X: 10.2906481407
    Geotiff Elevation Spacing Y: 10.2906481407
    Dst Range X Start 0
    Dst Range Y Start 0
    Dst Range Z Count 4
    Dst Range W Count 4
    Analyzing area of 'Lens' sub-range for analysis. 10537 metres x 10537 metres requested.
    Starting analysis at chunk [0,0].
    Analysis spans [4x4] chunks.
    Building array texture of dimensions 256x256 with 16 slices.
    Source data allocation succeeded! Requested: 256x4096 pixels.
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\elevation_tiles.image
    Created Array Texture From GEOTIFF In: 0 seconds.
    
    Start <Program> setup.
    Setting shader source and binding shader program to rendering device...
    Found shader source: D:\Release6\Content\Library\Shader\Avalanche Quantize Elevation\430\avalanche_quantize_elevation_compute_shader.glsl
    Successfully bound shader program: 1
    Setting shader uniforms...
    Setting shader constant: 'uniform float format_min': 0.00000000000
    Setting shader constant: 'uniform float format_max': 1.00000000000
    Setting shader constant: 'uniform int array_slices': 16
    Setting up shader buffer...
    Validated binding index: 'data' buffer index is: 0
    Validated buffer size: 'data' buffer size is 128 bytes.
    Successfully created buffer 'data' on device.
    Uploading buffer data data to GPU...
    Copy data to shader buffer: 1
    Found constant index for <Texture> named 'src' at constant index 4.
    <Texture> named 'src' will use texture unit 0.
    Successfully uploaded <Texture> named 'src'.
    Found constant index for <Texture> named 'dst' at constant index 1.
    <Texture> named 'dst' will use texture unit 1.
    Successfully uploaded <Texture> named 'dst'.
    <Program> Execution status: 1
    Reading texture back from GPU...
    Readback operation status: 1
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\elevation_tiles.png
    Successfully created overhead map!
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\elevation_map.png
    Destroyed shader program at ID: <1>.
    Created RGBA Textures In: 1 seconds.
    
    Start <Program> setup.
    Setting shader source and binding shader program to rendering device...
    Found shader source: D:\Release6\Content\Library\Shader\Avalanche Normal Map\430\avalanche_normal_map_compute_shader.glsl
    Successfully bound shader program: 1
    Setting shader uniforms...
    Setting shader constant: 'uniform float region_size_x': 10.0000000000
    Setting shader constant: 'uniform float region_size_y': 10.0000000000
    Setting shader constant: 'uniform int array_slices': 16
    Found constant index for <Texture> named 'src' at constant index 4.
    <Texture> named 'src' will use texture unit 0.
    Successfully uploaded <Texture> named 'src'.
    Found constant index for <Texture> named 'dst' at constant index 1.
    <Texture> named 'dst' will use texture unit 1.
    Successfully uploaded <Texture> named 'dst'.
    Compute Shader Execution status: 1
    Reading texture back from GPU...
    Readback operation status: 1
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\aspect_tiles.png
    Successfully created overhead map!
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\aspect_map.png
    Destroyed shader program at ID: <1>.
    Created Aspect Textures In: 3 seconds.
    
    Start <Program> setup.
    Setting shader source and binding shader program to rendering device...
    Found shader source: D:\Release6\Content\Library\Shader\Avalanche Slope Map\430\avalanche_slope_map_compute_shader.glsl
    Successfully bound shader program: 1
    Setting shader uniforms...
    Setting shader constant: 'uniform float region_size_x': 10.0000000000
    Setting shader constant: 'uniform float region_size_y': 10.0000000000
    Setting up shader buffer...
    Validated binding index: 'data' buffer index is: 0
    Validated buffer size: 'data' buffer size is 128 bytes.
    Successfully created buffer 'data' on device.
    Uploading buffer data data to GPU...
    Copy data to shader buffer: 1
    Setting shader constant: 'uniform int array_slices': 16
    Found constant index for <Texture> named 'src' at constant index 4.
    <Texture> named 'src' will use texture unit 0.
    Successfully uploaded <Texture> named 'src'.
    Found constant index for <Texture> named 'dst' at constant index 1.
    <Texture> named 'dst' will use texture unit 1.
    Successfully uploaded <Texture> named 'dst'.
    Compute Shader Execution status: 1
    Reading texture back from GPU...
    Readback operation status: 1
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\slope_tiles.png
    Successfully created overhead map!
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\slope_map.png
    Destroyed shader program at ID: <1>.
    Created Slope Textures In: 1 seconds.
    
    Start <Program> setup.
    Setting shader source and binding shader program to rendering device...
    Found shader source: D:\Release6\Content\Library\Shader\Avalanche Openness Map\430\avalanche_openness_map_compute_shader.glsl
    Successfully bound shader program: 1
    Setting shader uniforms...
    Setting shader constant: 'uniform int radius': 64
    Setting shader constant: 'uniform float min_angle': 90.0000000000
    Setting shader constant: 'uniform float max_angle': 0.00000000000
    Setting shader constant: 'uniform int array_slices': 16
    Found constant index for <Texture> named 'src' at constant index 5.
    <Texture> named 'src' will use texture unit 0.
    Successfully uploaded <Texture> named 'src'.
    Found constant index for <Texture> named 'dst' at constant index 1.
    <Texture> named 'dst' will use texture unit 1.
    Successfully uploaded <Texture> named 'dst'.
    Compute Shader Execution status: 1
    Reading texture back from GPU...
    Readback operation status: 1
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\openness_tiles.png
    Successfully created overhead map!
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\openness_map.png
    Destroyed shader program at ID: <1>.
    Created Openness Textures In: 1 seconds.
    
    Start <Program> setup.
    Setting shader source and binding shader program to rendering device...
    Found shader source: D:\Release6\Content\Library\Shader\Avalanche Surface Area\430\avalanche_surface_area_compute_shader.glsl
    Successfully bound shader program: 1
    Setting shader uniforms...
    Setting shader constant: 'uniform int array_slices': 16
    Setting shader constant: 'uniform float region_size_x': 10.0000000000
    Setting shader constant: 'uniform float region_size_y': 10.0000000000
    Found constant index for <Texture> named 'src_image' at constant index 4.
    <Texture> named 'src_image' will use texture unit 0.
    Successfully uploaded <Texture> named 'src_image'.
    Found constant index for <Texture> named 'dst_image' at constant index 1.
    <Texture> named 'dst_image' will use texture unit 1.
    Successfully uploaded <Texture> named 'dst_image'.
    Compute Shader Execution status: 1
    Reading texture back from GPU...
    Readback operation status: 1
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\surface_tiles.image
    Successfully created overhead map!
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\surface_map.png
    Destroyed shader program at ID: <1>.
    Created Surface Textures In: 1 seconds.
    
    Start <Program> setup.
    Setting shader source and binding shader program to rendering device...
    Found shader source: D:\Release6\Content\Library\Shader\Avalanche Prefix Sum\430\avalanche_prefix_sum_compute_shader.glsl
    Successfully bound shader program: 1
    Wrote layout declaration 'layout( local_size_x = 256, local_size_y = 1, local_size_z = 1 ) in;' to: D:\Release6\Content\Library\Shader\Avalanche Prefix Sum\430\avalanche_prefix_sum_local_group_decl.glsl
    Setting shader uniforms...
    Setting shader constant: 'uniform int array_slices': 16
    Found constant index for <Texture> named 'input_image' at constant index 1.
    <Texture> named 'input_image' will use texture unit 0.
    Successfully uploaded <Texture> named 'input_image'.
    Found constant index for <Texture> named 'output_image' at constant index 2.
    <Texture> named 'output_image' will use texture unit 1.
    Successfully uploaded <Texture> named 'output_image'.
    First Pass Execution status: 1
    Found constant index for <Texture> named 'input_image' at constant index 1.
    <Texture> named 'input_image' will use texture unit 0.
    Successfully uploaded <Texture> named 'input_image'.
    Found constant index for <Texture> named 'output_image' at constant index 2.
    <Texture> named 'output_image' will use texture unit 1.
    Successfully uploaded <Texture> named 'output_image'.
    Second Pass Execution status: 1
    Reading texture back from GPU...
    Readback operation status: 1
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\sum_tiles.image
    Successfully created overhead map!
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\sum_map.png
    Destroyed shader program at ID: <1>.
    Created Sum Textures In: 0 seconds.
    
    Generated report at: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Analysis\report.htm
    
    Processed elevation data for: USGS_13_n49w122.tif
    Service execution comleted: Spa.Service.AnalyzeTerrain
    

Disable Debug Mode

  1. Go to the text editor and find the script app_service_workload_analyze_terrain_util.ssl.
  2. Find the Execute() function.

    ///////////////////////////////////////////////////////////////////////////////
    // function
    ///////////////////////////////////////////////////////////////////////////////
    
    function bool Execute( CommandPresentationModuleInfo commandInfo )
    {
       auto Str a_oName;
       GetName( a_oName );
    
       //////////////////////////////////////////////////
       // Initialize source data and messages.
       //////////////////////////////////////////////////
    
       auto StrList a_slMessages;
       LibAppServiceBuild.GenerateServiceHeader(
          a_oName.Value, a_slMessages );
    
       auto FilePath a_oElevationDataPath = new FilePath(
          Application.GetApplicationDocumentsPath() );
       a_oElevationDataPath.AppendPath( "Library" );
       a_oElevationDataPath.AppendPath( "Textures" );
       a_oElevationDataPath.AppendPath( "Elevation" );
       a_oElevationDataPath.AppendPathWithFile( "USGS_13_n49w122.tif" );
    
       auto FileNode a_oData;
       a_oData.Name = a_oElevationDataPath.GetFileName();
       a_oData.FilePath = a_oElevationDataPath.GetPath();
    
       //////////////////////////////////////////////////
       // Declare and initialize build objects.
       //////////////////////////////////////////////////
    
       bool a_bDebug = true;
       int a_nDebugMaxChunksX = 4;
       int a_nDebugMaxChunksY = 4;
    
       ...
    
  3. Find the following line:

    bool a_bDebug = true;
  4. Set a_bDebug to false.

    bool a_bDebug = false;
  5. Save the script.

Execute Complete Workload

  1. Return to the running Layout app.
  2. Select File » Run Service from the main menu.
  3. Double click the entry named Spa.Service.AnalyzeTerrain.

    Service execution starts. Note that this could take 15-30 minutes to complete, depending on your computing hardware. RAM use could peak at around 10GB, and GPU memory use could peak at around 2GB. The build could take longer if you have less than the recommended CPU or GPU memory.

    After service execution completes, the application creates a report and launches it in the default web browser on your computer. The full report uses very large images (approximately 400MB), so you might have to wait while the web browser loads content from disk.

  4. Left click one of the cells of the terrain to see the analysis: This is a picture of the release analysis.

    This allows you to see the analysis for each cell.

Examine The Log Message

  1. Return to the running Layout application.
  2. Examine the output window.

    There is a detailed log message, including timings for each major operation.

    --- <Executing Service 'Spa.Service.AnalyzeTerrain'> ---
    
    Created directory: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122
    Created directory: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays
    Created directory: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps
    Created directory: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Analysis
    Created directory: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Analysis\Images
    Using 'Lens' sub-range for analysis: [0,0] spanning [43,43] chunks.
    Using scale factor: 111139
    Geotiff Original Width: 10812
    Geotiff Original Height: 10812
    Geotiff Original Chunks X: 43
    Geotiff Original Chunks Y: 43
    Geotiff Original Chunks Width: 256
    Geotiff Original Chunks Height: 256
    Geotiff Elevation Spacing X: 10.2906481407
    Geotiff Elevation Spacing Y: 10.2906481407
    Dst Range X Start 0
    Dst Range Y Start 0
    Dst Range Z Count 43
    Dst Range W Count 43
    Analyzing area of 'Lens' sub-range for analysis. 113279 metres x 113279 metres requested.
    Starting analysis at chunk [0,0].
    Analysis spans [43x43] chunks.
    Building array texture of dimensions 256x256 with 1849 slices.
    Source data allocation succeeded! Requested: 256x473344 pixels.
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\elevation_tiles.image
    Created Array Texture From GEOTIFF In: 19 seconds.
    
    Start <Program> setup.
    Setting shader source and binding shader program to rendering device...
    Found shader source: D:\Release6\Content\Library\Shader\Avalanche Quantize Elevation\430\avalanche_quantize_elevation_compute_shader.glsl
    Successfully bound shader program: 1
    Setting shader uniforms...
    Setting shader constant: 'uniform float format_min': 0.00000000000
    Setting shader constant: 'uniform float format_max': 1.00000000000
    Setting shader constant: 'uniform int array_slices': 1849
    Setting up shader buffer...
    Validated binding index: 'data' buffer index is: 0
    Validated buffer size: 'data' buffer size is 14792 bytes.
    Successfully created buffer 'data' on device.
    Uploading buffer data data to GPU...
    Copy data to shader buffer: 1
    Found constant index for <Texture> named 'src' at constant index 4.
    <Texture> named 'src' will use texture unit 0.
    Successfully uploaded <Texture> named 'src'.
    Found constant index for <Texture> named 'dst' at constant index 1.
    <Texture> named 'dst' will use texture unit 1.
    Successfully uploaded <Texture> named 'dst'.
    <Program> Execution status: 1
    Reading texture back from GPU...
    Readback operation status: 1
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\elevation_tiles.png
    Successfully created overhead map!
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\elevation_map.png
    Destroyed shader program at ID: <1>.
    Created RGBA Textures In: 117 seconds.
    
    Start <Program> setup.
    Setting shader source and binding shader program to rendering device...
    Found shader source: D:\Release6\Content\Library\Shader\Avalanche Normal Map\430\avalanche_normal_map_compute_shader.glsl
    Successfully bound shader program: 1
    Setting shader uniforms...
    Setting shader constant: 'uniform float region_size_x': 10.0000000000
    Setting shader constant: 'uniform float region_size_y': 10.0000000000
    Setting shader constant: 'uniform int array_slices': 1849
    Found constant index for <Texture> named 'src' at constant index 4.
    <Texture> named 'src' will use texture unit 0.
    Successfully uploaded <Texture> named 'src'.
    Found constant index for <Texture> named 'dst' at constant index 1.
    <Texture> named 'dst' will use texture unit 1.
    Successfully uploaded <Texture> named 'dst'.
    Compute Shader Execution status: 1
    Reading texture back from GPU...
    Readback operation status: 1
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\aspect_tiles.png
    Successfully created overhead map!
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\aspect_map.png
    Destroyed shader program at ID: <1>.
    Created Aspect Textures In: 346 seconds.
    
    Start <Program> setup.
    Setting shader source and binding shader program to rendering device...
    Found shader source: D:\Release6\Content\Library\Shader\Avalanche Slope Map\430\avalanche_slope_map_compute_shader.glsl
    Successfully bound shader program: 1
    Setting shader uniforms...
    Setting shader constant: 'uniform float region_size_x': 10.0000000000
    Setting shader constant: 'uniform float region_size_y': 10.0000000000
    Setting up shader buffer...
    Validated binding index: 'data' buffer index is: 0
    Validated buffer size: 'data' buffer size is 14792 bytes.
    Successfully created buffer 'data' on device.
    Uploading buffer data data to GPU...
    Copy data to shader buffer: 1
    Setting shader constant: 'uniform int array_slices': 1849
    Found constant index for <Texture> named 'src' at constant index 4.
    <Texture> named 'src' will use texture unit 0.
    Successfully uploaded <Texture> named 'src'.
    Found constant index for <Texture> named 'dst' at constant index 1.
    <Texture> named 'dst' will use texture unit 1.
    Successfully uploaded <Texture> named 'dst'.
    Compute Shader Execution status: 1
    Reading texture back from GPU...
    Readback operation status: 1
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\slope_tiles.png
    Successfully created overhead map!
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\slope_map.png
    Destroyed shader program at ID: <1>.
    Created Slope Textures In: 194 seconds.
    
    Start <Program> setup.
    Setting shader source and binding shader program to rendering device...
    Found shader source: D:\Release6\Content\Library\Shader\Avalanche Openness Map\430\avalanche_openness_map_compute_shader.glsl
    Successfully bound shader program: 1
    Setting shader uniforms...
    Setting shader constant: 'uniform int radius': 64
    Setting shader constant: 'uniform float min_angle': 90.0000000000
    Setting shader constant: 'uniform float max_angle': 0.00000000000
    Setting shader constant: 'uniform int array_slices': 500
    Found constant index for <Texture> named 'src' at constant index 5.
    <Texture> named 'src' will use texture unit 0.
    Successfully uploaded <Texture> named 'src'.
    Found constant index for <Texture> named 'dst' at constant index 1.
    <Texture> named 'dst' will use texture unit 1.
    Successfully uploaded <Texture> named 'dst'.
    Compute Shader Execution status: 1
    Reading texture back from GPU...
    Readback operation status: 1
    
    Setting shader uniforms...
    Setting shader constant: 'uniform int radius': 64
    Setting shader constant: 'uniform float min_angle': 90.0000000000
    Setting shader constant: 'uniform float max_angle': 0.00000000000
    Setting shader constant: 'uniform int array_slices': 500
    Found constant index for <Texture> named 'src' at constant index 5.
    <Texture> named 'src' will use texture unit 0.
    Successfully uploaded <Texture> named 'src'.
    Found constant index for <Texture> named 'dst' at constant index 1.
    <Texture> named 'dst' will use texture unit 1.
    Successfully uploaded <Texture> named 'dst'.
    Compute Shader Execution status: 1
    Reading texture back from GPU...
    Readback operation status: 1
    
    Setting shader uniforms...
    Setting shader constant: 'uniform int radius': 64
    Setting shader constant: 'uniform float min_angle': 90.0000000000
    Setting shader constant: 'uniform float max_angle': 0.00000000000
    Setting shader constant: 'uniform int array_slices': 500
    Found constant index for <Texture> named 'src' at constant index 5.
    <Texture> named 'src' will use texture unit 0.
    Successfully uploaded <Texture> named 'src'.
    Found constant index for <Texture> named 'dst' at constant index 1.
    <Texture> named 'dst' will use texture unit 1.
    Successfully uploaded <Texture> named 'dst'.
    Compute Shader Execution status: 1
    Reading texture back from GPU...
    Readback operation status: 1
    
    Setting shader uniforms...
    Setting shader constant: 'uniform int radius': 64
    Setting shader constant: 'uniform float min_angle': 90.0000000000
    Setting shader constant: 'uniform float max_angle': 0.00000000000
    Setting shader constant: 'uniform int array_slices': 349
    Found constant index for <Texture> named 'src' at constant index 5.
    <Texture> named 'src' will use texture unit 0.
    Successfully uploaded <Texture> named 'src'.
    Found constant index for <Texture> named 'dst' at constant index 1.
    <Texture> named 'dst' will use texture unit 1.
    Successfully uploaded <Texture> named 'dst'.
    Compute Shader Execution status: 1
    Reading texture back from GPU...
    Readback operation status: 1
    
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\openness_tiles.png
    Successfully created overhead map!
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\openness_map.png
    Destroyed shader program at ID: <1>.
    Created Openness Textures In: 187 seconds.
    
    Start <Program> setup.
    Setting shader source and binding shader program to rendering device...
    Found shader source: D:\Release6\Content\Library\Shader\Avalanche Surface Area\430\avalanche_surface_area_compute_shader.glsl
    Successfully bound shader program: 1
    Setting shader uniforms...
    Setting shader constant: 'uniform int array_slices': 1849
    Setting shader constant: 'uniform float region_size_x': 10.0000000000
    Setting shader constant: 'uniform float region_size_y': 10.0000000000
    Found constant index for <Texture> named 'src_image' at constant index 4.
    <Texture> named 'src_image' will use texture unit 0.
    Successfully uploaded <Texture> named 'src_image'.
    Found constant index for <Texture> named 'dst_image' at constant index 1.
    <Texture> named 'dst_image' will use texture unit 1.
    Successfully uploaded <Texture> named 'dst_image'.
    Compute Shader Execution status: 1
    Reading texture back from GPU...
    Readback operation status: 1
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\surface_tiles.image
    Successfully created overhead map!
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\surface_map.png
    Destroyed shader program at ID: <1>.
    Created Surface Textures In: 158 seconds.
    
    Start <Program> setup.
    Setting shader source and binding shader program to rendering device...
    Found shader source: D:\Release6\Content\Library\Shader\Avalanche Prefix Sum\430\avalanche_prefix_sum_compute_shader.glsl
    Successfully bound shader program: 1
    Wrote layout declaration 'layout( local_size_x = 256, local_size_y = 1, local_size_z = 1 ) in;' to: D:\Release6\Content\Library\Shader\Avalanche Prefix Sum\430\avalanche_prefix_sum_local_group_decl.glsl
    Setting shader uniforms...
    Setting shader constant: 'uniform int array_slices': 1849
    Found constant index for <Texture> named 'input_image' at constant index 1.
    <Texture> named 'input_image' will use texture unit 0.
    Successfully uploaded <Texture> named 'input_image'.
    Found constant index for <Texture> named 'output_image' at constant index 2.
    <Texture> named 'output_image' will use texture unit 1.
    Successfully uploaded <Texture> named 'output_image'.
    First Pass Execution status: 1
    Found constant index for <Texture> named 'input_image' at constant index 1.
    <Texture> named 'input_image' will use texture unit 0.
    Successfully uploaded <Texture> named 'input_image'.
    Found constant index for <Texture> named 'output_image' at constant index 2.
    <Texture> named 'output_image' will use texture unit 1.
    Successfully uploaded <Texture> named 'output_image'.
    Second Pass Execution status: 1
    Reading texture back from GPU...
    Readback operation status: 1
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Arrays\sum_tiles.image
    Successfully created overhead map!
    Generated image: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Maps\sum_map.png
    Destroyed shader program at ID: <1>.
    Created Sum Textures In: 91 seconds.
    
    Generated report at: D:\Release6\Content\Library\Textures\Elevation\USGS_13_n49w122\Analysis\report.htm
    
    Processed elevation data for: USGS_13_n49w122.tif
    Service execution comleted: Spa.Service.AnalyzeTerrain