From 4f002879eca903b704a324a5c0f8998ec5831610 Mon Sep 17 00:00:00 2001 From: Daniel Meister Date: Fri, 22 Sep 2023 10:57:26 +0900 Subject: [PATCH 1/2] Updating tutorials to 2.1 --- tutorials/00_context_creation/main.cpp | 8 +- tutorials/01_geom_intersection/main.cpp | 40 +- tutorials/02_scene_intersection/TestKernel.h | 43 -- tutorials/02_scene_intersection/main.cpp | 64 +-- tutorials/03_custom_intersection/TestKernel.h | 82 ---- tutorials/03_custom_intersection/main.cpp | 67 +-- .../main.cpp | 74 ++-- .../premake5.lua | 2 +- tutorials/04_shared_stack/TestKernel.h | 71 ---- tutorials/05_custom_bvh_import/TestKernel.h | 60 --- tutorials/05_custom_bvh_import/main.cpp | 164 ------- tutorials/05_dynamic_stack/main.cpp | 115 +++++ .../premake5.lua | 2 +- tutorials/06_custom_bvh_import/main.cpp | 173 ++++++++ .../premake5.lua | 2 +- .../main.cpp | 47 +- .../premake5.lua | 2 +- .../main.cpp | 104 +++-- tutorials/08_motion_blur_srt/premake5.lua | 13 + .../main.cpp | 104 +++-- .../premake5.lua | 2 +- .../09_multi_custom_intersection/premake5.lua | 13 - .../main.cpp | 115 ++--- .../10_multi_custom_intersection/premake5.lua | 13 + .../11_concurrent_scene_build/premake5.lua | 13 - tutorials/{10_cutout => 11_cutout}/main.cpp | 47 +- .../{10_cutout => 11_cutout}/premake5.lua | 2 +- .../main.cpp | 125 +++--- .../12_concurrent_scene_build/premake5.lua | 13 + tutorials/13_batch_build/main.cpp | 204 +++++++++ tutorials/13_batch_build/premake5.lua | 13 + tutorials/14_fluid_simulation/main.cpp | 256 +++++++++++ tutorials/14_fluid_simulation/premake5.lua | 13 + .../{12_hiprt_hip => 15_hiprt_hip}/main.cpp | 4 +- .../premake5.lua | 8 +- tutorials/common/Aabb.h | 99 +++++ tutorials/common/BvhBuilder.h | 402 ++++++++---------- tutorials/common/Common.h | 219 +++++----- tutorials/common/CornellBox.h | 272 ++++++------ .../TestKernel.h => common/FluidSimulation.h} | 94 ++-- tutorials/common/TutorialBase.cpp | 63 ++- tutorials/common/TutorialBase.h | 7 +- tutorials/common/TutorialKernels.h | 303 ++++++++++--- tutorials/common/dependency.lua | 2 +- ...4_shared_stack.png => 04_global_stack.png} | Bin tutorials/imgs/05_dynamic_stack.png | Bin 0 -> 12311 bytes ...vh_import.png => 06_custom_bvh_import.png} | Bin tutorials/imgs/06_obj_AO.png | Bin 199739 -> 0 bytes ...occlusion.png => 07_ambient_occlusion.png} | Bin 228144 -> 228187 bytes ...motion_blur.png => 08_motion_blur_srt.png} | Bin .../imgs/08_multi_custom_intersection.png | Bin 29829 -> 0 bytes .../imgs/08_multi_cutsom_intersection.png | Bin 29829 -> 0 bytes tutorials/imgs/09_motion_blur_matrix.png | Bin 0 -> 30657 bytes ...n.png => 10_multi_custom_intersection.png} | Bin .../imgs/{10_cutout.png => 11_cutout.png} | Bin ...uild.png => 12_concurrent_scene_build.png} | Bin tutorials/imgs/13_batch_build.png | Bin 0 -> 12093 bytes tutorials/imgs/14_fluid_simulation.png | Bin 0 -> 87424 bytes tutorials/imgs/MeshIntersection.png | Bin 14038 -> 0 bytes tutorials/imgs/MotionBlur.png | Bin 30488 -> 0 bytes tutorials/imgs/SceneIntersection.png | Bin 12925 -> 0 bytes tutorials/premake5.lua | 170 ++++---- tutorials/readme.md | 19 +- tutorials/scripts/test.bat | 15 + tutorials/scripts/test.sh | 18 + 65 files changed, 2239 insertions(+), 1522 deletions(-) delete mode 100644 tutorials/02_scene_intersection/TestKernel.h delete mode 100644 tutorials/03_custom_intersection/TestKernel.h rename tutorials/{04_shared_stack => 04_global_stack}/main.cpp (52%) rename tutorials/{04_shared_stack => 04_global_stack}/premake5.lua (91%) delete mode 100644 tutorials/04_shared_stack/TestKernel.h delete mode 100644 tutorials/05_custom_bvh_import/TestKernel.h delete mode 100644 tutorials/05_custom_bvh_import/main.cpp create mode 100644 tutorials/05_dynamic_stack/main.cpp rename tutorials/{07_motion_blur_srt => 05_dynamic_stack}/premake5.lua (90%) create mode 100644 tutorials/06_custom_bvh_import/main.cpp rename tutorials/{05_custom_bvh_import => 06_custom_bvh_import}/premake5.lua (89%) rename tutorials/{06_ambient_occlusion => 07_ambient_occlusion}/main.cpp (64%) rename tutorials/{06_ambient_occlusion => 07_ambient_occlusion}/premake5.lua (89%) rename tutorials/{07_motion_blur_srt => 08_motion_blur_srt}/main.cpp (61%) create mode 100644 tutorials/08_motion_blur_srt/premake5.lua rename tutorials/{08_motion_blur_matrix => 09_motion_blur_matrix}/main.cpp (63%) rename tutorials/{08_motion_blur_matrix => 09_motion_blur_matrix}/premake5.lua (89%) delete mode 100644 tutorials/09_multi_custom_intersection/premake5.lua rename tutorials/{09_multi_custom_intersection => 10_multi_custom_intersection}/main.cpp (53%) create mode 100644 tutorials/10_multi_custom_intersection/premake5.lua delete mode 100644 tutorials/11_concurrent_scene_build/premake5.lua rename tutorials/{10_cutout => 11_cutout}/main.cpp (62%) rename tutorials/{10_cutout => 11_cutout}/premake5.lua (93%) rename tutorials/{11_concurrent_scene_build => 12_concurrent_scene_build}/main.cpp (53%) create mode 100644 tutorials/12_concurrent_scene_build/premake5.lua create mode 100644 tutorials/13_batch_build/main.cpp create mode 100644 tutorials/13_batch_build/premake5.lua create mode 100644 tutorials/14_fluid_simulation/main.cpp create mode 100644 tutorials/14_fluid_simulation/premake5.lua rename tutorials/{12_hiprt_hip => 15_hiprt_hip}/main.cpp (98%) rename tutorials/{12_hiprt_hip => 15_hiprt_hip}/premake5.lua (80%) create mode 100644 tutorials/common/Aabb.h rename tutorials/{01_geom_intersection/TestKernel.h => common/FluidSimulation.h} (57%) rename tutorials/imgs/{04_shared_stack.png => 04_global_stack.png} (100%) create mode 100644 tutorials/imgs/05_dynamic_stack.png rename tutorials/imgs/{05_custom_bvh_import.png => 06_custom_bvh_import.png} (100%) delete mode 100644 tutorials/imgs/06_obj_AO.png rename tutorials/imgs/{06_ambient_occlusion.png => 07_ambient_occlusion.png} (55%) rename tutorials/imgs/{07_08_motion_blur.png => 08_motion_blur_srt.png} (100%) delete mode 100644 tutorials/imgs/08_multi_custom_intersection.png delete mode 100644 tutorials/imgs/08_multi_cutsom_intersection.png create mode 100644 tutorials/imgs/09_motion_blur_matrix.png rename tutorials/imgs/{09_multi_custom_intersection.png => 10_multi_custom_intersection.png} (100%) rename tutorials/imgs/{10_cutout.png => 11_cutout.png} (100%) rename tutorials/imgs/{11_concurrent_scene_build.png => 12_concurrent_scene_build.png} (100%) create mode 100644 tutorials/imgs/13_batch_build.png create mode 100644 tutorials/imgs/14_fluid_simulation.png delete mode 100644 tutorials/imgs/MeshIntersection.png delete mode 100644 tutorials/imgs/MotionBlur.png delete mode 100644 tutorials/imgs/SceneIntersection.png create mode 100644 tutorials/scripts/test.bat create mode 100644 tutorials/scripts/test.sh diff --git a/tutorials/00_context_creation/main.cpp b/tutorials/00_context_creation/main.cpp index ffb6ea6..afb7068 100644 --- a/tutorials/00_context_creation/main.cpp +++ b/tutorials/00_context_creation/main.cpp @@ -25,8 +25,8 @@ int main( int argc, char** argv ) { const int deviceIndex = 0; - - CHECK_ORO( (oroError)oroInitialize( ( oroApi )( ORO_API_HIP | ORO_API_CUDA ), 0 ) ); + + CHECK_ORO( (oroError)oroInitialize( (oroApi)( ORO_API_HIP | ORO_API_CUDA ), 0 ) ); CHECK_ORO( oroInit( 0 ) ); @@ -45,11 +45,11 @@ int main( int argc, char** argv ) ctxtInput.deviceType = hiprtDeviceNVIDIA; else ctxtInput.deviceType = hiprtDeviceAMD; - ctxtInput.ctxt = oroGetRawCtx( oroCtx ); + ctxtInput.ctxt = oroGetRawCtx( oroCtx ); ctxtInput.device = oroGetRawDevice( oroDevice ); hiprtContext ctxt; - CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, ctxtInput, &ctxt ) ); + CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, ctxtInput, ctxt ) ); CHECK_HIPRT( hiprtDestroyContext( ctxt ) ); return 0; diff --git a/tutorials/01_geom_intersection/main.cpp b/tutorials/01_geom_intersection/main.cpp index 5718c98..3a6a900 100644 --- a/tutorials/01_geom_intersection/main.cpp +++ b/tutorials/01_geom_intersection/main.cpp @@ -25,21 +25,24 @@ class Tutorial : public TutorialBase { public: - void run() + void run() { hiprtContext ctxt; - CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, &ctxt ) ); + CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, ctxt ) ); hiprtTriangleMeshPrimitive mesh; mesh.triangleCount = 2; mesh.triangleStride = sizeof( hiprtInt3 ); int triangleIndices[] = { 0, 1, 2, 3, 4, 5 }; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&mesh.triangleIndices, mesh.triangleCount * sizeof( hiprtInt3 ) ) ); CHECK_ORO( - oroMemcpyHtoD( (oroDeviceptr)mesh.triangleIndices, triangleIndices, mesh.triangleCount * sizeof( hiprtInt3 ) ) ); + oroMalloc( reinterpret_cast( &mesh.triangleIndices ), mesh.triangleCount * sizeof( hiprtInt3 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( mesh.triangleIndices ), + triangleIndices, + mesh.triangleCount * sizeof( hiprtInt3 ) ) ); - mesh.vertexCount = 6; - mesh.vertexStride = sizeof( hiprtFloat3 ); + mesh.vertexCount = 6; + mesh.vertexStride = sizeof( hiprtFloat3 ); hiprtFloat3 vertices[] = { { 0.0f, 0.0f, 0.0f }, { 1.0f, 0.0f, 0.0f }, @@ -47,38 +50,39 @@ class Tutorial : public TutorialBase { 0.0f, 0.0f, 1.0f }, { 1.0f, 0.0f, 1.0f }, { 0.5f, 1.0f, 1.0f } }; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&mesh.vertices, mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); - CHECK_ORO( oroMemcpyHtoD( (oroDeviceptr)mesh.vertices, vertices, mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &mesh.vertices ), mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( mesh.vertices ), vertices, mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); hiprtGeometryBuildInput geomInput; geomInput.type = hiprtPrimitiveTypeTriangleMesh; - geomInput.triangleMesh.primitive = &mesh; + geomInput.triangleMesh.primitive = mesh; size_t geomTempSize; hiprtDevicePtr geomTemp; hiprtBuildOptions options; options.buildFlags = hiprtBuildFlagBitPreferFastBuild; - CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, &geomInput, &options, &geomTempSize ) ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&geomTemp, geomTempSize ) ); + CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, geomInput, options, geomTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &geomTemp ), geomTempSize ) ); hiprtGeometry geom; - CHECK_HIPRT( hiprtCreateGeometry( ctxt, &geomInput, &options, &geom ) ); - CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, &geomInput, &options, geomTemp, 0, geom ) ); + CHECK_HIPRT( hiprtCreateGeometry( ctxt, geomInput, options, geom ) ); + CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, geomInput, options, geomTemp, 0, geom ) ); oroFunction func; buildTraceKernelFromBitcode( ctxt, "../common/TutorialKernels.h", "GeomIntersectionKernel", func ); u8* pixels; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&pixels, m_res.x * m_res.y * 4 ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &pixels ), m_res.x * m_res.y * 4 ) ); void* args[] = { &geom, &pixels, &m_res }; launchKernel( func, m_res.x, m_res.y, args ); writeImage( "01_geom_intersection.png", m_res.x, m_res.y, pixels ); - CHECK_ORO( oroFree( (oroDeviceptr)mesh.triangleIndices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)mesh.vertices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)geomTemp ) ); - CHECK_ORO( oroFree( (oroDeviceptr)pixels ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh.triangleIndices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh.vertices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( geomTemp ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( pixels ) ) ); CHECK_HIPRT( hiprtDestroyGeometry( ctxt, geom ) ); CHECK_HIPRT( hiprtDestroyContext( ctxt ) ); diff --git a/tutorials/02_scene_intersection/TestKernel.h b/tutorials/02_scene_intersection/TestKernel.h deleted file mode 100644 index 32f3656..0000000 --- a/tutorials/02_scene_intersection/TestKernel.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// Copyright (c) 2021-2022 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -extern "C" __global__ void SceneIntersection( hiprtScene scene, unsigned char* gDst, int2 cRes ) -{ - const int gIdx = blockIdx.x * blockDim.x + threadIdx.x; - const int gIdy = blockIdx.y * blockDim.y + threadIdx.y; - - hiprtRay ray; - float3 o = { gIdx / (float)cRes.x - 0.5f, gIdy / (float)cRes.y - 0.5f, -1.f }; - float3 d = { 0.0f, 0.0f, 1.0f }; - ray.origin = o; - ray.direction = d; - ray.maxT = 1000.f; - - hiprtSceneTraversalClosest tr( scene, ray, 0xffffffff ); - hiprtHit hit = tr.getNextHit(); - - int dstIdx = gIdx + gIdy * cRes.x; - gDst[dstIdx * 4 + 0] = hit.hasHit() ? ( (float)gIdx / cRes.x ) * 255 : 0; - gDst[dstIdx * 4 + 1] = hit.hasHit() ? ( (float)gIdy / cRes.y ) * 255 : 0; - gDst[dstIdx * 4 + 2] = 0; - gDst[dstIdx * 4 + 3] = 255; -} diff --git a/tutorials/02_scene_intersection/main.cpp b/tutorials/02_scene_intersection/main.cpp index 003a65f..3ac5013 100644 --- a/tutorials/02_scene_intersection/main.cpp +++ b/tutorials/02_scene_intersection/main.cpp @@ -25,18 +25,21 @@ class Tutorial : public TutorialBase { public: - void run() + void run() { hiprtContext ctxt; - CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, &ctxt ) ); + CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, ctxt ) ); hiprtTriangleMeshPrimitive mesh; - mesh.triangleCount = 2; - mesh.triangleStride = sizeof( hiprtInt3 ); + mesh.triangleCount = 2; + mesh.triangleStride = sizeof( hiprtInt3 ); int triangleIndices[] = { 0, 1, 2, 3, 4, 5 }; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&mesh.triangleIndices, mesh.triangleCount * sizeof( hiprtInt3 ) ) ); CHECK_ORO( - oroMemcpyHtoD( (oroDeviceptr)mesh.triangleIndices, triangleIndices, mesh.triangleCount * sizeof( hiprtInt3 ) ) ); + oroMalloc( reinterpret_cast( &mesh.triangleIndices ), mesh.triangleCount * sizeof( hiprtInt3 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( mesh.triangleIndices ), + triangleIndices, + mesh.triangleCount * sizeof( hiprtInt3 ) ) ); mesh.vertexCount = 6; mesh.vertexStride = sizeof( hiprtFloat3 ); @@ -49,65 +52,68 @@ class Tutorial : public TutorialBase { -s, s, 0.0f }, { -s + t * s, -s * s, 0.0f }, { -s - t * s, -s * s, 0.0f } }; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&mesh.vertices, mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); - CHECK_ORO( oroMemcpyHtoD( (oroDeviceptr)mesh.vertices, vertices, mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &mesh.vertices ), mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( mesh.vertices ), vertices, mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); hiprtGeometryBuildInput geomInput; geomInput.type = hiprtPrimitiveTypeTriangleMesh; - geomInput.triangleMesh.primitive = &mesh; + geomInput.triangleMesh.primitive = mesh; size_t geomTempSize; hiprtDevicePtr geomTemp; hiprtBuildOptions options; options.buildFlags = hiprtBuildFlagBitPreferFastBuild; - CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, &geomInput, &options, &geomTempSize ) ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&geomTemp, geomTempSize ) ); + CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, geomInput, options, geomTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &geomTemp ), geomTempSize ) ); hiprtGeometry geom; - CHECK_HIPRT( hiprtCreateGeometry( ctxt, &geomInput, &options, &geom ) ); - CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, &geomInput, &options, geomTemp, 0, geom ) ); + CHECK_HIPRT( hiprtCreateGeometry( ctxt, geomInput, options, geom ) ); + CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, geomInput, options, geomTemp, 0, geom ) ); hiprtSceneBuildInput sceneInput; sceneInput.instanceCount = 1; sceneInput.instanceMasks = nullptr; sceneInput.instanceTransformHeaders = nullptr; hiprtDevicePtr geoms[] = { geom }; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&sceneInput.instanceGeometries, sizeof( hiprtDevicePtr ) ) ); - CHECK_ORO( oroMemcpyHtoD( (oroDeviceptr)sceneInput.instanceGeometries, geoms, sizeof( hiprtDevicePtr ) ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &sceneInput.instanceGeometries ), sizeof( hiprtDevicePtr ) ) ); + CHECK_ORO( + oroMemcpyHtoD( reinterpret_cast( sceneInput.instanceGeometries ), geoms, sizeof( hiprtDevicePtr ) ) ); hiprtFrameSRT frame; frame.translation = make_hiprtFloat3( 0.0f, 0.0f, 0.0f ); frame.scale = make_hiprtFloat3( 0.5f, 0.5f, 0.5f ); frame.rotation = make_hiprtFloat4( 0.0f, 0.0f, 1.0f, 0.0f ); sceneInput.frameCount = 1; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&sceneInput.instanceFrames, sizeof( hiprtFrameSRT ) ) ); - CHECK_ORO( oroMemcpyHtoD( (oroDeviceptr)sceneInput.instanceFrames, &frame, sizeof( hiprtFrameSRT ) ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &sceneInput.instanceFrames ), sizeof( hiprtFrameSRT ) ) ); + CHECK_ORO( + oroMemcpyHtoD( reinterpret_cast( sceneInput.instanceFrames ), &frame, sizeof( hiprtFrameSRT ) ) ); size_t sceneTempSize; hiprtDevicePtr sceneTemp; - CHECK_HIPRT( hiprtGetSceneBuildTemporaryBufferSize( ctxt, &sceneInput, &options, &sceneTempSize ) ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&sceneTemp, sceneTempSize ) ); + CHECK_HIPRT( hiprtGetSceneBuildTemporaryBufferSize( ctxt, sceneInput, options, sceneTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &sceneTemp ), sceneTempSize ) ); hiprtScene scene; - CHECK_HIPRT( hiprtCreateScene( ctxt, &sceneInput, &options, &scene ) ); - CHECK_HIPRT( hiprtBuildScene( ctxt, hiprtBuildOperationBuild, &sceneInput, &options, sceneTemp, 0, scene ) ); + CHECK_HIPRT( hiprtCreateScene( ctxt, sceneInput, options, scene ) ); + CHECK_HIPRT( hiprtBuildScene( ctxt, hiprtBuildOperationBuild, sceneInput, options, sceneTemp, 0, scene ) ); oroFunction func; buildTraceKernelFromBitcode( ctxt, "../common/TutorialKernels.h", "SceneIntersectionKernel", func ); u8* pixels; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&pixels, m_res.x * m_res.y * 4 ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &pixels ), m_res.x * m_res.y * 4 ) ); void* args[] = { &scene, &pixels, &m_res }; launchKernel( func, m_res.x, m_res.y, args ); writeImage( "02_scene_intersection.png", m_res.x, m_res.y, pixels ); - CHECK_ORO( oroFree( (oroDeviceptr)sceneInput.instanceGeometries ) ); - CHECK_ORO( oroFree( (oroDeviceptr)sceneInput.instanceFrames ) ); - CHECK_ORO( oroFree( (oroDeviceptr)mesh.triangleIndices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)mesh.vertices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)geomTemp ) ); - CHECK_ORO( oroFree( (oroDeviceptr)pixels ) ); + CHECK_ORO( oroFree( reinterpret_cast( sceneInput.instanceGeometries ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( sceneInput.instanceFrames ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh.triangleIndices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh.vertices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( geomTemp ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( pixels ) ) ); CHECK_HIPRT( hiprtDestroyGeometry( ctxt, geom ) ); CHECK_HIPRT( hiprtDestroyScene( ctxt, scene ) ); @@ -123,5 +129,3 @@ int main( int argc, char** argv ) return 0; } - - diff --git a/tutorials/03_custom_intersection/TestKernel.h b/tutorials/03_custom_intersection/TestKernel.h deleted file mode 100644 index b36631a..0000000 --- a/tutorials/03_custom_intersection/TestKernel.h +++ /dev/null @@ -1,82 +0,0 @@ -// -// Copyright (c) 2021-2022 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -__device__ float dot3F4( const float4& a, const float4& b ) { return a.x * b.x + a.y * b.y + a.z * b.z; } -__device__ float dot( const float3& a, const float3& b ) { return a.x * b.x + a.y * b.y + a.z * b.z; } -__device__ float3 normalize( const float3& a ) { return a / sqrtf( dot( a, a ) ); } - -//check if there is a hit before ray.maxT. if there is, set it to tOut. hiprt will overwrite ray.maxT after this function -__device__ bool intersect( - const hiprtRay& ray, - unsigned int primIdx, - const void* userPtr, - void* payload, - float2& uvOut, - float3& normalOut, - float& tOut ) -{ - const float4 from = make_float4( ray.origin.x, ray.origin.y, ray.origin.z, 0.f ); - const float4 to = from + make_float4( ray.direction.x, ray.direction.y, ray.direction.z, 0.f ) * ray.maxT; - const float4* o = (const float4*)userPtr; - const float4 sphere = make_float4( o[primIdx].x, o[primIdx].y, o[primIdx].z, 0.f ); - const float r = o[primIdx].w; - - float4 m = from - sphere; - float4 d = to - from; - float a = dot3F4( d, d ); - float b = 2 * dot3F4( m, d ); - float c = dot3F4( m, m ) - r * r; - float dd = b * b - 4.f * a * c; - if ( dd < 0.f ) return false; - - float t = ( -b - sqrtf( dd ) ) / ( 2.f * a ); - if( t > 1.f ) - return false; - - tOut = t * ray.maxT; - float4 n = from + make_float4( ray.direction.x, ray.direction.y, ray.direction.z, 0.f ) * tOut - sphere; - normalOut = normalize( make_float3( n.x, n.y, n.z ) ); - return true; -} - -__device__ hiprtIntersectFunc sphereIntersect = intersect; - -extern "C" __global__ void CustomIntersectionKernel( hiprtGeometry geom, unsigned char* gDst, hiprtCustomFuncTable table, int2 cRes ) -{ - const int gIdx = blockIdx.x * blockDim.x + threadIdx.x; - const int gIdy = blockIdx.y * blockDim.y + threadIdx.y; - - hiprtRay ray; - ray.origin = { gIdx / (float)cRes.x - 0.5f, gIdy / (float)cRes.y - 0.5f, -1.f }; - ray.direction = { 0.f, 0.f, 1.f }; - ray.maxT = 1000.f; - - hiprtGeomCustomTraversalClosest tr( geom, ray, *(hiprtCustomFuncSet*)table ); - hiprtHit hit = tr.getNextHit(); - - int dstIdx = gIdx + gIdy * cRes.x; - gDst[dstIdx * 4 + 0] = hit.hasHit() ? (hit.normal.x+1.f)/2.f * 255 : 0; - gDst[dstIdx * 4 + 1] = hit.hasHit() ? (hit.normal.y+1.f)/2.f * 255 : 0; - gDst[dstIdx * 4 + 2] = hit.hasHit() ? (hit.normal.z+1.f)/2.f * 255 : 0; - gDst[dstIdx * 4 + 3] = 255; -} - diff --git a/tutorials/03_custom_intersection/main.cpp b/tutorials/03_custom_intersection/main.cpp index 288734d..98a00bb 100644 --- a/tutorials/03_custom_intersection/main.cpp +++ b/tutorials/03_custom_intersection/main.cpp @@ -25,82 +25,85 @@ class Tutorial : public TutorialBase { public: - void run() + void run() { - const int sphereCount = 8 * 2; - hiprtFloat4 spheres[sphereCount]; - for ( int i = 0; i < sphereCount / 2; i++ ) + constexpr u32 SphereCount = 8 * 2; + hiprtFloat4 spheres[SphereCount]; + for ( int i = 0; i < SphereCount / 2; i++ ) { float r = 0.1f; - float t = i / (float)( sphereCount / 2 ) * 2.f * 3.1415f; + float t = i / (float)( SphereCount / 2 ) * 2.f * 3.1415f; spheres[i] = { sin( t ) * 0.4f, cos( t ) * 0.4f, 0.f, r }; } - for ( int i = 0; i < sphereCount / 2; i++ ) + for ( int i = 0; i < SphereCount / 2; i++ ) { - float r = 0.1f; - float t = i / (float)( sphereCount / 2 ) * 2.f * 3.1415f + 0.2f; - spheres[i + sphereCount / 2] = { sin( t ) * 0.35f, cos( t ) * 0.35f, 0.4f, r }; + float r = 0.1f; + float t = i / (float)( SphereCount / 2 ) * 2.f * 3.1415f + 0.2f; + spheres[i + SphereCount / 2] = { sin( t ) * 0.35f, cos( t ) * 0.35f, 0.4f, r }; } hiprtContext ctxt; - CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, &ctxt ) ); + CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, ctxt ) ); hiprtAABBListPrimitive list; - list.aabbCount = sphereCount; + list.aabbCount = SphereCount; list.aabbStride = 2 * sizeof( hiprtFloat4 ); - hiprtFloat4 aabbs[2 * sphereCount]; - for ( int i = 0; i < sphereCount ; i++) + hiprtFloat4 aabbs[2 * SphereCount]; + for ( int i = 0; i < SphereCount; i++ ) { const hiprtFloat4& c = spheres[i]; aabbs[i * 2 + 0] = { c.x - c.w, c.y - c.w, c.z - c.w, 0.0f }; aabbs[i * 2 + 1] = { c.x + c.w, c.y + c.w, c.z + c.w, 0.0f }; } - CHECK_ORO( oroMalloc( (oroDeviceptr*)&list.aabbs, 2 * sphereCount * sizeof( hiprtFloat4 ) ) ); - CHECK_ORO( oroMemcpyHtoD( (oroDeviceptr)list.aabbs, aabbs, 2 * sphereCount * sizeof( hiprtFloat4 ) ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &list.aabbs ), 2 * SphereCount * sizeof( hiprtFloat4 ) ) ); + CHECK_ORO( + oroMemcpyHtoD( reinterpret_cast( list.aabbs ), aabbs, 2 * SphereCount * sizeof( hiprtFloat4 ) ) ); hiprtGeometryBuildInput geomInput; geomInput.type = hiprtPrimitiveTypeAABBList; - geomInput.aabbList.primitive = &list; + geomInput.aabbList.primitive = list; geomInput.geomType = 0; size_t geomTempSize; hiprtDevicePtr geomTemp; hiprtBuildOptions options; options.buildFlags = hiprtBuildFlagBitPreferFastBuild; - CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, &geomInput, &options, &geomTempSize ) ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&geomTemp, geomTempSize ) ); + CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, geomInput, options, geomTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &geomTemp ), geomTempSize ) ); hiprtGeometry geom; - CHECK_HIPRT( hiprtCreateGeometry( ctxt, &geomInput, &options, &geom ) ); - CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, &geomInput, &options, geomTemp, 0, geom ) ); + CHECK_HIPRT( hiprtCreateGeometry( ctxt, geomInput, options, geom ) ); + CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, geomInput, options, geomTemp, 0, geom ) ); hiprtFuncNameSet funcNameSet; funcNameSet.intersectFuncName = "intersectSphere"; std::vector funcNameSets = { funcNameSet }; hiprtFuncDataSet funcDataSet; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&funcDataSet.intersectFuncData, sphereCount * sizeof( hiprtFloat4 ) ) ); - CHECK_ORO( - oroMemcpyHtoD( (oroDeviceptr)funcDataSet.intersectFuncData, spheres, sphereCount * sizeof( hiprtFloat4 ) ) ); + CHECK_ORO( oroMalloc( + reinterpret_cast( &funcDataSet.intersectFuncData ), SphereCount * sizeof( hiprtFloat4 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( funcDataSet.intersectFuncData ), spheres, SphereCount * sizeof( hiprtFloat4 ) ) ); hiprtFuncTable funcTable; - CHECK_HIPRT( hiprtCreateFuncTable( ctxt, 1, 1, &funcTable ) ); + CHECK_HIPRT( hiprtCreateFuncTable( ctxt, 1, 1, funcTable ) ); CHECK_HIPRT( hiprtSetFuncTable( ctxt, funcTable, 0, 0, funcDataSet ) ); - oroFunction func; - buildTraceKernelFromBitcode( ctxt, "../common/TutorialKernels.h", "CustomIntersectionKernel", func, nullptr, &funcNameSets, 1, 1 ); + oroFunction func; + buildTraceKernelFromBitcode( + ctxt, "../common/TutorialKernels.h", "CustomIntersectionKernel", func, nullptr, &funcNameSets, 1, 1 ); u8* pixels; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&pixels, m_res.x * m_res.y * 4 ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &pixels ), m_res.x * m_res.y * 4 ) ); void* args[] = { &geom, &pixels, &funcTable, &m_res }; launchKernel( func, m_res.x, m_res.y, args ); writeImage( "03_custom_intersection.png", m_res.x, m_res.y, pixels ); - CHECK_ORO( oroFree( (oroDeviceptr)funcDataSet.intersectFuncData ) ); - CHECK_ORO( oroFree( (oroDeviceptr)list.aabbs ) ); - CHECK_ORO( oroFree( (oroDeviceptr)geomTemp ) ); - CHECK_ORO( oroFree( (oroDeviceptr)pixels ) ); + CHECK_ORO( oroFree( reinterpret_cast( funcDataSet.intersectFuncData ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( list.aabbs ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( geomTemp ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( pixels ) ) ); CHECK_HIPRT( hiprtDestroyFuncTable( ctxt, funcTable ) ); CHECK_HIPRT( hiprtDestroyGeometry( ctxt, geom ) ); @@ -116,5 +119,3 @@ int main( int argc, char** argv ) return 0; } - - diff --git a/tutorials/04_shared_stack/main.cpp b/tutorials/04_global_stack/main.cpp similarity index 52% rename from tutorials/04_shared_stack/main.cpp rename to tutorials/04_global_stack/main.cpp index ec1aae9..756c7fc 100644 --- a/tutorials/04_shared_stack/main.cpp +++ b/tutorials/04_global_stack/main.cpp @@ -20,79 +20,85 @@ // THE SOFTWARE. // -#include -#include #include +#include +#include class Tutorial : public TutorialBase { public: - void run() + void run() { hiprtContext ctxt; - CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, &ctxt ) ); + CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, ctxt ) ); - int stackSize = 64; - const int sharepixelsackSize = 16; - const int blockWidth = 8; - const int blockHeight = 8; - const int blockSize = blockWidth * blockHeight; - std::string blockSizeDef = "-D BLOCK_SIZE=" + std::to_string( blockSize ); - std::string sharepixelsackSizeDef = "-D SHARED_STACK_SIZE=" + std::to_string( sharepixelsackSize ); + constexpr u32 StackSize = 64u; + constexpr u32 SharedStackSize = 16u; + constexpr u32 BlockWidth = 8u; + constexpr u32 BlockHeight = 8u; + constexpr u32 BlockSize = BlockWidth * BlockHeight; + std::string BlockSizeDef = "-D BLOCK_SIZE=" + std::to_string( BlockSize ); + std::string SharedStackSizeDef = "-D SHARED_STACK_SIZE=" + std::to_string( SharedStackSize ); std::vector opts; - opts.push_back( blockSizeDef.c_str() ); - opts.push_back( sharepixelsackSizeDef.c_str() ); + opts.push_back( BlockSizeDef.c_str() ); + opts.push_back( SharedStackSizeDef.c_str() ); hiprtTriangleMeshPrimitive mesh; mesh.triangleCount = CornellBoxTriangleCount; mesh.triangleStride = sizeof( hiprtInt3 ); std::array triangleIndices; std::iota( triangleIndices.begin(), triangleIndices.end(), 0 ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&mesh.triangleIndices, mesh.triangleCount * sizeof( hiprtInt3 ) ) ); CHECK_ORO( - oroMemcpyHtoD( (oroDeviceptr)mesh.triangleIndices, triangleIndices.data(), mesh.triangleCount * sizeof( hiprtInt3 ) ) ); + oroMalloc( reinterpret_cast( &mesh.triangleIndices ), mesh.triangleCount * sizeof( hiprtInt3 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( mesh.triangleIndices ), + triangleIndices.data(), + mesh.triangleCount * sizeof( hiprtInt3 ) ) ); mesh.vertexCount = 3 * mesh.triangleCount; mesh.vertexStride = sizeof( hiprtFloat3 ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&mesh.vertices, mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &mesh.vertices ), mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); CHECK_ORO( oroMemcpyHtoD( - (oroDeviceptr)mesh.vertices, (hiprtFloat3*)cornellBoxVertices.data(), mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); + reinterpret_cast( mesh.vertices ), + const_cast( cornellBoxVertices.data() ), + mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); hiprtGeometryBuildInput geomInput; geomInput.type = hiprtPrimitiveTypeTriangleMesh; - geomInput.triangleMesh.primitive = &mesh; + geomInput.triangleMesh.primitive = mesh; size_t geomTempSize; hiprtDevicePtr geomTemp; hiprtBuildOptions options; options.buildFlags = hiprtBuildFlagBitPreferFastBuild; - CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, &geomInput, &options, &geomTempSize ) ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&geomTemp, geomTempSize ) ); + CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, geomInput, options, geomTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &geomTemp ), geomTempSize ) ); hiprtGeometry geom; - CHECK_HIPRT( hiprtCreateGeometry( ctxt, &geomInput, &options, &geom ) ); - CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, &geomInput, &options, geomTemp, 0, geom ) ); + CHECK_HIPRT( hiprtCreateGeometry( ctxt, geomInput, options, geom ) ); + CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, geomInput, options, geomTemp, 0, geom ) ); oroFunction func; buildTraceKernelFromBitcode( ctxt, "../common/TutorialKernels.h", "SharedStackKernel", func, &opts ); u8* pixels; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&pixels, m_res.x * m_res.y * 4 ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &pixels ), m_res.x * m_res.y * 4 ) ); - int* stackBuffer; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&stackBuffer, m_res.x * m_res.y * stackSize * sizeof( int ) ) ); + hiprtGlobalStackBufferInput stackBufferInput{ hiprtStackTypeGlobal, StackSize, static_cast( m_res.x * m_res.y ) }; + hiprtGlobalStackBuffer stackBuffer; + CHECK_HIPRT( hiprtCreateGlobalStackBuffer( ctxt, stackBufferInput, &stackBuffer ) ); - void* args[] = { &geom, &pixels, &m_res, &stackBuffer, &stackSize }; - launchKernel( func, m_res.x, m_res.y, blockWidth, blockHeight, args ); - writeImage( "04_shared_stack.png", m_res.x, m_res.y, pixels ); + void* args[] = { &geom, &pixels, &m_res, &stackBuffer }; + launchKernel( func, m_res.x, m_res.y, BlockWidth, BlockHeight, args ); + writeImage( "04_global_stack.png", m_res.x, m_res.y, pixels ); - CHECK_ORO( oroFree( (oroDeviceptr)stackBuffer ) ); - CHECK_ORO( oroFree( (oroDeviceptr)mesh.triangleIndices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)mesh.vertices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)geomTemp ) ); - CHECK_ORO( oroFree( (oroDeviceptr)pixels ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh.triangleIndices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh.vertices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( geomTemp ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( pixels ) ) ); + CHECK_HIPRT( hiprtDestroyGlobalStackBuffer( ctxt, stackBuffer ) ); CHECK_HIPRT( hiprtDestroyGeometry( ctxt, geom ) ); CHECK_HIPRT( hiprtDestroyContext( ctxt ) ); } @@ -106,5 +112,3 @@ int main( int argc, char** argv ) return 0; } - - diff --git a/tutorials/04_shared_stack/premake5.lua b/tutorials/04_global_stack/premake5.lua similarity index 91% rename from tutorials/04_shared_stack/premake5.lua rename to tutorials/04_global_stack/premake5.lua index a106f36..a9e90f2 100644 --- a/tutorials/04_shared_stack/premake5.lua +++ b/tutorials/04_global_stack/premake5.lua @@ -1,4 +1,4 @@ -project "04_shared_stack" +project "04_global_stack" cppdialect "C++17" kind "ConsoleApp" location "../build" diff --git a/tutorials/04_shared_stack/TestKernel.h b/tutorials/04_shared_stack/TestKernel.h deleted file mode 100644 index 1708731..0000000 --- a/tutorials/04_shared_stack/TestKernel.h +++ /dev/null @@ -1,71 +0,0 @@ -// -// Copyright (c) 2021-2022 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#include - -__global__ void CornellBoxKernel( - hiprtGeometry geom, - unsigned char* gDst, - int2 cRes, - int* globalStackBuffer, - int stackSize ) -{ - const int gIdx = blockIdx.x * blockDim.x + threadIdx.x; - const int gIdy = blockIdx.y * blockDim.y + threadIdx.y; - - hiprtRay ray; - float3 o = { 278.0f, 273.0f, -900.0f }; - float2 d = { 2.0f * gIdx / (float)cRes.x - 1.0f, 2.0f * ( 1.0f - gIdy / (float)cRes.y ) - 1.0f }; - float3 uvw = { -387.817566f, -387.817566f, 1230.0f }; - ray.origin = o; - ray.direction = { uvw.x * d.x, uvw.y * d.y, uvw.z }; - ray.direction = - ray.direction / - sqrtf( ray.direction.x * ray.direction.x + ray.direction.y * ray.direction.y + ray.direction.z * ray.direction.z ); - ray.maxT = 100000.0f; - - __shared__ int sharedStackBuffer[SHARED_STACK_SIZE * BLOCK_SIZE]; - - int* threadSharedStackBuffer = sharedStackBuffer + SHARED_STACK_SIZE * ( threadIdx.x + threadIdx.y * blockDim.x ); - int* threadGlobalStackBuffer = globalStackBuffer + stackSize * ( gIdx + gIdy * cRes.x ); - hiprtGlobalStack stack( threadGlobalStackBuffer, stackSize, threadSharedStackBuffer, SHARED_STACK_SIZE ); - - hiprtGeomTraversalClosestCustomStack tr( geom, ray, stack ); - { - hiprtHit hit = tr.getNextHit(); - - int3 color = { 0, 0, 0 }; - if ( hit.hasHit() ) - { - float3 n = hiprt::normalize( hit.normal ); - color.x = ( ( n.x + 1.0f ) * 0.5f ) * 255; - color.y = ( ( n.y + 1.0f ) * 0.5f ) * 255; - color.z = ( ( n.z + 1.0f ) * 0.5f ) * 255; - } - - int dstIdx = gIdx + gIdy * cRes.x; - gDst[dstIdx * 4 + 0] = min( 255, color.x ); - gDst[dstIdx * 4 + 1] = min( 255, color.y ); - gDst[dstIdx * 4 + 2] = min( 255, color.z ); - gDst[dstIdx * 4 + 3] = 255; - } -} \ No newline at end of file diff --git a/tutorials/05_custom_bvh_import/TestKernel.h b/tutorials/05_custom_bvh_import/TestKernel.h deleted file mode 100644 index 064c73e..0000000 --- a/tutorials/05_custom_bvh_import/TestKernel.h +++ /dev/null @@ -1,60 +0,0 @@ -// -// Copyright (c) 2021-2022 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#include - -__global__ void CornellBoxKernel( hiprtGeometry geom, unsigned char* gDst, int2 cRes) -{ - const int gIdx = blockIdx.x * blockDim.x + threadIdx.x; - const int gIdy = blockIdx.y * blockDim.y + threadIdx.y; - - hiprtRay ray; - float3 o = { 278.0f, 273.0f, -900.0f }; - float2 d = { 2.0f * gIdx / (float)cRes.x - 1.0f, 2.0f * ( 1.0f - gIdy / (float)cRes.y ) - 1.0f }; - float3 uvw = { -387.817566f, -387.817566f, 1230.0f }; - ray.origin = o; - ray.direction = { uvw.x * d.x, uvw.y * d.y, uvw.z }; - ray.direction = - ray.direction / - sqrtf( ray.direction.x * ray.direction.x + ray.direction.y * ray.direction.y + ray.direction.z * ray.direction.z ); - ray.maxT = 100000.0f; - - hiprtGeomTraversalClosest tr( geom, ray); - { - hiprtHit hit = tr.getNextHit(); - - int3 color = { 0, 0, 0 }; - if ( hit.hasHit() ) - { - float3 n = hiprt::normalize( hit.normal ); - color.x = ( ( n.x + 1.0f ) * 0.5f ) * 255; - color.y = ( ( n.y + 1.0f ) * 0.5f ) * 255; - color.z = ( ( n.z + 1.0f ) * 0.5f ) * 255; - } - - int dstIdx = gIdx + gIdy * cRes.x; - gDst[dstIdx * 4 + 0] = min( 255, color.x ); - gDst[dstIdx * 4 + 1] = min( 255, color.y ); - gDst[dstIdx * 4 + 2] = min( 255, color.z ); - gDst[dstIdx * 4 + 3] = 255; - } -} \ No newline at end of file diff --git a/tutorials/05_custom_bvh_import/main.cpp b/tutorials/05_custom_bvh_import/main.cpp deleted file mode 100644 index b3b4969..0000000 --- a/tutorials/05_custom_bvh_import/main.cpp +++ /dev/null @@ -1,164 +0,0 @@ -// -// Copyright (c) 2021-2023 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#include -#include -#include -#include - -class Tutorial : public TutorialBase -{ - public: - void buildBvh( hiprtGeometryBuildInput& buildInput ); - void run() - { - hiprtContext ctxt; - CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, &ctxt ) ); - - hiprtTriangleMeshPrimitive mesh; - mesh.triangleCount = CornellBoxTriangleCount; - mesh.triangleStride = sizeof( hiprtInt3 ); - std::array triangleIndices; - std::iota( triangleIndices.begin(), triangleIndices.end(), 0 ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&mesh.triangleIndices, mesh.triangleCount * sizeof( hiprtInt3 ) ) ); - CHECK_ORO( oroMemcpyHtoD( - (oroDeviceptr)mesh.triangleIndices, triangleIndices.data(), mesh.triangleCount * sizeof( hiprtInt3 ) ) ); - - mesh.vertexCount = 3 * mesh.triangleCount; - mesh.vertexStride = sizeof( hiprtFloat3 ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&mesh.vertices, mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); - CHECK_ORO( oroMemcpyHtoD( - (oroDeviceptr)mesh.vertices, (hiprtFloat3*)cornellBoxVertices.data(), mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); - - hiprtGeometryBuildInput geomInput; - geomInput.type = hiprtPrimitiveTypeTriangleMesh; - geomInput.triangleMesh.primitive = &mesh; - - hiprtBvhNodeList nodes; - geomInput.nodes = &nodes; - buildBvh( geomInput ); - - hiprtDevicePtr geomTemp = nullptr; - hiprtBuildOptions options; - options.buildFlags = hiprtBuildFlagBitCustomBvhImport; - - hiprtGeometry geom; - CHECK_HIPRT( hiprtCreateGeometry( ctxt, &geomInput, &options, &geom ) ); - CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, &geomInput, &options, geomTemp, 0, geom ) ); - - oroFunction func; - buildTraceKernelFromBitcode( ctxt, "../common/TutorialKernels.h", "CustomBvhImportKernel", func ); - - u8* pixels; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&pixels, m_res.x * m_res.y * 4 ) ); - - int* matIndices; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&matIndices, mesh.triangleCount * sizeof( int ) ) ); - CHECK_ORO( oroMemcpyHtoD( (oroDeviceptr)matIndices, cornellBoxMatIndices.data(), mesh.triangleCount * sizeof( int ) ) ); - - hiprtFloat3* diffusColors; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&diffusColors, CornellBoxMaterialCount * sizeof( hiprtFloat3 ) ) ); - CHECK_ORO( oroMemcpyHtoD( - (oroDeviceptr)diffusColors, - (hiprtFloat3*)cornellBoxDiffuseColors.data(), - CornellBoxMaterialCount * sizeof( hiprtFloat3 ) ) ); - - void* args[] = { &geom, &pixels, &m_res, &matIndices, &diffusColors }; - launchKernel( func, m_res.x, m_res.y, args ); - writeImage( "05_custom_bvh_import.png", m_res.x, m_res.y, pixels ); - - CHECK_ORO( oroFree( (oroDeviceptr)matIndices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)diffusColors ) ); - CHECK_ORO( oroFree( (oroDeviceptr)mesh.triangleIndices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)mesh.vertices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)pixels ) ); - - CHECK_HIPRT( hiprtDestroyGeometry( ctxt, geom ) ); - CHECK_HIPRT( hiprtDestroyContext( ctxt ) ); - } -}; - -void Tutorial::buildBvh( hiprtGeometryBuildInput& buildInput ) -{ - std::vector nodes; - if ( buildInput.type == hiprtPrimitiveTypeTriangleMesh ) - { - std::vector primBoxes( buildInput.triangleMesh.primitive->triangleCount ); - std::vector verticesRaw( - buildInput.triangleMesh.primitive->vertexCount * buildInput.triangleMesh.primitive->vertexStride ); - std::vector trianglesRaw( - buildInput.triangleMesh.primitive->triangleCount * buildInput.triangleMesh.primitive->triangleStride ); - CHECK_ORO( oroMemcpyDtoH( - verticesRaw.data(), - (oroDeviceptr)buildInput.triangleMesh.primitive->vertices, - buildInput.triangleMesh.primitive->vertexCount * buildInput.triangleMesh.primitive->vertexStride ) ); - CHECK_ORO( oroMemcpyDtoH( - trianglesRaw.data(), - (oroDeviceptr)buildInput.triangleMesh.primitive->triangleIndices, - buildInput.triangleMesh.primitive->triangleCount * buildInput.triangleMesh.primitive->triangleStride ) ); - for ( int i = 0; i < buildInput.triangleMesh.primitive->triangleCount; ++i ) - { - hiprtInt3 triangle = *(hiprtInt3*)( trianglesRaw.data() + i * buildInput.triangleMesh.primitive->triangleStride ); - hiprtFloat3 v0 = *( ( - const hiprtFloat3*)( (u8*)verticesRaw.data() + triangle.x * buildInput.triangleMesh.primitive->vertexStride ) ); - hiprtFloat3 v1 = *( ( - const hiprtFloat3*)( (u8*)verticesRaw.data() + triangle.y * buildInput.triangleMesh.primitive->vertexStride ) ); - hiprtFloat3 v2 = - *( (const hiprtFloat3*)( (u8*)verticesRaw.data() + triangle.z * buildInput.triangleMesh.primitive->vertexStride ) ); - primBoxes[i].reset(); - primBoxes[i].grow( v0 ); - primBoxes[i].grow( v1 ); - primBoxes[i].grow( v2 ); - } - BvhBuilder::build( buildInput.triangleMesh.primitive->triangleCount, primBoxes, nodes ); - } - else if ( buildInput.type == hiprtPrimitiveTypeAABBList ) - { - std::vector primBoxes( buildInput.aabbList.primitive->aabbCount ); - std::vector primBoxesRaw( buildInput.aabbList.primitive->aabbCount * buildInput.aabbList.primitive->aabbStride ); - CHECK_ORO( oroMemcpyDtoH( - primBoxesRaw.data(), - (oroDeviceptr)buildInput.aabbList.primitive->aabbs, - buildInput.aabbList.primitive->aabbCount * buildInput.aabbList.primitive->aabbStride ) ); - for ( int i = 0; i < buildInput.aabbList.primitive->aabbCount; ++i ) - { - hiprtFloat4* ptr = (hiprtFloat4*)( primBoxesRaw.data() + i * buildInput.aabbList.primitive->aabbStride ); - primBoxes[i].m_min = *(hiprtFloat3*)( ptr + 0 ); - primBoxes[i].m_max = *(hiprtFloat3*)( ptr + 1 ); - } - BvhBuilder::build( buildInput.aabbList.primitive->aabbCount, primBoxes, nodes ); - } - CHECK_ORO( oroMalloc( (oroDeviceptr*)&buildInput.nodes->nodes, nodes.size() * sizeof( hiprtBvhNode ) ) ); - CHECK_ORO( oroMemcpyHtoD( (oroDeviceptr)buildInput.nodes->nodes, nodes.data(), nodes.size() * sizeof( hiprtBvhNode ) ) ); - buildInput.nodes->nodeCount = nodes.size(); -} - -int main( int argc, char** argv ) -{ - Tutorial tutorial; - tutorial.init( 0 ); - tutorial.run(); - - return 0; -} - - diff --git a/tutorials/05_dynamic_stack/main.cpp b/tutorials/05_dynamic_stack/main.cpp new file mode 100644 index 0000000..5f8570f --- /dev/null +++ b/tutorials/05_dynamic_stack/main.cpp @@ -0,0 +1,115 @@ +// +// Copyright (c) 2021-2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#include +#include +#include + +class Tutorial : public TutorialBase +{ + public: + void run() + { + hiprtContext ctxt; + CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, ctxt ) ); + + constexpr u32 StackSize = 64u; + constexpr u32 SharedStackSize = 16u; + constexpr u32 BlockWidth = 8u; + constexpr u32 BlockHeight = 8u; + constexpr u32 BlockSize = BlockWidth * BlockHeight; + constexpr u32 ThreadCount = 100000u; + std::string BlockSizeDef = "-D BLOCK_SIZE=" + std::to_string( BlockSize ); + std::string SharedStackSizeDef = "-D SHARED_STACK_SIZE=" + std::to_string( SharedStackSize ); + + std::vector opts; + opts.push_back( BlockSizeDef.c_str() ); + opts.push_back( SharedStackSizeDef.c_str() ); + + hiprtTriangleMeshPrimitive mesh; + mesh.triangleCount = CornellBoxTriangleCount; + mesh.triangleStride = sizeof( hiprtInt3 ); + std::array triangleIndices; + std::iota( triangleIndices.begin(), triangleIndices.end(), 0 ); + CHECK_ORO( + oroMalloc( reinterpret_cast( &mesh.triangleIndices ), mesh.triangleCount * sizeof( hiprtInt3 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( mesh.triangleIndices ), + triangleIndices.data(), + mesh.triangleCount * sizeof( hiprtInt3 ) ) ); + + mesh.vertexCount = 3 * mesh.triangleCount; + mesh.vertexStride = sizeof( hiprtFloat3 ); + CHECK_ORO( oroMalloc( reinterpret_cast( &mesh.vertices ), mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( mesh.vertices ), + const_cast( cornellBoxVertices.data() ), + mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); + + hiprtGeometryBuildInput geomInput; + geomInput.type = hiprtPrimitiveTypeTriangleMesh; + geomInput.triangleMesh.primitive = mesh; + + size_t geomTempSize; + hiprtDevicePtr geomTemp; + hiprtBuildOptions options; + options.buildFlags = hiprtBuildFlagBitPreferFastBuild; + CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, geomInput, options, geomTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &geomTemp ), geomTempSize ) ); + + hiprtGeometry geom; + CHECK_HIPRT( hiprtCreateGeometry( ctxt, geomInput, options, geom ) ); + CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, geomInput, options, geomTemp, 0, geom ) ); + + oroFunction func; + buildTraceKernelFromBitcode( ctxt, "../common/TutorialKernels.h", "SharedStackKernel", func, &opts ); + + u8* pixels; + CHECK_ORO( oroMalloc( reinterpret_cast( &pixels ), m_res.x * m_res.y * 4 ) ); + + hiprtGlobalStackBufferInput stackBufferInput{ hiprtStackTypeDynamic, StackSize, ThreadCount }; + hiprtGlobalStackBuffer stackBuffer; + CHECK_HIPRT( hiprtCreateGlobalStackBuffer( ctxt, stackBufferInput, &stackBuffer ) ); + + void* args[] = { &geom, &pixels, &m_res, &stackBuffer }; + launchKernel( func, m_res.x, m_res.y, BlockWidth, BlockHeight, args ); + writeImage( "05_dynamic_stack.png", m_res.x, m_res.y, pixels ); + + CHECK_ORO( oroFree( reinterpret_cast( mesh.triangleIndices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh.vertices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( geomTemp ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( pixels ) ) ); + + CHECK_HIPRT( hiprtDestroyGlobalStackBuffer( ctxt, stackBuffer ) ); + CHECK_HIPRT( hiprtDestroyGeometry( ctxt, geom ) ); + CHECK_HIPRT( hiprtDestroyContext( ctxt ) ); + } +}; + +int main( int argc, char** argv ) +{ + Tutorial tutorial; + tutorial.init( 0 ); + tutorial.run(); + + return 0; +} diff --git a/tutorials/07_motion_blur_srt/premake5.lua b/tutorials/05_dynamic_stack/premake5.lua similarity index 90% rename from tutorials/07_motion_blur_srt/premake5.lua rename to tutorials/05_dynamic_stack/premake5.lua index b1bce2a..a97358b 100644 --- a/tutorials/07_motion_blur_srt/premake5.lua +++ b/tutorials/05_dynamic_stack/premake5.lua @@ -1,4 +1,4 @@ -project "07_motion_blur_srt" +project "05_dynamic_stack" cppdialect "C++17" kind "ConsoleApp" location "../build" diff --git a/tutorials/06_custom_bvh_import/main.cpp b/tutorials/06_custom_bvh_import/main.cpp new file mode 100644 index 0000000..65a4d65 --- /dev/null +++ b/tutorials/06_custom_bvh_import/main.cpp @@ -0,0 +1,173 @@ +// +// Copyright (c) 2021-2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#include +#include +#include +#include + +class Tutorial : public TutorialBase +{ + public: + void buildBvh( hiprtGeometryBuildInput& buildInput ); + void run() + { + hiprtContext ctxt; + CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, ctxt ) ); + + hiprtTriangleMeshPrimitive mesh; + mesh.triangleCount = CornellBoxTriangleCount; + mesh.triangleStride = sizeof( hiprtInt3 ); + std::array triangleIndices; + std::iota( triangleIndices.begin(), triangleIndices.end(), 0 ); + CHECK_ORO( + oroMalloc( reinterpret_cast( &mesh.triangleIndices ), mesh.triangleCount * sizeof( hiprtInt3 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( mesh.triangleIndices ), + triangleIndices.data(), + mesh.triangleCount * sizeof( hiprtInt3 ) ) ); + + mesh.vertexCount = 3 * mesh.triangleCount; + mesh.vertexStride = sizeof( hiprtFloat3 ); + CHECK_ORO( oroMalloc( reinterpret_cast( &mesh.vertices ), mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( mesh.vertices ), + const_cast( cornellBoxVertices.data() ), + mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); + + hiprtGeometryBuildInput geomInput; + geomInput.type = hiprtPrimitiveTypeTriangleMesh; + geomInput.triangleMesh.primitive = mesh; + + hiprtBvhNodeList nodes; + geomInput.nodes = &nodes; + buildBvh( geomInput ); + + hiprtDevicePtr geomTemp = nullptr; + hiprtBuildOptions options; + options.buildFlags = hiprtBuildFlagBitCustomBvhImport; + + hiprtGeometry geom; + CHECK_HIPRT( hiprtCreateGeometry( ctxt, geomInput, options, geom ) ); + CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, geomInput, options, geomTemp, 0, geom ) ); + + oroFunction func; + buildTraceKernelFromBitcode( ctxt, "../common/TutorialKernels.h", "CustomBvhImportKernel", func ); + + u8* pixels; + CHECK_ORO( oroMalloc( reinterpret_cast( &pixels ), m_res.x * m_res.y * 4 ) ); + + int* matIndices; + CHECK_ORO( oroMalloc( reinterpret_cast( &matIndices ), mesh.triangleCount * sizeof( int ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( matIndices ), cornellBoxMatIndices.data(), mesh.triangleCount * sizeof( int ) ) ); + + hiprtFloat3* diffusColors; + CHECK_ORO( + oroMalloc( reinterpret_cast( &diffusColors ), CornellBoxMaterialCount * sizeof( hiprtFloat3 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( diffusColors ), + const_cast( cornellBoxDiffuseColors.data() ), + CornellBoxMaterialCount * sizeof( hiprtFloat3 ) ) ); + + void* args[] = { &geom, &pixels, &m_res, &matIndices, &diffusColors }; + launchKernel( func, m_res.x, m_res.y, args ); + writeImage( "06_custom_bvh_import.png", m_res.x, m_res.y, pixels ); + + CHECK_ORO( oroFree( reinterpret_cast( matIndices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( diffusColors ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh.triangleIndices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh.vertices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( pixels ) ) ); + + CHECK_HIPRT( hiprtDestroyGeometry( ctxt, geom ) ); + CHECK_HIPRT( hiprtDestroyContext( ctxt ) ); + } +}; + +void Tutorial::buildBvh( hiprtGeometryBuildInput& buildInput ) +{ + std::vector nodes; + if ( buildInput.type == hiprtPrimitiveTypeTriangleMesh ) + { + std::vector primBoxes( buildInput.triangleMesh.primitive.triangleCount ); + std::vector verticesRaw( + buildInput.triangleMesh.primitive.vertexCount * buildInput.triangleMesh.primitive.vertexStride ); + std::vector trianglesRaw( + buildInput.triangleMesh.primitive.triangleCount * buildInput.triangleMesh.primitive.triangleStride ); + CHECK_ORO( oroMemcpyDtoH( + verticesRaw.data(), + reinterpret_cast( buildInput.triangleMesh.primitive.vertices ), + buildInput.triangleMesh.primitive.vertexCount * buildInput.triangleMesh.primitive.vertexStride ) ); + CHECK_ORO( oroMemcpyDtoH( + trianglesRaw.data(), + reinterpret_cast( buildInput.triangleMesh.primitive.triangleIndices ), + buildInput.triangleMesh.primitive.triangleCount * buildInput.triangleMesh.primitive.triangleStride ) ); + for ( int i = 0; i < buildInput.triangleMesh.primitive.triangleCount; ++i ) + { + hiprtInt3 triangle = + *reinterpret_cast( trianglesRaw.data() + i * buildInput.triangleMesh.primitive.triangleStride ); + hiprtFloat3 v0 = *reinterpret_cast( + verticesRaw.data() + triangle.x * buildInput.triangleMesh.primitive.vertexStride ); + hiprtFloat3 v1 = *reinterpret_cast( + verticesRaw.data() + triangle.y * buildInput.triangleMesh.primitive.vertexStride ); + hiprtFloat3 v2 = *reinterpret_cast( + verticesRaw.data() + triangle.z * buildInput.triangleMesh.primitive.vertexStride ); + primBoxes[i].reset(); + primBoxes[i].grow( v0 ); + primBoxes[i].grow( v1 ); + primBoxes[i].grow( v2 ); + } + BvhBuilder::build( buildInput.triangleMesh.primitive.triangleCount, primBoxes, nodes ); + } + else if ( buildInput.type == hiprtPrimitiveTypeAABBList ) + { + std::vector primBoxes( buildInput.aabbList.primitive.aabbCount ); + std::vector primBoxesRaw( buildInput.aabbList.primitive.aabbCount * buildInput.aabbList.primitive.aabbStride ); + CHECK_ORO( oroMemcpyDtoH( + primBoxesRaw.data(), + reinterpret_cast( buildInput.aabbList.primitive.aabbs ), + buildInput.aabbList.primitive.aabbCount * buildInput.aabbList.primitive.aabbStride ) ); + for ( int i = 0; i < buildInput.aabbList.primitive.aabbCount; ++i ) + { + hiprtFloat4* ptr = + reinterpret_cast( primBoxesRaw.data() + i * buildInput.aabbList.primitive.aabbStride ); + primBoxes[i].m_min = make_hiprtFloat3( ptr[0] ); + primBoxes[i].m_max = make_hiprtFloat3( ptr[1] ); + } + BvhBuilder::build( buildInput.aabbList.primitive.aabbCount, primBoxes, nodes ); + } + CHECK_ORO( + oroMalloc( reinterpret_cast( &buildInput.nodes->nodes ), nodes.size() * sizeof( hiprtBvhNode ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( buildInput.nodes->nodes ), nodes.data(), nodes.size() * sizeof( hiprtBvhNode ) ) ); + buildInput.nodes->nodeCount = static_cast( nodes.size() ); +} + +int main( int argc, char** argv ) +{ + Tutorial tutorial; + tutorial.init( 0 ); + tutorial.run(); + + return 0; +} diff --git a/tutorials/05_custom_bvh_import/premake5.lua b/tutorials/06_custom_bvh_import/premake5.lua similarity index 89% rename from tutorials/05_custom_bvh_import/premake5.lua rename to tutorials/06_custom_bvh_import/premake5.lua index f34eed7..540b6e6 100644 --- a/tutorials/05_custom_bvh_import/premake5.lua +++ b/tutorials/06_custom_bvh_import/premake5.lua @@ -1,4 +1,4 @@ -project "05_custom_bvh_import" +project "06_custom_bvh_import" cppdialect "C++17" kind "ConsoleApp" location "../build" diff --git a/tutorials/06_ambient_occlusion/main.cpp b/tutorials/07_ambient_occlusion/main.cpp similarity index 64% rename from tutorials/06_ambient_occlusion/main.cpp rename to tutorials/07_ambient_occlusion/main.cpp index 5c0089e..cb8fd15 100644 --- a/tutorials/06_ambient_occlusion/main.cpp +++ b/tutorials/07_ambient_occlusion/main.cpp @@ -20,63 +20,68 @@ // THE SOFTWARE. // -#include -#include #include +#include +#include class Tutorial : public TutorialBase { public: - void run() + void run() { hiprtContext ctxt; - CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, &ctxt ) ); + CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, ctxt ) ); hiprtTriangleMeshPrimitive mesh; mesh.triangleCount = CornellBoxTriangleCount; mesh.triangleStride = sizeof( hiprtInt3 ); std::array triangleIndices; std::iota( triangleIndices.begin(), triangleIndices.end(), 0 ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&mesh.triangleIndices, mesh.triangleCount * sizeof( hiprtInt3 ) ) ); + CHECK_ORO( + oroMalloc( reinterpret_cast( &mesh.triangleIndices ), mesh.triangleCount * sizeof( hiprtInt3 ) ) ); CHECK_ORO( oroMemcpyHtoD( - (oroDeviceptr)mesh.triangleIndices, triangleIndices.data(), mesh.triangleCount * sizeof( hiprtInt3 ) ) ); + reinterpret_cast( mesh.triangleIndices ), + triangleIndices.data(), + mesh.triangleCount * sizeof( hiprtInt3 ) ) ); mesh.vertexCount = 3 * mesh.triangleCount; mesh.vertexStride = sizeof( hiprtFloat3 ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&mesh.vertices, mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &mesh.vertices ), mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); CHECK_ORO( oroMemcpyHtoD( - (oroDeviceptr)mesh.vertices, (hiprtFloat3*)cornellBoxVertices.data(), mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); + reinterpret_cast( mesh.vertices ), + const_cast( cornellBoxVertices.data() ), + mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); hiprtGeometryBuildInput geomInput; geomInput.type = hiprtPrimitiveTypeTriangleMesh; - geomInput.triangleMesh.primitive = &mesh; + geomInput.triangleMesh.primitive = mesh; size_t geomTempSize; hiprtDevicePtr geomTemp; hiprtBuildOptions options; options.buildFlags = hiprtBuildFlagBitPreferFastBuild; - CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, &geomInput, &options, &geomTempSize ) ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&geomTemp, geomTempSize ) ); + CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, geomInput, options, geomTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &geomTemp ), geomTempSize ) ); hiprtGeometry geom; - CHECK_HIPRT( hiprtCreateGeometry( ctxt, &geomInput, &options, &geom ) ); - CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, &geomInput, &options, geomTemp, 0, geom ) ); + CHECK_HIPRT( hiprtCreateGeometry( ctxt, geomInput, options, geom ) ); + CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, geomInput, options, geomTemp, 0, geom ) ); oroFunction func; buildTraceKernelFromBitcode( ctxt, "../common/TutorialKernels.h", "AmbientOcclusionKernel", func ); u8* pixels; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&pixels, m_res.x * m_res.y * 4 ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &pixels ), m_res.x * m_res.y * 4 ) ); float aoRadius = 200.0f; - void* args[] = { &geom, &pixels, &m_res, &aoRadius }; + void* args[] = { &geom, &pixels, &m_res, &aoRadius }; launchKernel( func, m_res.x, m_res.y, args ); - writeImage( "06_ambient_occlusion.png", m_res.x, m_res.y, pixels ); + writeImage( "07_ambient_occlusion.png", m_res.x, m_res.y, pixels ); - CHECK_ORO( oroFree( (oroDeviceptr)mesh.triangleIndices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)mesh.vertices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)geomTemp ) ); - CHECK_ORO( oroFree( (oroDeviceptr)pixels ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh.triangleIndices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh.vertices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( geomTemp ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( pixels ) ) ); CHECK_HIPRT( hiprtDestroyGeometry( ctxt, geom ) ); CHECK_HIPRT( hiprtDestroyContext( ctxt ) ); @@ -91,5 +96,3 @@ int main( int argc, char** argv ) return 0; } - - diff --git a/tutorials/06_ambient_occlusion/premake5.lua b/tutorials/07_ambient_occlusion/premake5.lua similarity index 89% rename from tutorials/06_ambient_occlusion/premake5.lua rename to tutorials/07_ambient_occlusion/premake5.lua index 55f90c4..9d8e863 100644 --- a/tutorials/06_ambient_occlusion/premake5.lua +++ b/tutorials/07_ambient_occlusion/premake5.lua @@ -1,4 +1,4 @@ -project "06_ambient_occlusion" +project "07_ambient_occlusion" cppdialect "C++17" kind "ConsoleApp" location "../build" diff --git a/tutorials/07_motion_blur_srt/main.cpp b/tutorials/08_motion_blur_srt/main.cpp similarity index 61% rename from tutorials/07_motion_blur_srt/main.cpp rename to tutorials/08_motion_blur_srt/main.cpp index 89930c1..059684c 100644 --- a/tutorials/07_motion_blur_srt/main.cpp +++ b/tutorials/08_motion_blur_srt/main.cpp @@ -28,7 +28,7 @@ class Tutorial : public TutorialBase void run() { hiprtContext ctxt; - CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, &ctxt ) ); + CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, ctxt ) ); hiprtGeometry geom0; hiprtTriangleMeshPrimitive mesh0; @@ -36,9 +36,12 @@ class Tutorial : public TutorialBase mesh0.triangleCount = 1; mesh0.triangleStride = sizeof( hiprtInt3 ); int triangleIndices[] = { 0, 1, 2 }; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&mesh0.triangleIndices, mesh0.triangleCount * sizeof( hiprtInt3 ) ) ); + CHECK_ORO( oroMalloc( + reinterpret_cast( &mesh0.triangleIndices ), mesh0.triangleCount * sizeof( hiprtInt3 ) ) ); CHECK_ORO( oroMemcpyHtoD( - (oroDeviceptr)mesh0.triangleIndices, triangleIndices, mesh0.triangleCount * sizeof( hiprtInt3 ) ) ); + reinterpret_cast( mesh0.triangleIndices ), + triangleIndices, + mesh0.triangleCount * sizeof( hiprtInt3 ) ) ); mesh0.vertexCount = 3; mesh0.vertexStride = sizeof( hiprtFloat3 ); @@ -47,23 +50,25 @@ class Tutorial : public TutorialBase { s * sin( 0.0f ), s * cos( 0.0f ), 0.0f }, { s * sin( Pi * 2.0f / 3.0f ), s * cos( Pi * 2.0f / 3.0f ), 0.0f }, { s * sin( Pi * 4.0f / 3.0f ), s * cos( Pi * 4.0f / 3.0f ), 0.0f } }; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&mesh0.vertices, mesh0.vertexCount * sizeof( hiprtFloat3 ) ) ); - CHECK_ORO( oroMemcpyHtoD( (oroDeviceptr)mesh0.vertices, vertices, mesh0.vertexCount * sizeof( hiprtFloat3 ) ) ); + CHECK_ORO( + oroMalloc( reinterpret_cast( &mesh0.vertices ), mesh0.vertexCount * sizeof( hiprtFloat3 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( mesh0.vertices ), vertices, mesh0.vertexCount * sizeof( hiprtFloat3 ) ) ); hiprtGeometryBuildInput geomInput; geomInput.type = hiprtPrimitiveTypeTriangleMesh; - geomInput.triangleMesh.primitive = &mesh0; + geomInput.triangleMesh.primitive = mesh0; size_t geomTempSize; hiprtDevicePtr geomTemp; hiprtBuildOptions options; options.buildFlags = hiprtBuildFlagBitPreferFastBuild; - CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, &geomInput, &options, &geomTempSize ) ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&geomTemp, geomTempSize ) ); + CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, geomInput, options, geomTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &geomTemp ), geomTempSize ) ); - CHECK_HIPRT( hiprtCreateGeometry( ctxt, &geomInput, &options, &geom0 ) ); - CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, &geomInput, &options, geomTemp, 0, geom0 ) ); - CHECK_ORO( oroFree( (oroDeviceptr)geomTemp ) ); + CHECK_HIPRT( hiprtCreateGeometry( ctxt, geomInput, options, geom0 ) ); + CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, geomInput, options, geomTemp, 0, geom0 ) ); + CHECK_ORO( oroFree( reinterpret_cast( geomTemp ) ) ); } hiprtGeometry geom1; @@ -72,9 +77,12 @@ class Tutorial : public TutorialBase mesh1.triangleCount = 1; mesh1.triangleStride = sizeof( hiprtInt3 ); int triangleIndices[] = { 0, 1, 2 }; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&mesh1.triangleIndices, mesh1.triangleCount * sizeof( hiprtInt3 ) ) ); + CHECK_ORO( oroMalloc( + reinterpret_cast( &mesh1.triangleIndices ), mesh1.triangleCount * sizeof( hiprtInt3 ) ) ); CHECK_ORO( oroMemcpyHtoD( - (oroDeviceptr)mesh1.triangleIndices, triangleIndices, mesh1.triangleCount * sizeof( hiprtInt3 ) ) ); + reinterpret_cast( mesh1.triangleIndices ), + triangleIndices, + mesh1.triangleCount * sizeof( hiprtInt3 ) ) ); mesh1.vertexCount = 3; mesh1.vertexStride = sizeof( hiprtFloat3 ); @@ -83,23 +91,25 @@ class Tutorial : public TutorialBase { s * sin( 0.0f ), s * cos( 0.0f ), 0.0f }, { s * sin( Pi * 2.0f / 3.0f ), s * cos( Pi * 2.0f / 3.0f ), 0.0f }, { s * sin( Pi * 4.0f / 3.0f ), s * cos( Pi * 4.0f / 3.0f ), 0.0f } }; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&mesh1.vertices, mesh1.vertexCount * sizeof( hiprtFloat3 ) ) ); - CHECK_ORO( oroMemcpyHtoD( (oroDeviceptr)mesh1.vertices, vertices, mesh1.vertexCount * sizeof( hiprtFloat3 ) ) ); + CHECK_ORO( + oroMalloc( reinterpret_cast( &mesh1.vertices ), mesh1.vertexCount * sizeof( hiprtFloat3 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( mesh1.vertices ), vertices, mesh1.vertexCount * sizeof( hiprtFloat3 ) ) ); hiprtGeometryBuildInput geomInput; geomInput.type = hiprtPrimitiveTypeTriangleMesh; - geomInput.triangleMesh.primitive = &mesh1; + geomInput.triangleMesh.primitive = mesh1; size_t geomTempSize; hiprtDevicePtr geomTemp; hiprtBuildOptions options; options.buildFlags = hiprtBuildFlagBitPreferFastBuild; - CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, &geomInput, &options, &geomTempSize ) ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&geomTemp, geomTempSize ) ); + CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, geomInput, options, geomTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &geomTemp ), geomTempSize ) ); - CHECK_HIPRT( hiprtCreateGeometry( ctxt, &geomInput, &options, &geom1 ) ); - CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, &geomInput, &options, geomTemp, 0, geom1 ) ); - CHECK_ORO( oroFree( (oroDeviceptr)geomTemp ) ); + CHECK_HIPRT( hiprtCreateGeometry( ctxt, geomInput, options, geom1 ) ); + CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, geomInput, options, geomTemp, 0, geom1 ) ); + CHECK_ORO( oroFree( reinterpret_cast( geomTemp ) ) ); } hiprtScene scene; @@ -109,9 +119,12 @@ class Tutorial : public TutorialBase sceneInput.instanceMasks = nullptr; hiprtDevicePtr geoms[] = { geom0, geom1 }; CHECK_ORO( oroMalloc( - (oroDeviceptr*)&sceneInput.instanceGeometries, sceneInput.instanceCount * sizeof( hiprtDevicePtr ) ) ); + reinterpret_cast( &sceneInput.instanceGeometries ), + sceneInput.instanceCount * sizeof( hiprtDevicePtr ) ) ); CHECK_ORO( oroMemcpyHtoD( - (oroDeviceptr)sceneInput.instanceGeometries, geoms, sceneInput.instanceCount * sizeof( hiprtDevicePtr ) ) ); + reinterpret_cast( sceneInput.instanceGeometries ), + geoms, + sceneInput.instanceCount * sizeof( hiprtDevicePtr ) ) ); const float offset = 0.3f; hiprtFrameSRT frames[5]; @@ -138,10 +151,13 @@ class Tutorial : public TutorialBase sceneInput.frameCount = 5; sceneInput.frameType = hiprtFrameTypeSRT; - CHECK_ORO( - oroMalloc( (oroDeviceptr*)&sceneInput.instanceFrames, sceneInput.frameCount * sizeof( hiprtFrameSRT ) ) ); + CHECK_ORO( oroMalloc( + reinterpret_cast( &sceneInput.instanceFrames ), + sceneInput.frameCount * sizeof( hiprtFrameSRT ) ) ); CHECK_ORO( oroMemcpyHtoD( - (oroDeviceptr)sceneInput.instanceFrames, frames, sceneInput.frameCount * sizeof( hiprtFrameSRT ) ) ); + reinterpret_cast( sceneInput.instanceFrames ), + frames, + sceneInput.frameCount * sizeof( hiprtFrameSRT ) ) ); hiprtTransformHeader headers[2]; headers[0].frameIndex = 0; @@ -149,10 +165,10 @@ class Tutorial : public TutorialBase headers[1].frameIndex = 3; headers[1].frameCount = 2; CHECK_ORO( oroMalloc( - (oroDeviceptr*)&sceneInput.instanceTransformHeaders, + reinterpret_cast( &sceneInput.instanceTransformHeaders ), sceneInput.instanceCount * sizeof( hiprtTransformHeader ) ) ); CHECK_ORO( oroMemcpyHtoD( - (oroDeviceptr)sceneInput.instanceTransformHeaders, + reinterpret_cast( sceneInput.instanceTransformHeaders ), headers, sceneInput.instanceCount * sizeof( hiprtTransformHeader ) ) ); @@ -160,32 +176,32 @@ class Tutorial : public TutorialBase hiprtDevicePtr sceneTemp; hiprtBuildOptions options; options.buildFlags = hiprtBuildFlagBitPreferFastBuild; - CHECK_HIPRT( hiprtGetSceneBuildTemporaryBufferSize( ctxt, &sceneInput, &options, &sceneTempSize ) ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&sceneTemp, sceneTempSize ) ); + CHECK_HIPRT( hiprtGetSceneBuildTemporaryBufferSize( ctxt, sceneInput, options, sceneTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &sceneTemp ), sceneTempSize ) ); - CHECK_HIPRT( hiprtCreateScene( ctxt, &sceneInput, &options, &scene ) ); - CHECK_HIPRT( hiprtBuildScene( ctxt, hiprtBuildOperationBuild, &sceneInput, &options, sceneTemp, 0, scene ) ); - CHECK_ORO( oroFree( (oroDeviceptr)sceneTemp ) ); + CHECK_HIPRT( hiprtCreateScene( ctxt, sceneInput, options, scene ) ); + CHECK_HIPRT( hiprtBuildScene( ctxt, hiprtBuildOperationBuild, sceneInput, options, sceneTemp, 0, scene ) ); + CHECK_ORO( oroFree( reinterpret_cast( sceneTemp ) ) ); } oroFunction func; buildTraceKernelFromBitcode( ctxt, "../common/TutorialKernels.h", "MotionBlurKernel", func ); u8* pixels; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&pixels, m_res.x * m_res.y * 4 ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &pixels ), m_res.x * m_res.y * 4 ) ); void* args[] = { &scene, &pixels, &m_res }; launchKernel( func, m_res.x, m_res.y, args ); - writeImage( "07_08_motion_blur.png", m_res.x, m_res.y, pixels ); - - CHECK_ORO( oroFree( (oroDeviceptr)sceneInput.instanceGeometries ) ); - CHECK_ORO( oroFree( (oroDeviceptr)sceneInput.instanceFrames ) ); - CHECK_ORO( oroFree( (oroDeviceptr)sceneInput.instanceTransformHeaders ) ); - CHECK_ORO( oroFree( (oroDeviceptr)mesh0.vertices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)mesh0.triangleIndices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)mesh1.vertices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)mesh1.triangleIndices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)pixels ) ); + writeImage( "08_motion_blur_srt.png", m_res.x, m_res.y, pixels ); + + CHECK_ORO( oroFree( reinterpret_cast( sceneInput.instanceGeometries ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( sceneInput.instanceFrames ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( sceneInput.instanceTransformHeaders ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh0.vertices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh0.triangleIndices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh1.vertices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh1.triangleIndices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( pixels ) ) ); CHECK_HIPRT( hiprtDestroyGeometry( ctxt, geom0 ) ); CHECK_HIPRT( hiprtDestroyGeometry( ctxt, geom1 ) ); diff --git a/tutorials/08_motion_blur_srt/premake5.lua b/tutorials/08_motion_blur_srt/premake5.lua new file mode 100644 index 0000000..7976d1d --- /dev/null +++ b/tutorials/08_motion_blur_srt/premake5.lua @@ -0,0 +1,13 @@ +project "08_motion_blur_srt" + cppdialect "C++17" + kind "ConsoleApp" + location "../build" + + dofile "../common/dependency.lua" + + files { "../common/**.h", "../common/**.cpp"} + files { "./**.h", "./**.cpp"} + + includedirs{ "../../" } + + targetdir "../dist/bin/%{cfg.buildcfg}" \ No newline at end of file diff --git a/tutorials/08_motion_blur_matrix/main.cpp b/tutorials/09_motion_blur_matrix/main.cpp similarity index 63% rename from tutorials/08_motion_blur_matrix/main.cpp rename to tutorials/09_motion_blur_matrix/main.cpp index 98bdd42..2f0224f 100644 --- a/tutorials/08_motion_blur_matrix/main.cpp +++ b/tutorials/09_motion_blur_matrix/main.cpp @@ -28,7 +28,7 @@ class Tutorial : public TutorialBase void run() { hiprtContext ctxt; - CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, &ctxt ) ); + CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, ctxt ) ); hiprtGeometry geom0; hiprtTriangleMeshPrimitive mesh0; @@ -36,9 +36,12 @@ class Tutorial : public TutorialBase mesh0.triangleCount = 1; mesh0.triangleStride = sizeof( hiprtInt3 ); int triangleIndices[] = { 0, 1, 2 }; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&mesh0.triangleIndices, mesh0.triangleCount * sizeof( hiprtInt3 ) ) ); + CHECK_ORO( oroMalloc( + reinterpret_cast( &mesh0.triangleIndices ), mesh0.triangleCount * sizeof( hiprtInt3 ) ) ); CHECK_ORO( oroMemcpyHtoD( - (oroDeviceptr)mesh0.triangleIndices, triangleIndices, mesh0.triangleCount * sizeof( hiprtInt3 ) ) ); + reinterpret_cast( mesh0.triangleIndices ), + triangleIndices, + mesh0.triangleCount * sizeof( hiprtInt3 ) ) ); mesh0.vertexCount = 3; mesh0.vertexStride = sizeof( hiprtFloat3 ); @@ -47,23 +50,25 @@ class Tutorial : public TutorialBase { s * sin( 0.0f ), s * cos( 0.0f ), 0.0f }, { s * sin( Pi * 2.0f / 3.0f ), s * cos( Pi * 2.0f / 3.0f ), 0.0f }, { s * sin( Pi * 4.0f / 3.0f ), s * cos( Pi * 4.0f / 3.0f ), 0.0f } }; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&mesh0.vertices, mesh0.vertexCount * sizeof( hiprtFloat3 ) ) ); - CHECK_ORO( oroMemcpyHtoD( (oroDeviceptr)mesh0.vertices, vertices, mesh0.vertexCount * sizeof( hiprtFloat3 ) ) ); + CHECK_ORO( + oroMalloc( reinterpret_cast( &mesh0.vertices ), mesh0.vertexCount * sizeof( hiprtFloat3 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( mesh0.vertices ), vertices, mesh0.vertexCount * sizeof( hiprtFloat3 ) ) ); hiprtGeometryBuildInput geomInput; geomInput.type = hiprtPrimitiveTypeTriangleMesh; - geomInput.triangleMesh.primitive = &mesh0; + geomInput.triangleMesh.primitive = mesh0; size_t geomTempSize; hiprtDevicePtr geomTemp; hiprtBuildOptions options; options.buildFlags = hiprtBuildFlagBitPreferFastBuild; - CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, &geomInput, &options, &geomTempSize ) ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&geomTemp, geomTempSize ) ); + CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, geomInput, options, geomTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &geomTemp ), geomTempSize ) ); - CHECK_HIPRT( hiprtCreateGeometry( ctxt, &geomInput, &options, &geom0 ) ); - CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, &geomInput, &options, geomTemp, 0, geom0 ) ); - CHECK_ORO( oroFree( (oroDeviceptr)geomTemp ) ); + CHECK_HIPRT( hiprtCreateGeometry( ctxt, geomInput, options, geom0 ) ); + CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, geomInput, options, geomTemp, 0, geom0 ) ); + CHECK_ORO( oroFree( reinterpret_cast( geomTemp ) ) ); } hiprtGeometry geom1; @@ -72,9 +77,12 @@ class Tutorial : public TutorialBase mesh1.triangleCount = 1; mesh1.triangleStride = sizeof( hiprtInt3 ); int triangleIndices[] = { 0, 1, 2 }; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&mesh1.triangleIndices, mesh1.triangleCount * sizeof( hiprtInt3 ) ) ); + CHECK_ORO( oroMalloc( + reinterpret_cast( &mesh1.triangleIndices ), mesh1.triangleCount * sizeof( hiprtInt3 ) ) ); CHECK_ORO( oroMemcpyHtoD( - (oroDeviceptr)mesh1.triangleIndices, triangleIndices, mesh1.triangleCount * sizeof( hiprtInt3 ) ) ); + reinterpret_cast( mesh1.triangleIndices ), + triangleIndices, + mesh1.triangleCount * sizeof( hiprtInt3 ) ) ); mesh1.vertexCount = 3; mesh1.vertexStride = sizeof( hiprtFloat3 ); @@ -83,23 +91,25 @@ class Tutorial : public TutorialBase { s * sin( 0.0f ), s * cos( 0.0f ), 0.0f }, { s * sin( Pi * 2.0f / 3.0f ), s * cos( Pi * 2.0f / 3.0f ), 0.0f }, { s * sin( Pi * 4.0f / 3.0f ), s * cos( Pi * 4.0f / 3.0f ), 0.0f } }; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&mesh1.vertices, mesh1.vertexCount * sizeof( hiprtFloat3 ) ) ); - CHECK_ORO( oroMemcpyHtoD( (oroDeviceptr)mesh1.vertices, vertices, mesh1.vertexCount * sizeof( hiprtFloat3 ) ) ); + CHECK_ORO( + oroMalloc( reinterpret_cast( &mesh1.vertices ), mesh1.vertexCount * sizeof( hiprtFloat3 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( mesh1.vertices ), vertices, mesh1.vertexCount * sizeof( hiprtFloat3 ) ) ); hiprtGeometryBuildInput geomInput; geomInput.type = hiprtPrimitiveTypeTriangleMesh; - geomInput.triangleMesh.primitive = &mesh1; + geomInput.triangleMesh.primitive = mesh1; size_t geomTempSize; hiprtDevicePtr geomTemp; hiprtBuildOptions options; options.buildFlags = hiprtBuildFlagBitPreferFastBuild; - CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, &geomInput, &options, &geomTempSize ) ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&geomTemp, geomTempSize ) ); + CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, geomInput, options, geomTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &geomTemp ), geomTempSize ) ); - CHECK_HIPRT( hiprtCreateGeometry( ctxt, &geomInput, &options, &geom1 ) ); - CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, &geomInput, &options, geomTemp, 0, geom1 ) ); - CHECK_ORO( oroFree( (oroDeviceptr)geomTemp ) ); + CHECK_HIPRT( hiprtCreateGeometry( ctxt, geomInput, options, geom1 ) ); + CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, geomInput, options, geomTemp, 0, geom1 ) ); + CHECK_ORO( oroFree( reinterpret_cast( geomTemp ) ) ); } hiprtScene scene; @@ -109,9 +119,12 @@ class Tutorial : public TutorialBase sceneInput.instanceMasks = nullptr; hiprtDevicePtr geoms[] = { geom0, geom1 }; CHECK_ORO( oroMalloc( - (oroDeviceptr*)&sceneInput.instanceGeometries, sceneInput.instanceCount * sizeof( hiprtDevicePtr ) ) ); + reinterpret_cast( &sceneInput.instanceGeometries ), + sceneInput.instanceCount * sizeof( hiprtDevicePtr ) ) ); CHECK_ORO( oroMemcpyHtoD( - (oroDeviceptr)sceneInput.instanceGeometries, geoms, sceneInput.instanceCount * sizeof( hiprtDevicePtr ) ) ); + reinterpret_cast( sceneInput.instanceGeometries ), + geoms, + sceneInput.instanceCount * sizeof( hiprtDevicePtr ) ) ); const float offset = 0.3f; hiprtFrameMatrix matrices[5]; @@ -167,10 +180,13 @@ class Tutorial : public TutorialBase sceneInput.frameCount = 5; sceneInput.frameType = hiprtFrameTypeMatrix; - CHECK_ORO( - oroMalloc( (oroDeviceptr*)&sceneInput.instanceFrames, sceneInput.frameCount * sizeof( hiprtFrameMatrix ) ) ); + CHECK_ORO( oroMalloc( + reinterpret_cast( &sceneInput.instanceFrames ), + sceneInput.frameCount * sizeof( hiprtFrameMatrix ) ) ); CHECK_ORO( oroMemcpyHtoD( - (oroDeviceptr)sceneInput.instanceFrames, matrices, sceneInput.frameCount * sizeof( hiprtFrameMatrix ) ) ); + reinterpret_cast( sceneInput.instanceFrames ), + matrices, + sceneInput.frameCount * sizeof( hiprtFrameMatrix ) ) ); hiprtTransformHeader headers[2]; headers[0].frameIndex = 0; @@ -178,10 +194,10 @@ class Tutorial : public TutorialBase headers[1].frameIndex = 3; headers[1].frameCount = 2; CHECK_ORO( oroMalloc( - (oroDeviceptr*)&sceneInput.instanceTransformHeaders, + reinterpret_cast( &sceneInput.instanceTransformHeaders ), sceneInput.instanceCount * sizeof( hiprtTransformHeader ) ) ); CHECK_ORO( oroMemcpyHtoD( - (oroDeviceptr)sceneInput.instanceTransformHeaders, + reinterpret_cast( sceneInput.instanceTransformHeaders ), headers, sceneInput.instanceCount * sizeof( hiprtTransformHeader ) ) ); @@ -189,32 +205,32 @@ class Tutorial : public TutorialBase hiprtDevicePtr sceneTemp; hiprtBuildOptions options; options.buildFlags = hiprtBuildFlagBitPreferFastBuild; - CHECK_HIPRT( hiprtGetSceneBuildTemporaryBufferSize( ctxt, &sceneInput, &options, &sceneTempSize ) ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&sceneTemp, sceneTempSize ) ); + CHECK_HIPRT( hiprtGetSceneBuildTemporaryBufferSize( ctxt, sceneInput, options, sceneTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &sceneTemp ), sceneTempSize ) ); - CHECK_HIPRT( hiprtCreateScene( ctxt, &sceneInput, &options, &scene ) ); - CHECK_HIPRT( hiprtBuildScene( ctxt, hiprtBuildOperationBuild, &sceneInput, &options, sceneTemp, 0, scene ) ); - CHECK_ORO( oroFree( (oroDeviceptr)sceneTemp ) ); + CHECK_HIPRT( hiprtCreateScene( ctxt, sceneInput, options, scene ) ); + CHECK_HIPRT( hiprtBuildScene( ctxt, hiprtBuildOperationBuild, sceneInput, options, sceneTemp, 0, scene ) ); + CHECK_ORO( oroFree( reinterpret_cast( sceneTemp ) ) ); } oroFunction func; buildTraceKernelFromBitcode( ctxt, "../common/TutorialKernels.h", "MotionBlurKernel", func ); u8* pixels; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&pixels, m_res.x * m_res.y * 4 ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &pixels ), m_res.x * m_res.y * 4 ) ); void* args[] = { &scene, &pixels, &m_res }; launchKernel( func, m_res.x, m_res.y, args ); - writeImage( "07_08_motion_blur.png", m_res.x, m_res.y, pixels ); + writeImage( "09_motion_blur_matrix.png", m_res.x, m_res.y, pixels ); - CHECK_ORO( oroFree( (oroDeviceptr)sceneInput.instanceGeometries ) ); - CHECK_ORO( oroFree( (oroDeviceptr)sceneInput.instanceFrames ) ); - CHECK_ORO( oroFree( (oroDeviceptr)sceneInput.instanceTransformHeaders ) ); - CHECK_ORO( oroFree( (oroDeviceptr)mesh0.vertices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)mesh0.triangleIndices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)mesh1.vertices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)mesh1.triangleIndices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)pixels ) ); + CHECK_ORO( oroFree( reinterpret_cast( sceneInput.instanceGeometries ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( sceneInput.instanceFrames ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( sceneInput.instanceTransformHeaders ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh0.vertices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh0.triangleIndices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh1.vertices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh1.triangleIndices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( pixels ) ) ); CHECK_HIPRT( hiprtDestroyGeometry( ctxt, geom0 ) ); CHECK_HIPRT( hiprtDestroyGeometry( ctxt, geom1 ) ); @@ -231,5 +247,3 @@ int main( int argc, char** argv ) return 0; } - - diff --git a/tutorials/08_motion_blur_matrix/premake5.lua b/tutorials/09_motion_blur_matrix/premake5.lua similarity index 89% rename from tutorials/08_motion_blur_matrix/premake5.lua rename to tutorials/09_motion_blur_matrix/premake5.lua index 58ce37f..0dfd2a0 100644 --- a/tutorials/08_motion_blur_matrix/premake5.lua +++ b/tutorials/09_motion_blur_matrix/premake5.lua @@ -1,4 +1,4 @@ -project "08_motion_blur_matrix" +project "09_motion_blur_matrix" cppdialect "C++17" kind "ConsoleApp" location "../build" diff --git a/tutorials/09_multi_custom_intersection/premake5.lua b/tutorials/09_multi_custom_intersection/premake5.lua deleted file mode 100644 index 71c9ebd..0000000 --- a/tutorials/09_multi_custom_intersection/premake5.lua +++ /dev/null @@ -1,13 +0,0 @@ -project "09_multi_custom_intersection" - cppdialect "C++17" - kind "ConsoleApp" - location "../build" - - dofile "../common/dependency.lua" - - files { "../common/**.h", "../common/**.cpp"} - files { "./**.h", "./**.cpp"} - - includedirs{ "../../" } - - targetdir "../dist/bin/%{cfg.buildcfg}" \ No newline at end of file diff --git a/tutorials/09_multi_custom_intersection/main.cpp b/tutorials/10_multi_custom_intersection/main.cpp similarity index 53% rename from tutorials/09_multi_custom_intersection/main.cpp rename to tutorials/10_multi_custom_intersection/main.cpp index 8d43167..52ab26d 100644 --- a/tutorials/09_multi_custom_intersection/main.cpp +++ b/tutorials/10_multi_custom_intersection/main.cpp @@ -35,34 +35,34 @@ class Tutorial : public TutorialBase hiprtFloat4 circle = make_hiprtFloat4( 0.3f, 0.0f, 0.0f, 0.2f ); hiprtContext ctxt; - CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, &ctxt ) ); + CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, ctxt ) ); hiprtGeometry geomSpheres; hiprtAABBListPrimitive listSpheres; { listSpheres.aabbCount = 1; listSpheres.aabbStride = 2 * sizeof( hiprtFloat4 ); - hiprtFloat4 aabb[] = { - { sphere.x - sphere.w, sphere.y - sphere.w, sphere.z - sphere.w, 0.0f }, - { sphere.x + sphere.w, sphere.y + sphere.w, sphere.z + sphere.w, 0.0f } }; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&listSpheres.aabbs, 2 * sizeof( hiprtFloat4 ) ) ); - CHECK_ORO( oroMemcpyHtoD( (oroDeviceptr)listSpheres.aabbs, aabb, 2 * sizeof( hiprtFloat4 ) ) ); + hiprtFloat4 aabb[] = { + { sphere.x - sphere.w, sphere.y - sphere.w, sphere.z - sphere.w, 0.0f }, + { sphere.x + sphere.w, sphere.y + sphere.w, sphere.z + sphere.w, 0.0f } }; + CHECK_ORO( oroMalloc( reinterpret_cast( &listSpheres.aabbs ), 2 * sizeof( hiprtFloat4 ) ) ); + CHECK_ORO( oroMemcpyHtoD( reinterpret_cast( listSpheres.aabbs ), aabb, 2 * sizeof( hiprtFloat4 ) ) ); hiprtGeometryBuildInput geomInput; geomInput.type = hiprtPrimitiveTypeAABBList; - geomInput.aabbList.primitive = &listSpheres; + geomInput.aabbList.primitive = listSpheres; geomInput.geomType = SphereTypeIndex; size_t geomTempSize; hiprtDevicePtr geomTemp; hiprtBuildOptions options; options.buildFlags = hiprtBuildFlagBitPreferFastBuild; - CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, &geomInput, &options, &geomTempSize ) ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&geomTemp, geomTempSize ) ); + CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, geomInput, options, geomTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &geomTemp ), geomTempSize ) ); - CHECK_HIPRT( hiprtCreateGeometry( ctxt, &geomInput, &options, &geomSpheres ) ); - CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, &geomInput, &options, geomTemp, 0, geomSpheres ) ); - CHECK_ORO( oroFree( (oroDeviceptr)geomTemp ) ); + CHECK_HIPRT( hiprtCreateGeometry( ctxt, geomInput, options, geomSpheres ) ); + CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, geomInput, options, geomTemp, 0, geomSpheres ) ); + CHECK_ORO( oroFree( reinterpret_cast( geomTemp ) ) ); } hiprtGeometry geomCircles; @@ -70,27 +70,27 @@ class Tutorial : public TutorialBase { listCircles.aabbCount = 1; listCircles.aabbStride = 2 * sizeof( hiprtFloat4 ); - hiprtFloat4 aabb[] = { - { circle.x - circle.w, circle.y - circle.w, circle.z - circle.w, 0.0f }, - { circle.x + circle.w, circle.y + circle.w, circle.z + circle.w, 0.0f } }; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&listCircles.aabbs, 2 * sizeof( hiprtFloat4 ) ) ); - CHECK_ORO( oroMemcpyHtoD( (oroDeviceptr)listCircles.aabbs, aabb, 2 * sizeof( hiprtFloat4 ) ) ); + hiprtFloat4 aabb[] = { + { circle.x - circle.w, circle.y - circle.w, circle.z - circle.w, 0.0f }, + { circle.x + circle.w, circle.y + circle.w, circle.z + circle.w, 0.0f } }; + CHECK_ORO( oroMalloc( reinterpret_cast( &listCircles.aabbs ), 2 * sizeof( hiprtFloat4 ) ) ); + CHECK_ORO( oroMemcpyHtoD( reinterpret_cast( listCircles.aabbs ), aabb, 2 * sizeof( hiprtFloat4 ) ) ); hiprtGeometryBuildInput geomInput; geomInput.type = hiprtPrimitiveTypeAABBList; - geomInput.aabbList.primitive = &listCircles; + geomInput.aabbList.primitive = listCircles; geomInput.geomType = CircleTypeIndex; size_t geomTempSize; hiprtDevicePtr geomTemp; hiprtBuildOptions options; options.buildFlags = hiprtBuildFlagBitPreferFastBuild; - CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, &geomInput, &options, &geomTempSize ) ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&geomTemp, geomTempSize ) ); + CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, geomInput, options, geomTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &geomTemp ), geomTempSize ) ); - CHECK_HIPRT( hiprtCreateGeometry( ctxt, &geomInput, &options, &geomCircles ) ); - CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, &geomInput, &options, geomTemp, 0, geomCircles ) ); - CHECK_ORO( oroFree( (oroDeviceptr)geomTemp ) ); + CHECK_HIPRT( hiprtCreateGeometry( ctxt, geomInput, options, geomCircles ) ); + CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, geomInput, options, geomTemp, 0, geomCircles ) ); + CHECK_ORO( oroFree( reinterpret_cast( geomTemp ) ) ); } hiprtScene scene; @@ -102,33 +102,38 @@ class Tutorial : public TutorialBase sceneInput.frameCount = sceneInput.instanceCount; hiprtDevicePtr geoms[] = { geomSpheres, geomCircles }; CHECK_ORO( oroMalloc( - (oroDeviceptr*)&sceneInput.instanceGeometries, sceneInput.instanceCount * sizeof( hiprtDevicePtr ) ) ); + reinterpret_cast( &sceneInput.instanceGeometries ), + sceneInput.instanceCount * sizeof( hiprtDevicePtr ) ) ); CHECK_ORO( oroMemcpyHtoD( - (oroDeviceptr)sceneInput.instanceGeometries, geoms, sceneInput.instanceCount * sizeof( hiprtDevicePtr ) ) ); + reinterpret_cast( sceneInput.instanceGeometries ), + geoms, + sceneInput.instanceCount * sizeof( hiprtDevicePtr ) ) ); std::vector frames; hiprtFrameSRT frame; - frame.translation = make_hiprtFloat3( 0.0f, 0.0f, 0.0f ); - frame.scale = make_hiprtFloat3( 1.0f, 1.0f, 1.0f ); - frame.rotation = make_hiprtFloat4( 0.0f, 0.0f, 1.0f, 0.0f ); + frame.translation = make_hiprtFloat3( 0.0f, 0.0f, 0.0f ); + frame.scale = make_hiprtFloat3( 1.0f, 1.0f, 1.0f ); + frame.rotation = make_hiprtFloat4( 0.0f, 0.0f, 1.0f, 0.0f ); for ( int i = 0; i < sceneInput.instanceCount; i++ ) frames.push_back( frame ); CHECK_ORO( oroMalloc( - (oroDeviceptr*)&sceneInput.instanceFrames, frames.size() * sizeof( hiprtFrameSRT ) ) ); + reinterpret_cast( &sceneInput.instanceFrames ), frames.size() * sizeof( hiprtFrameSRT ) ) ); CHECK_ORO( oroMemcpyHtoD( - (oroDeviceptr)sceneInput.instanceFrames, frames.data(), frames.size() * sizeof( hiprtFrameSRT ) ) ); + reinterpret_cast( sceneInput.instanceFrames ), + frames.data(), + frames.size() * sizeof( hiprtFrameSRT ) ) ); size_t sceneTempSize; hiprtDevicePtr sceneTemp; hiprtBuildOptions options; options.buildFlags = hiprtBuildFlagBitPreferFastBuild; - CHECK_HIPRT( hiprtGetSceneBuildTemporaryBufferSize( ctxt, &sceneInput, &options, &sceneTempSize ) ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&sceneTemp, sceneTempSize ) ); + CHECK_HIPRT( hiprtGetSceneBuildTemporaryBufferSize( ctxt, sceneInput, options, sceneTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &sceneTemp ), sceneTempSize ) ); - CHECK_HIPRT( hiprtCreateScene( ctxt, &sceneInput, &options, &scene ) ); - CHECK_HIPRT( hiprtBuildScene( ctxt, hiprtBuildOperationBuild, &sceneInput, &options, sceneTemp, 0, scene ) ); - CHECK_ORO( oroFree( (oroDeviceptr)sceneTemp ) ); + CHECK_HIPRT( hiprtCreateScene( ctxt, sceneInput, options, scene ) ); + CHECK_HIPRT( hiprtBuildScene( ctxt, hiprtBuildOperationBuild, sceneInput, options, sceneTemp, 0, scene ) ); + CHECK_ORO( oroFree( reinterpret_cast( sceneTemp ) ) ); } std::vector funcNameSets( GeomTypesCount ); @@ -147,32 +152,38 @@ class Tutorial : public TutorialBase 1 ); std::vector funcDataSets( GeomTypesCount ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&funcDataSets[SphereTypeIndex].intersectFuncData, sizeof( hiprtFloat4 ) ) ); - CHECK_ORO( - oroMemcpyHtoD( (oroDeviceptr)funcDataSets[SphereTypeIndex].intersectFuncData, &sphere, sizeof( hiprtFloat4 ) ) ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&funcDataSets[CircleTypeIndex].intersectFuncData, sizeof( hiprtFloat4 ) ) ); - CHECK_ORO( - oroMemcpyHtoD( (oroDeviceptr)funcDataSets[CircleTypeIndex].intersectFuncData, &circle, sizeof( hiprtFloat4 ) ) ); + CHECK_ORO( oroMalloc( + reinterpret_cast( &funcDataSets[SphereTypeIndex].intersectFuncData ), sizeof( hiprtFloat4 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( funcDataSets[SphereTypeIndex].intersectFuncData ), + &sphere, + sizeof( hiprtFloat4 ) ) ); + CHECK_ORO( oroMalloc( + reinterpret_cast( &funcDataSets[CircleTypeIndex].intersectFuncData ), sizeof( hiprtFloat4 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( funcDataSets[CircleTypeIndex].intersectFuncData ), + &circle, + sizeof( hiprtFloat4 ) ) ); hiprtFuncTable funcTable; - CHECK_HIPRT( hiprtCreateFuncTable( ctxt, GeomTypesCount, 1, &funcTable ) ); + CHECK_HIPRT( hiprtCreateFuncTable( ctxt, GeomTypesCount, 1, funcTable ) ); CHECK_HIPRT( hiprtSetFuncTable( ctxt, funcTable, SphereTypeIndex, 0, funcDataSets[SphereTypeIndex] ) ); CHECK_HIPRT( hiprtSetFuncTable( ctxt, funcTable, CircleTypeIndex, 0, funcDataSets[CircleTypeIndex] ) ); u8* pixels; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&pixels, m_res.x * m_res.y * 4 ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &pixels ), m_res.x * m_res.y * 4 ) ); void* args[] = { &scene, &pixels, &funcTable, &m_res }; launchKernel( func, m_res.x, m_res.y, args ); - writeImage( "09_multi_custom_intersection.png", m_res.x, m_res.y, pixels ); - - CHECK_ORO( oroFree( (oroDeviceptr)listSpheres.aabbs ) ); - CHECK_ORO( oroFree( (oroDeviceptr)listCircles.aabbs ) ); - CHECK_ORO( oroFree( (oroDeviceptr)sceneInput.instanceFrames ) ); - CHECK_ORO( oroFree( (oroDeviceptr)sceneInput.instanceGeometries ) ); - CHECK_ORO( oroFree( (oroDeviceptr)funcDataSets[SphereTypeIndex].intersectFuncData ) ); - CHECK_ORO( oroFree( (oroDeviceptr)funcDataSets[CircleTypeIndex].intersectFuncData ) ); - CHECK_ORO( oroFree( (oroDeviceptr)pixels ) ); + writeImage( "10_multi_custom_intersection.png", m_res.x, m_res.y, pixels ); + + CHECK_ORO( oroFree( reinterpret_cast( listSpheres.aabbs ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( listCircles.aabbs ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( sceneInput.instanceFrames ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( sceneInput.instanceGeometries ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( funcDataSets[SphereTypeIndex].intersectFuncData ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( funcDataSets[CircleTypeIndex].intersectFuncData ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( pixels ) ) ); CHECK_HIPRT( hiprtDestroyGeometry( ctxt, geomSpheres ) ); CHECK_HIPRT( hiprtDestroyGeometry( ctxt, geomCircles ) ); diff --git a/tutorials/10_multi_custom_intersection/premake5.lua b/tutorials/10_multi_custom_intersection/premake5.lua new file mode 100644 index 0000000..de9ae6c --- /dev/null +++ b/tutorials/10_multi_custom_intersection/premake5.lua @@ -0,0 +1,13 @@ +project "10_multi_custom_intersection" + cppdialect "C++17" + kind "ConsoleApp" + location "../build" + + dofile "../common/dependency.lua" + + files { "../common/**.h", "../common/**.cpp"} + files { "./**.h", "./**.cpp"} + + includedirs{ "../../" } + + targetdir "../dist/bin/%{cfg.buildcfg}" \ No newline at end of file diff --git a/tutorials/11_concurrent_scene_build/premake5.lua b/tutorials/11_concurrent_scene_build/premake5.lua deleted file mode 100644 index e492555..0000000 --- a/tutorials/11_concurrent_scene_build/premake5.lua +++ /dev/null @@ -1,13 +0,0 @@ -project "11_concurrent_scene_build" - cppdialect "C++17" - kind "ConsoleApp" - location "../build" - - dofile "../common/dependency.lua" - - files { "../common/**.h", "../common/**.cpp"} - files { "./**.h", "./**.cpp"} - - includedirs{ "../../" } - - targetdir "../dist/bin/%{cfg.buildcfg}" \ No newline at end of file diff --git a/tutorials/10_cutout/main.cpp b/tutorials/11_cutout/main.cpp similarity index 62% rename from tutorials/10_cutout/main.cpp rename to tutorials/11_cutout/main.cpp index f15dd4d..ef45245 100644 --- a/tutorials/10_cutout/main.cpp +++ b/tutorials/11_cutout/main.cpp @@ -25,65 +25,68 @@ class Tutorial : public TutorialBase { public: - void run() + void run() { hiprtContext ctxt; - CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, &ctxt ) ); + CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, ctxt ) ); hiprtTriangleMeshPrimitive mesh; - mesh.triangleCount = 2; - mesh.triangleStride = sizeof( hiprtInt3 ); + mesh.triangleCount = 2; + mesh.triangleStride = sizeof( hiprtInt3 ); int triangleIndices[] = { 0, 1, 2, 0, 2, 3 }; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&mesh.triangleIndices, mesh.triangleCount * sizeof( hiprtInt3 ) ) ); CHECK_ORO( - oroMemcpyHtoD( (oroDeviceptr)mesh.triangleIndices, triangleIndices, mesh.triangleCount * sizeof( hiprtInt3 ) ) ); + oroMalloc( reinterpret_cast( &mesh.triangleIndices ), mesh.triangleCount * sizeof( hiprtInt3 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( mesh.triangleIndices ), + triangleIndices, + mesh.triangleCount * sizeof( hiprtInt3 ) ) ); mesh.vertexCount = 4; mesh.vertexStride = sizeof( hiprtFloat3 ); float3 vertices[] = { { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, { 1.0f, 1.0f, 0.0f }, { 1.0f, 0.0f, 0.0f } }; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&mesh.vertices, mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); - CHECK_ORO( oroMemcpyHtoD( (oroDeviceptr)mesh.vertices, vertices, mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &mesh.vertices ), mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( mesh.vertices ), vertices, mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); hiprtGeometryBuildInput geomInput; geomInput.type = hiprtPrimitiveTypeTriangleMesh; - geomInput.triangleMesh.primitive = &mesh; + geomInput.triangleMesh.primitive = mesh; geomInput.geomType = 0; size_t geomTempSize; hiprtDevicePtr geomTemp; hiprtBuildOptions options; options.buildFlags = hiprtBuildFlagBitPreferFastBuild; - CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, &geomInput, &options, &geomTempSize ) ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&geomTemp, geomTempSize ) ); + CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, geomInput, options, geomTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &geomTemp ), geomTempSize ) ); hiprtGeometry geom; - CHECK_HIPRT( hiprtCreateGeometry( ctxt, &geomInput, &options, &geom ) ); - CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, &geomInput, &options, geomTemp, 0, geom ) ); + CHECK_HIPRT( hiprtCreateGeometry( ctxt, geomInput, options, geom ) ); + CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, geomInput, options, geomTemp, 0, geom ) ); oroFunction func; hiprtFuncNameSet funcNameSet; funcNameSet.filterFuncName = "cutoutFilter"; std::vector funcNameSets = { funcNameSet }; - buildTraceKernelFromBitcode( - ctxt, "../common/TutorialKernels.h", "CutoutKernel", func, nullptr, &funcNameSets, 1, 1 ); + buildTraceKernelFromBitcode( ctxt, "../common/TutorialKernels.h", "CutoutKernel", func, nullptr, &funcNameSets, 1, 1 ); hiprtFuncDataSet funcDataSet; hiprtFuncTable funcTable; - CHECK_HIPRT( hiprtCreateFuncTable( ctxt, 1, 1, &funcTable ) ); + CHECK_HIPRT( hiprtCreateFuncTable( ctxt, 1, 1, funcTable ) ); CHECK_HIPRT( hiprtSetFuncTable( ctxt, funcTable, 0, 0, funcDataSet ) ); u8* pixels; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&pixels, m_res.x * m_res.y * 4 ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &pixels ), m_res.x * m_res.y * 4 ) ); void* args[] = { &geom, &pixels, &funcTable, &m_res }; launchKernel( func, m_res.x, m_res.y, args ); - writeImage( "10_cutout.png", m_res.x, m_res.y, pixels ); + writeImage( "11_cutout.png", m_res.x, m_res.y, pixels ); - CHECK_ORO( oroFree( (oroDeviceptr)mesh.triangleIndices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)mesh.vertices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)geomTemp ) ); - CHECK_ORO( oroFree( (oroDeviceptr)pixels ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh.triangleIndices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh.vertices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( geomTemp ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( pixels ) ) ); CHECK_HIPRT( hiprtDestroyFuncTable( ctxt, funcTable ) ); CHECK_HIPRT( hiprtDestroyGeometry( ctxt, geom ) ); diff --git a/tutorials/10_cutout/premake5.lua b/tutorials/11_cutout/premake5.lua similarity index 93% rename from tutorials/10_cutout/premake5.lua rename to tutorials/11_cutout/premake5.lua index 472f37e..1ccc993 100644 --- a/tutorials/10_cutout/premake5.lua +++ b/tutorials/11_cutout/premake5.lua @@ -1,4 +1,4 @@ -project "10_cutout" +project "11_cutout" cppdialect "C++17" kind "ConsoleApp" location "../build" diff --git a/tutorials/11_concurrent_scene_build/main.cpp b/tutorials/12_concurrent_scene_build/main.cpp similarity index 53% rename from tutorials/11_concurrent_scene_build/main.cpp rename to tutorials/12_concurrent_scene_build/main.cpp index a5ba04d..34bf9ea 100644 --- a/tutorials/11_concurrent_scene_build/main.cpp +++ b/tutorials/12_concurrent_scene_build/main.cpp @@ -28,50 +28,50 @@ class Tutorial : public TutorialBase public: void run() { - const int circleCount = 3; - hiprtFloat4 circles[] = { { 0.25f, 0.5f, 0.0f, 0.1f }, { 0.5f, 0.5f, 0.0f, 0.1f }, { 0.75f, 0.5f, 0.0f, 0.1f } }; + constexpr u32 CircleCount = 3u; + hiprtFloat4 circles[] = { { 0.25f, 0.5f, 0.0f, 0.1f }, { 0.5f, 0.5f, 0.0f, 0.1f }, { 0.75f, 0.5f, 0.0f, 0.1f } }; hiprtContext ctxt; - CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, &ctxt ) ); + CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, ctxt ) ); hiprtGeometry geomCircles; - hiprtDevicePtr geomTempCircles; hiprtApiStream streamCircles; hiprtAABBListPrimitive list; { - list.aabbCount = circleCount; + list.aabbCount = CircleCount; list.aabbStride = 2 * sizeof( hiprtFloat4 ); - hiprtFloat4 aabbs[2 * circleCount]; - for ( int i = 0; i < circleCount; i++ ) + hiprtFloat4 aabbs[2 * CircleCount]; + for ( int i = 0; i < CircleCount; i++ ) { const hiprtFloat4& c = circles[i]; aabbs[i * 2 + 0] = { c.x - c.w, c.y - c.w, c.z, 0.0f }; aabbs[i * 2 + 1] = { c.x + c.w, c.y + c.w, c.z, 0.0f }; } - CHECK_ORO( oroMalloc( (oroDeviceptr*)&list.aabbs, 2 * list.aabbCount * sizeof( hiprtFloat4 ) ) ); - CHECK_ORO( oroMemcpyHtoD( (oroDeviceptr)list.aabbs, aabbs, 2 * list.aabbCount * sizeof( hiprtFloat4 ) ) ); + CHECK_ORO( + oroMalloc( reinterpret_cast( &list.aabbs ), 2 * list.aabbCount * sizeof( hiprtFloat4 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( list.aabbs ), aabbs, 2 * list.aabbCount * sizeof( hiprtFloat4 ) ) ); hiprtGeometryBuildInput geomInput; geomInput.type = hiprtPrimitiveTypeAABBList; - geomInput.aabbList.primitive = &list; + geomInput.aabbList.primitive = list; geomInput.geomType = 0; size_t geomTempSize; hiprtDevicePtr geomTemp; hiprtBuildOptions options; options.buildFlags = hiprtBuildFlagBitPreferFastBuild; - CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, &geomInput, &options, &geomTempSize ) ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&geomTemp, geomTempSize ) ); + CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, geomInput, options, geomTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &geomTemp ), geomTempSize ) ); - CHECK_ORO( oroStreamCreate( (oroStream*)&streamCircles ) ); - CHECK_HIPRT( hiprtCreateGeometry( ctxt, &geomInput, &options, &geomCircles ) ); + CHECK_ORO( oroStreamCreate( reinterpret_cast( &streamCircles ) ) ); + CHECK_HIPRT( hiprtCreateGeometry( ctxt, geomInput, options, geomCircles ) ); CHECK_HIPRT( hiprtBuildGeometry( - ctxt, hiprtBuildOperationBuild, &geomInput, &options, geomTemp, streamCircles, geomCircles ) ); - CHECK_ORO( oroFree( (oroDeviceptr)geomTemp ) ); + ctxt, hiprtBuildOperationBuild, geomInput, options, geomTemp, streamCircles, geomCircles ) ); + CHECK_ORO( oroFree( reinterpret_cast( geomTemp ) ) ); } hiprtGeometry geomTris; - hiprtDevicePtr geomTempTris; hiprtApiStream streamTris; hiprtTriangleMeshPrimitive mesh; { @@ -79,9 +79,12 @@ class Tutorial : public TutorialBase mesh.triangleStride = sizeof( hiprtInt3 ); std::vector triangleIndices( 3 * mesh.triangleCount ); std::iota( triangleIndices.begin(), triangleIndices.end(), 0 ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&mesh.triangleIndices, mesh.triangleCount * sizeof( hiprtInt3 ) ) ); + CHECK_ORO( oroMalloc( + reinterpret_cast( &mesh.triangleIndices ), mesh.triangleCount * sizeof( hiprtInt3 ) ) ); CHECK_ORO( oroMemcpyHtoD( - (oroDeviceptr)mesh.triangleIndices, triangleIndices.data(), mesh.triangleCount * sizeof( hiprtInt3 ) ) ); + reinterpret_cast( mesh.triangleIndices ), + triangleIndices.data(), + mesh.triangleCount * sizeof( hiprtInt3 ) ) ); mesh.vertexCount = 9; mesh.vertexStride = sizeof( hiprtFloat3 ); @@ -95,25 +98,27 @@ class Tutorial : public TutorialBase { 0.65f, 0.40f, 0.0f }, { 0.85f, 0.40f, 0.0f }, { 0.75f, 0.60f, 0.0f } }; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&mesh.vertices, mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); - CHECK_ORO( oroMemcpyHtoD( (oroDeviceptr)mesh.vertices, vertices, mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); + CHECK_ORO( + oroMalloc( reinterpret_cast( &mesh.vertices ), mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( mesh.vertices ), vertices, mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); hiprtGeometryBuildInput geomInput; geomInput.type = hiprtPrimitiveTypeTriangleMesh; - geomInput.triangleMesh.primitive = &mesh; + geomInput.triangleMesh.primitive = mesh; size_t geomTempSize; hiprtDevicePtr geomTemp; hiprtBuildOptions options; options.buildFlags = hiprtBuildFlagBitPreferFastBuild; - CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, &geomInput, &options, &geomTempSize ) ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&geomTemp, geomTempSize ) ); + CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, geomInput, options, geomTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &geomTemp ), geomTempSize ) ); - CHECK_ORO( oroStreamCreate( (oroStream*)&streamTris ) ); - CHECK_HIPRT( hiprtCreateGeometry( ctxt, &geomInput, &options, &geomTris ) ); + CHECK_ORO( oroStreamCreate( reinterpret_cast( &streamTris ) ) ); + CHECK_HIPRT( hiprtCreateGeometry( ctxt, geomInput, options, geomTris ) ); CHECK_HIPRT( - hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, &geomInput, &options, geomTemp, streamTris, geomTris ) ); - CHECK_ORO( oroFree( (oroDeviceptr)geomTemp ) ); + hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, geomInput, options, geomTemp, streamTris, geomTris ) ); + CHECK_ORO( oroFree( reinterpret_cast( geomTemp ) ) ); } CHECK_ORO( oroDeviceSynchronize() ); @@ -126,9 +131,12 @@ class Tutorial : public TutorialBase sceneInput.instanceTransformHeaders = nullptr; hiprtDevicePtr geoms[] = { geomCircles, geomTris }; CHECK_ORO( oroMalloc( - (oroDeviceptr*)&sceneInput.instanceGeometries, sceneInput.instanceCount * sizeof( hiprtDevicePtr ) ) ); + reinterpret_cast( &sceneInput.instanceGeometries ), + sceneInput.instanceCount * sizeof( hiprtDevicePtr ) ) ); CHECK_ORO( oroMemcpyHtoD( - (oroDeviceptr)sceneInput.instanceGeometries, geoms, sceneInput.instanceCount * sizeof( hiprtDevicePtr ) ) ); + reinterpret_cast( sceneInput.instanceGeometries ), + geoms, + sceneInput.instanceCount * sizeof( hiprtDevicePtr ) ) ); const float o = 0.05f; hiprtFrameSRT frames[2]; @@ -140,21 +148,24 @@ class Tutorial : public TutorialBase frames[1].rotation = make_hiprtFloat4( 0.0f, 0.0f, 1.0f, 0.0f ); sceneInput.frameCount = 2; - CHECK_ORO( - oroMalloc( (oroDeviceptr*)&sceneInput.instanceFrames, sceneInput.frameCount * sizeof( hiprtFrameSRT ) ) ); + CHECK_ORO( oroMalloc( + reinterpret_cast( &sceneInput.instanceFrames ), + sceneInput.frameCount * sizeof( hiprtFrameSRT ) ) ); CHECK_ORO( oroMemcpyHtoD( - (oroDeviceptr)sceneInput.instanceFrames, frames, sceneInput.frameCount * sizeof( hiprtFrameSRT ) ) ); + reinterpret_cast( sceneInput.instanceFrames ), + frames, + sceneInput.frameCount * sizeof( hiprtFrameSRT ) ) ); size_t sceneTempSize; hiprtDevicePtr sceneTemp; hiprtBuildOptions options; options.buildFlags = hiprtBuildFlagBitPreferFastBuild; - CHECK_HIPRT( hiprtGetSceneBuildTemporaryBufferSize( ctxt, &sceneInput, &options, &sceneTempSize ) ); - CHECK_ORO( oroMalloc( (oroDeviceptr*)&sceneTemp, sceneTempSize ) ); + CHECK_HIPRT( hiprtGetSceneBuildTemporaryBufferSize( ctxt, sceneInput, options, sceneTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &sceneTemp ), sceneTempSize ) ); - CHECK_HIPRT( hiprtCreateScene( ctxt, &sceneInput, &options, &scene ) ); - CHECK_HIPRT( hiprtBuildScene( ctxt, hiprtBuildOperationBuild, &sceneInput, &options, sceneTemp, 0, scene ) ); - CHECK_ORO( oroFree( (oroDeviceptr)sceneTemp ) ); + CHECK_HIPRT( hiprtCreateScene( ctxt, sceneInput, options, scene ) ); + CHECK_HIPRT( hiprtBuildScene( ctxt, hiprtBuildOperationBuild, sceneInput, options, sceneTemp, 0, scene ) ); + CHECK_ORO( oroFree( reinterpret_cast( sceneTemp ) ) ); } hiprtFuncNameSet funcNameSet; @@ -163,34 +174,36 @@ class Tutorial : public TutorialBase oroFunction func; buildTraceKernelFromBitcode( - ctxt, "../common/TutorialKernels.h", "ConcurrentSceneBuildKernel", func, nullptr, &funcNameSets, 1, 1 ); + ctxt, "../common/TutorialKernels.h", "SceneBuildKernel", func, nullptr, &funcNameSets, 1, 1 ); hiprtFuncDataSet funcDataSet; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&funcDataSet.intersectFuncData, circleCount * sizeof( hiprtFloat4 ) ) ); - CHECK_ORO( oroMemcpyHtoD( (oroDeviceptr)funcDataSet.intersectFuncData, circles, circleCount * sizeof( hiprtFloat4 ) ) ); + CHECK_ORO( oroMalloc( + reinterpret_cast( &funcDataSet.intersectFuncData ), CircleCount * sizeof( hiprtFloat4 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( funcDataSet.intersectFuncData ), circles, CircleCount * sizeof( hiprtFloat4 ) ) ); hiprtFuncTable funcTable; - CHECK_HIPRT( hiprtCreateFuncTable( ctxt, 1, 1, &funcTable ) ); + CHECK_HIPRT( hiprtCreateFuncTable( ctxt, 1, 1, funcTable ) ); CHECK_HIPRT( hiprtSetFuncTable( ctxt, funcTable, 0, 0, funcDataSet ) ); u8* pixels; - CHECK_ORO( oroMalloc( (oroDeviceptr*)&pixels, m_res.x * m_res.y * 4 ) ); - CHECK_ORO( oroMemset( (oroDeviceptr)pixels, 0, m_res.x * m_res.y * 4 ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &pixels ), m_res.x * m_res.y * 4 ) ); + CHECK_ORO( oroMemset( reinterpret_cast( pixels ), 0, m_res.x * m_res.y * 4 ) ); void* args[] = { &scene, &pixels, &funcTable, &m_res }; launchKernel( func, m_res.x, m_res.y, args ); - writeImage( "11_concurrent_scene_build.png", m_res.x, m_res.y, pixels ); - - CHECK_ORO( oroFree( (oroDeviceptr)funcDataSet.intersectFuncData ) ); - CHECK_ORO( oroFree( (oroDeviceptr)sceneInput.instanceGeometries ) ); - CHECK_ORO( oroFree( (oroDeviceptr)sceneInput.instanceFrames ) ); - CHECK_ORO( oroFree( (oroDeviceptr)mesh.triangleIndices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)mesh.vertices ) ); - CHECK_ORO( oroFree( (oroDeviceptr)list.aabbs ) ); - CHECK_ORO( oroFree( (oroDeviceptr)pixels ) ); - - CHECK_ORO( oroStreamDestroy( (oroStream)streamCircles ) ); - CHECK_ORO( oroStreamDestroy( (oroStream)streamTris ) ); + writeImage( "12_concurrent_scene_build.png", m_res.x, m_res.y, pixels ); + + CHECK_ORO( oroFree( reinterpret_cast( funcDataSet.intersectFuncData ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( sceneInput.instanceGeometries ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( sceneInput.instanceFrames ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh.triangleIndices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh.vertices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( list.aabbs ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( pixels ) ) ); + + CHECK_ORO( oroStreamDestroy( reinterpret_cast( streamCircles ) ) ); + CHECK_ORO( oroStreamDestroy( reinterpret_cast( streamTris ) ) ); CHECK_HIPRT( hiprtDestroyFuncTable( ctxt, funcTable ) ); CHECK_HIPRT( hiprtDestroyGeometry( ctxt, geomTris ) ); diff --git a/tutorials/12_concurrent_scene_build/premake5.lua b/tutorials/12_concurrent_scene_build/premake5.lua new file mode 100644 index 0000000..983987b --- /dev/null +++ b/tutorials/12_concurrent_scene_build/premake5.lua @@ -0,0 +1,13 @@ +project "12_concurrent_scene_build" + cppdialect "C++17" + kind "ConsoleApp" + location "../build" + + dofile "../common/dependency.lua" + + files { "../common/**.h", "../common/**.cpp"} + files { "./**.h", "./**.cpp"} + + includedirs{ "../../" } + + targetdir "../dist/bin/%{cfg.buildcfg}" \ No newline at end of file diff --git a/tutorials/13_batch_build/main.cpp b/tutorials/13_batch_build/main.cpp new file mode 100644 index 0000000..f616163 --- /dev/null +++ b/tutorials/13_batch_build/main.cpp @@ -0,0 +1,204 @@ +// +// Copyright (c) 2021-2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#include +#include + +class Tutorial : public TutorialBase +{ + public: + void run() + { + constexpr u32 CircleCount = 3u; + hiprtFloat4 circles[] = { { 0.25f, 0.5f, 0.0f, 0.1f }, { 0.5f, 0.5f, 0.0f, 0.1f }, { 0.75f, 0.5f, 0.0f, 0.1f } }; + + hiprtContext ctxt; + CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, ctxt ) ); + + hiprtGeometryBuildInput geomBuildInputs[2]; + hiprtGeometry geoms[2]; + + hiprtAABBListPrimitive list; + { + list.aabbCount = CircleCount; + list.aabbStride = 2 * sizeof( hiprtFloat4 ); + hiprtFloat4 aabbs[2 * CircleCount]; + for ( int i = 0; i < CircleCount; i++ ) + { + const hiprtFloat4& c = circles[i]; + aabbs[i * 2 + 0] = { c.x - c.w, c.y - c.w, c.z, 0.0f }; + aabbs[i * 2 + 1] = { c.x + c.w, c.y + c.w, c.z, 0.0f }; + } + CHECK_ORO( + oroMalloc( reinterpret_cast( &list.aabbs ), 2 * list.aabbCount * sizeof( hiprtFloat4 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( list.aabbs ), aabbs, 2 * list.aabbCount * sizeof( hiprtFloat4 ) ) ); + + geomBuildInputs[0].type = hiprtPrimitiveTypeAABBList; + geomBuildInputs[0].aabbList.primitive = list; + geomBuildInputs[0].geomType = 0; + } + + hiprtTriangleMeshPrimitive mesh; + { + mesh.triangleCount = 3; + mesh.triangleStride = sizeof( hiprtInt3 ); + std::vector triangleIndices( 3 * mesh.triangleCount ); + std::iota( triangleIndices.begin(), triangleIndices.end(), 0 ); + CHECK_ORO( oroMalloc( + reinterpret_cast( &mesh.triangleIndices ), mesh.triangleCount * sizeof( hiprtInt3 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( mesh.triangleIndices ), + triangleIndices.data(), + mesh.triangleCount * sizeof( hiprtInt3 ) ) ); + + mesh.vertexCount = 9; + mesh.vertexStride = sizeof( hiprtFloat3 ); + hiprtFloat3 vertices[] = { + { 0.15f, 0.40f, 0.0f }, + { 0.35f, 0.40f, 0.0f }, + { 0.25f, 0.60f, 0.0f }, + { 0.40f, 0.40f, 0.0f }, + { 0.60f, 0.40f, 0.0f }, + { 0.50f, 0.60f, 0.0f }, + { 0.65f, 0.40f, 0.0f }, + { 0.85f, 0.40f, 0.0f }, + { 0.75f, 0.60f, 0.0f } }; + CHECK_ORO( + oroMalloc( reinterpret_cast( &mesh.vertices ), mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( mesh.vertices ), vertices, mesh.vertexCount * sizeof( hiprtFloat3 ) ) ); + + geomBuildInputs[1].type = hiprtPrimitiveTypeTriangleMesh; + geomBuildInputs[1].triangleMesh.primitive = mesh; + } + + { + hiprtBuildOptions options; + options.buildFlags = hiprtBuildFlagBitPreferFastBuild; + options.batchBuildMaxPrimCount = 16u; // this enables batch construction + + size_t geomTempSize; + hiprtDevicePtr geomTemp; + CHECK_HIPRT( hiprtGetGeometriesBuildTemporaryBufferSize( ctxt, 2, geomBuildInputs, options, geomTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &geomTemp ), geomTempSize ) ); + + hiprtGeometry* geomAddrs[] = { &geoms[0], &geoms[1] }; + CHECK_HIPRT( hiprtCreateGeometries( ctxt, 2, geomBuildInputs, options, geomAddrs ) ); + CHECK_HIPRT( + hiprtBuildGeometries( ctxt, hiprtBuildOperationBuild, 2, geomBuildInputs, options, geomTemp, 0, geoms ) ); + CHECK_ORO( oroFree( reinterpret_cast( geomTemp ) ) ); + } + + hiprtScene scene; + hiprtSceneBuildInput sceneInput; + { + sceneInput.instanceCount = 2; + sceneInput.instanceMasks = nullptr; + sceneInput.instanceTransformHeaders = nullptr; + CHECK_ORO( oroMalloc( + reinterpret_cast( &sceneInput.instanceGeometries ), + sceneInput.instanceCount * sizeof( hiprtDevicePtr ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( sceneInput.instanceGeometries ), + geoms, + sceneInput.instanceCount * sizeof( hiprtDevicePtr ) ) ); + + const float o = 0.05f; + hiprtFrameSRT frames[2]; + frames[0].translation = make_hiprtFloat3( 0.0f, o, 0.0f ); + frames[0].scale = make_hiprtFloat3( 1.0f, 1.0f, 1.0f ); + frames[0].rotation = make_hiprtFloat4( 0.0f, 0.0f, 1.0f, 0.0f ); + frames[1].translation = make_hiprtFloat3( 0.0f, -o, 0.0f ); + frames[1].scale = make_hiprtFloat3( 1.0f, 1.0f, 1.0f ); + frames[1].rotation = make_hiprtFloat4( 0.0f, 0.0f, 1.0f, 0.0f ); + + sceneInput.frameCount = 2; + CHECK_ORO( oroMalloc( + reinterpret_cast( &sceneInput.instanceFrames ), + sceneInput.frameCount * sizeof( hiprtFrameSRT ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( sceneInput.instanceFrames ), + frames, + sceneInput.frameCount * sizeof( hiprtFrameSRT ) ) ); + + size_t sceneTempSize; + hiprtDevicePtr sceneTemp; + hiprtBuildOptions options; + options.buildFlags = hiprtBuildFlagBitPreferFastBuild; + CHECK_HIPRT( hiprtGetSceneBuildTemporaryBufferSize( ctxt, sceneInput, options, sceneTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &sceneTemp ), sceneTempSize ) ); + + CHECK_HIPRT( hiprtCreateScene( ctxt, sceneInput, options, scene ) ); + CHECK_HIPRT( hiprtBuildScene( ctxt, hiprtBuildOperationBuild, sceneInput, options, sceneTemp, 0, scene ) ); + CHECK_ORO( oroFree( reinterpret_cast( sceneTemp ) ) ); + } + + hiprtFuncNameSet funcNameSet; + funcNameSet.intersectFuncName = "intersectCircle"; + std::vector funcNameSets = { funcNameSet }; + + oroFunction func; + buildTraceKernelFromBitcode( + ctxt, "../common/TutorialKernels.h", "SceneBuildKernel", func, nullptr, &funcNameSets, 1, 1 ); + + hiprtFuncDataSet funcDataSet; + CHECK_ORO( oroMalloc( + reinterpret_cast( &funcDataSet.intersectFuncData ), CircleCount * sizeof( hiprtFloat4 ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( funcDataSet.intersectFuncData ), circles, CircleCount * sizeof( hiprtFloat4 ) ) ); + + hiprtFuncTable funcTable; + CHECK_HIPRT( hiprtCreateFuncTable( ctxt, 1, 1, funcTable ) ); + CHECK_HIPRT( hiprtSetFuncTable( ctxt, funcTable, 0, 0, funcDataSet ) ); + + u8* pixels; + CHECK_ORO( oroMalloc( reinterpret_cast( &pixels ), m_res.x * m_res.y * 4 ) ); + CHECK_ORO( oroMemset( reinterpret_cast( pixels ), 0, m_res.x * m_res.y * 4 ) ); + + void* args[] = { &scene, &pixels, &funcTable, &m_res }; + launchKernel( func, m_res.x, m_res.y, args ); + writeImage( "13_batch_build.png", m_res.x, m_res.y, pixels ); + + CHECK_ORO( oroFree( reinterpret_cast( funcDataSet.intersectFuncData ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( sceneInput.instanceGeometries ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( sceneInput.instanceFrames ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh.triangleIndices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( mesh.vertices ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( list.aabbs ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( pixels ) ) ); + + CHECK_HIPRT( hiprtDestroyFuncTable( ctxt, funcTable ) ); + CHECK_HIPRT( hiprtDestroyGeometries( ctxt, 2, geoms ) ); + CHECK_HIPRT( hiprtDestroyScene( ctxt, scene ) ); + CHECK_HIPRT( hiprtDestroyContext( ctxt ) ); + } +}; + +int main( int argc, char** argv ) +{ + Tutorial tutorial; + tutorial.init( 0 ); + tutorial.run(); + + return 0; +} diff --git a/tutorials/13_batch_build/premake5.lua b/tutorials/13_batch_build/premake5.lua new file mode 100644 index 0000000..589ea48 --- /dev/null +++ b/tutorials/13_batch_build/premake5.lua @@ -0,0 +1,13 @@ +project "13_batch_build" + cppdialect "C++17" + kind "ConsoleApp" + location "../build" + + dofile "../common/dependency.lua" + + files { "../common/**.h", "../common/**.cpp"} + files { "./**.h", "./**.cpp"} + + includedirs{ "../../" } + + targetdir "../dist/bin/%{cfg.buildcfg}" \ No newline at end of file diff --git a/tutorials/14_fluid_simulation/main.cpp b/tutorials/14_fluid_simulation/main.cpp new file mode 100644 index 0000000..823c2d8 --- /dev/null +++ b/tutorials/14_fluid_simulation/main.cpp @@ -0,0 +1,256 @@ +// +// Copyright (c) 2021-2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#include +#include +#include +#include + +class Tutorial : public TutorialBase +{ + public: + static constexpr std::string_view OutputDir = "fluid_simulation_output"; + static constexpr bool ExportAllFrames = false; + static constexpr u32 FrameCount = 200u; + static constexpr u32 FrameToExport = 165u; + + static constexpr float PoolVolumeDim = 1.0f; + static constexpr float PoolSpaceDivision = 50.0f; + static constexpr float InitParticleVolumeDim = 0.6f; + static constexpr float InitParticleVolumeCenter[] = { + -0.45f * ( PoolVolumeDim - InitParticleVolumeDim ), + PoolVolumeDim - InitParticleVolumeDim * 0.5f, + 0.45f * ( PoolVolumeDim - InitParticleVolumeDim ) }; + static constexpr float ParticleRestDensity = 1000.0f; + static constexpr float ParticleSmoothRadius = PoolVolumeDim / PoolSpaceDivision; + + void run() + { + // Init constant data + Simulation sim; + { + sim.m_smoothRadius = ParticleSmoothRadius; + sim.m_pressureStiffness = 200.0f; + sim.m_restDensity = ParticleRestDensity; + sim.m_wallStiffness = 3000.0f; + sim.m_particleCount = 131072; + sim.m_planes[0] = { 0.0f, 1.0f, 0.0f, 0.0f }; + sim.m_planes[1] = { 0.0f, -1.0f, 0.0f, PoolVolumeDim }; + sim.m_planes[2] = { 1.0f, 0.0f, 0.0f, 0.5f * PoolVolumeDim }; + sim.m_planes[3] = { -1.0f, 0.0f, 0.0f, 0.5f * PoolVolumeDim }; + sim.m_planes[4] = { 0.0f, 0.0f, 1.0f, 0.5f * PoolVolumeDim }; + sim.m_planes[5] = { 0.0f, 0.0f, -1.0f, 0.5f * PoolVolumeDim }; + + const float initVolume = InitParticleVolumeDim * InitParticleVolumeDim * InitParticleVolumeDim; + const float mass = sim.m_restDensity * initVolume / sim.m_particleCount; + const float viscosity = 0.4f; + sim.m_densityCoef = mass * 315.0f / ( 64.0f * Pi * pow( sim.m_smoothRadius, 9.0f ) ); + sim.m_pressureGradCoef = mass * -45.0f / ( Pi * pow( sim.m_smoothRadius, 6.0f ) ); + sim.m_viscosityLaplaceCoef = mass * viscosity * 45.0f / ( Pi * pow( sim.m_smoothRadius, 6.0f ) ); + } + + // Init data + std::vector particles( sim.m_particleCount ); + + const auto smoothRadius = ParticleSmoothRadius; + const auto dimSize = static_cast( ceil( std::cbrt( sim.m_particleCount ) ) ); + const auto slcSize = dimSize * dimSize; + for ( u32 i = 0; i < sim.m_particleCount; ++i ) + { + const auto n = i % slcSize; + auto x = ( n % dimSize ) / static_cast( dimSize ); + auto y = ( n / dimSize ) / static_cast( dimSize ); + auto z = ( i / slcSize ) / static_cast( dimSize ); + x = InitParticleVolumeDim * ( x - 0.5f ) + InitParticleVolumeCenter[0]; + y = InitParticleVolumeDim * ( y - 0.5f ) + InitParticleVolumeCenter[1]; + z = InitParticleVolumeDim * ( z - 0.5f ) + InitParticleVolumeCenter[2]; + + particles[i].Pos = { x, y, z }; + particles[i].Velocity = { 0.0f, 0.0f, 0.0f }; + } + + hiprtContext ctxt; + CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, m_ctxtInput, ctxt ) ); + + hiprtAABBListPrimitive list; + list.aabbCount = sim.m_particleCount; + list.aabbStride = sizeof( Aabb ); + std::vector aabbs( sim.m_particleCount ); + for ( u32 i = 0; i < sim.m_particleCount; ++i ) + { + const hiprtFloat3& c = particles[i].Pos; + aabbs[i].m_min.x = c.x - smoothRadius; + aabbs[i].m_max.x = c.x + smoothRadius; + aabbs[i].m_min.y = c.y - smoothRadius; + aabbs[i].m_max.y = c.y + smoothRadius; + aabbs[i].m_min.z = c.z - smoothRadius; + aabbs[i].m_max.z = c.z + smoothRadius; + } + CHECK_ORO( oroMalloc( reinterpret_cast( &list.aabbs ), sim.m_particleCount * sizeof( Aabb ) ) ); + CHECK_ORO( + oroMemcpyHtoD( reinterpret_cast( list.aabbs ), aabbs.data(), sim.m_particleCount * sizeof( Aabb ) ) ); + + hiprtGeometryBuildInput geomInput; + geomInput.type = hiprtPrimitiveTypeAABBList; + geomInput.aabbList.primitive = list; + geomInput.geomType = 0; + + size_t geomTempSize; + hiprtDevicePtr geomTemp; + hiprtBuildOptions options; + options.buildFlags = hiprtBuildFlagBitPreferFastBuild; + CHECK_HIPRT( hiprtGetGeometryBuildTemporaryBufferSize( ctxt, geomInput, options, geomTempSize ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &geomTemp ), geomTempSize ) ); + + hiprtGeometry geom; + CHECK_HIPRT( hiprtCreateGeometry( ctxt, geomInput, options, geom ) ); + + hiprtFuncNameSet funcNameSet; + funcNameSet.intersectFuncName = "intersectParticleImpactSphere"; + std::vector funcNameSets = { funcNameSet }; + + hiprtFuncDataSet funcDataSet; + CHECK_ORO( oroMalloc( + reinterpret_cast( &funcDataSet.intersectFuncData ), sim.m_particleCount * sizeof( Particle ) ) ); + CHECK_ORO( oroMemcpyHtoD( + reinterpret_cast( funcDataSet.intersectFuncData ), + particles.data(), + sim.m_particleCount * sizeof( Particle ) ) ); + + hiprtFuncTable funcTable; + CHECK_HIPRT( hiprtCreateFuncTable( ctxt, 1, 1, funcTable ) ); + CHECK_HIPRT( hiprtSetFuncTable( ctxt, funcTable, 0, 0, funcDataSet ) ); + + Simulation* pSim; + CHECK_ORO( oroMalloc( reinterpret_cast( &pSim ), sizeof( Simulation ) ) ); + CHECK_ORO( oroMemcpyHtoD( reinterpret_cast( pSim ), &sim, sizeof( Simulation ) ) ); + + // Density + float* densities; + oroFunction densityFunc; + CHECK_ORO( oroMalloc( reinterpret_cast( &densities ), sim.m_particleCount * sizeof( float ) ) ); + buildTraceKernelFromBitcode( + ctxt, "../common/TutorialKernels.h", "DensityKernel", densityFunc, nullptr, &funcNameSets, 1, 1 ); + + // Force + hiprtFloat3* accelerations; + oroFunction forceFunc; + CHECK_ORO( + oroMalloc( reinterpret_cast( &accelerations ), sim.m_particleCount * sizeof( hiprtFloat3 ) ) ); + buildTraceKernelFromBitcode( + ctxt, "../common/TutorialKernels.h", "ForceKernel", forceFunc, nullptr, &funcNameSets, 1, 1 ); + + // Integration + PerFrame* pPerFrame; + oroFunction intFunc; + { + PerFrame perFrame; + perFrame.m_timeStep = 1.0f / 320.0f; + perFrame.m_gravity = { 0.0f, -9.8f, 0.0f }; + CHECK_ORO( oroMalloc( reinterpret_cast( &pPerFrame ), sizeof( PerFrame ) ) ); + CHECK_ORO( oroMemcpyHtoD( reinterpret_cast( pPerFrame ), &perFrame, sizeof( PerFrame ) ) ); + buildTraceKernelFromBitcode( ctxt, "../common/TutorialKernels.h", "IntegrationKernel", intFunc ); + } + + // Visualization + float4x4* pViewProj; + u8* pixels; + oroFunction visFunc; + { + // Projection matrix + float aspect = m_res.x / static_cast( m_res.y ); + float4x4 proj = Perspective( Pi / 4.0f, aspect, 1.0f, 40.0f ); + + // View matrix + hiprtFloat3 focusPt = { 0.0f, 0.5f, 0.0f }; + hiprtFloat3 eyePt = focusPt - make_hiprtFloat3( -0.5f, -0.5f, 2.0f ); + float4x4 view = LookAt( eyePt, focusPt, make_hiprtFloat3( 0.0f, 1.0f, 0.0f ) ); + + float4x4 viewProj = proj * view; + + CHECK_ORO( oroMalloc( reinterpret_cast( &pViewProj ), sizeof( float4x4 ) ) ); + CHECK_ORO( oroMemcpyHtoD( reinterpret_cast( pViewProj ), &viewProj, sizeof( float4x4 ) ) ); + CHECK_ORO( oroMalloc( reinterpret_cast( &pixels ), m_res.x * m_res.y * 4 ) ); + buildTraceKernelFromBitcode( ctxt, "../common/TutorialKernels.h", "VisualizationKernel", visFunc ); + } + + // Launch kernels + const u32 b = 64; + u32 nb = ( sim.m_particleCount + b - 1 ) / b; + + if constexpr ( ExportAllFrames ) std::filesystem::create_directory( OutputDir ); + + // Simulate + for ( u32 i = 0; i < FrameCount; ++i ) + { + CHECK_HIPRT( hiprtBuildGeometry( ctxt, hiprtBuildOperationBuild, geomInput, options, geomTemp, 0, geom ) ); + + void* dArgs[] = { &geom, &densities, &funcDataSet.intersectFuncData, &pSim, &funcTable }; + CHECK_ORO( oroModuleLaunchKernel( densityFunc, nb, 1, 1, b, 1, 1, 0, 0, dArgs, 0 ) ); + + void* fArgs[] = { &geom, &accelerations, &funcDataSet.intersectFuncData, &densities, &pSim, &funcTable }; + CHECK_ORO( oroModuleLaunchKernel( forceFunc, nb, 1, 1, b, 1, 1, 0, 0, fArgs, 0 ) ); + + void* iArgs[] = { &funcDataSet.intersectFuncData, &list.aabbs, &accelerations, &pSim, &pPerFrame }; + CHECK_ORO( oroModuleLaunchKernel( intFunc, nb, 1, 1, b, 1, 1, 0, 0, iArgs, 0 ) ); + + // Visualize + CHECK_ORO( oroMemset( reinterpret_cast( pixels ), 0, m_res.x * m_res.y * 4 ) ); + void* vArgs[] = { &funcDataSet.intersectFuncData, &densities, &pixels, &m_res, &pViewProj }; + CHECK_ORO( oroModuleLaunchKernel( visFunc, nb, 1, 1, b, 1, 1, 0, 0, vArgs, 0 ) ); + + if constexpr ( ExportAllFrames ) + { + std::string imageName = std::string( OutputDir ) + "/" + std::to_string( i ) + ".png"; + writeImage( imageName.c_str(), m_res.x, m_res.y, pixels ); + } + else + { + std::cout << "Fluid simulation: frame " << i << " done." << std::endl; + if ( i == FrameToExport ) writeImage( "14_fluid_simulation.png", m_res.x, m_res.y, pixels ); + } + } + + CHECK_ORO( oroFree( reinterpret_cast( funcDataSet.intersectFuncData ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( list.aabbs ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( geomTemp ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( pSim ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( densities ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( accelerations ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( pPerFrame ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( pViewProj ) ) ); + CHECK_ORO( oroFree( reinterpret_cast( pixels ) ) ); + + CHECK_HIPRT( hiprtDestroyFuncTable( ctxt, funcTable ) ); + CHECK_HIPRT( hiprtDestroyGeometry( ctxt, geom ) ); + CHECK_HIPRT( hiprtDestroyContext( ctxt ) ); + } +}; + +int main( int argc, char** argv ) +{ + Tutorial tutorial; + tutorial.init( 0 ); + tutorial.run(); + + return 0; +} diff --git a/tutorials/14_fluid_simulation/premake5.lua b/tutorials/14_fluid_simulation/premake5.lua new file mode 100644 index 0000000..a39159d --- /dev/null +++ b/tutorials/14_fluid_simulation/premake5.lua @@ -0,0 +1,13 @@ +project "14_fluid_simulation" + cppdialect "C++17" + kind "ConsoleApp" + location "../build" + + dofile "../common/dependency.lua" + + files { "../common/**.h", "../common/**.cpp"} + files { "./**.h", "./**.cpp"} + + includedirs{ "../../" } + + targetdir "../dist/bin/%{cfg.buildcfg}" \ No newline at end of file diff --git a/tutorials/12_hiprt_hip/main.cpp b/tutorials/15_hiprt_hip/main.cpp similarity index 98% rename from tutorials/12_hiprt_hip/main.cpp rename to tutorials/15_hiprt_hip/main.cpp index 84a0bfd..091d092 100644 --- a/tutorials/12_hiprt_hip/main.cpp +++ b/tutorials/15_hiprt_hip/main.cpp @@ -68,11 +68,11 @@ int main( int argc, char** argv ) ctxtInput.deviceType = hiprtDeviceNVIDIA; else ctxtInput.deviceType = hiprtDeviceAMD; - ctxtInput.ctxt = hipCtx; + ctxtInput.ctxt = hipCtx; ctxtInput.device = hipDevice; hiprtContext ctxt; - CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, ctxtInput, &ctxt ) ); + CHECK_HIPRT( hiprtCreateContext( HIPRT_API_VERSION, ctxtInput, ctxt ) ); CHECK_HIPRT( hiprtDestroyContext( ctxt ) ); #endif return 0; diff --git a/tutorials/12_hiprt_hip/premake5.lua b/tutorials/15_hiprt_hip/premake5.lua similarity index 80% rename from tutorials/12_hiprt_hip/premake5.lua rename to tutorials/15_hiprt_hip/premake5.lua index e72640e..333ceae 100644 --- a/tutorials/12_hiprt_hip/premake5.lua +++ b/tutorials/15_hiprt_hip/premake5.lua @@ -1,13 +1,11 @@ -project "12_hiprt_hip" +project "15_hiprt_hip" cppdialect "C++17" kind "ConsoleApp" location "../build" local hiproot = os.getenv("HIP_PATH") if hiproot == nil or hiproot == '' then - if os.ishost("windows") then - hiproot = "./contrib/hipSdk" - elseif os.ishost("linux") then + if os.ishost("linux") then hiproot = "/opt/rocm" end end @@ -31,5 +29,5 @@ project "12_hiprt_hip" files { "./**.h", "./**.cpp"} files { "../../hiprt/*.h"} - links {"hiprt0200064"} + links {"hiprt0200164"} targetdir "../dist/bin/%{cfg.buildcfg}" diff --git a/tutorials/common/Aabb.h b/tutorials/common/Aabb.h new file mode 100644 index 0000000..576e034 --- /dev/null +++ b/tutorials/common/Aabb.h @@ -0,0 +1,99 @@ +// +// Copyright (c) 2021-2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#pragma once +#include +#include + +struct Aabb +{ + HOST_DEVICE INLINE Aabb() { reset(); } + + HOST_DEVICE INLINE Aabb( const hiprtFloat3& p ) : m_min( p ), m_max( p ) {} + + HOST_DEVICE INLINE Aabb( const hiprtFloat3& mi, const hiprtFloat3& ma ) : m_min( mi ), m_max( ma ) {} + + HOST_DEVICE INLINE Aabb( const Aabb& rhs, const Aabb& lhs ) + { + m_min.x = fminf( lhs.m_min.x, rhs.m_min.x ); + m_min.y = fminf( lhs.m_min.y, rhs.m_min.y ); + m_min.z = fminf( lhs.m_min.z, rhs.m_min.z ); + m_max.x = fmaxf( lhs.m_max.x, rhs.m_max.x ); + m_max.y = fmaxf( lhs.m_max.y, rhs.m_max.y ); + m_max.z = fmaxf( lhs.m_max.z, rhs.m_max.z ); + } + + HOST_DEVICE INLINE void reset( void ) + { + m_min = make_hiprtFloat3( FltMax, FltMax, FltMax ); + m_max = make_hiprtFloat3( -FltMax, -FltMax, -FltMax ); + } + + HOST_DEVICE INLINE Aabb& grow( const hiprtFloat3& p ) + { + m_min.x = fminf( m_min.x, p.x ); + m_min.y = fminf( m_min.y, p.y ); + m_min.z = fminf( m_min.z, p.z ); + m_max.x = fmaxf( m_max.x, p.x ); + m_max.y = fmaxf( m_max.y, p.y ); + m_max.z = fmaxf( m_max.z, p.z ); + return *this; + } + + HOST_DEVICE INLINE Aabb& grow( const Aabb& rhs ) + { + m_min.x = fminf( m_min.x, rhs.m_min.x ); + m_min.y = fminf( m_min.y, rhs.m_min.y ); + m_min.z = fminf( m_min.z, rhs.m_min.z ); + m_max.x = fmaxf( m_max.x, rhs.m_max.x ); + m_max.y = fmaxf( m_max.y, rhs.m_max.y ); + m_max.z = fmaxf( m_max.z, rhs.m_max.z ); + return *this; + } + + HOST_DEVICE INLINE hiprtFloat3 center() const + { + hiprtFloat3 c; + c.x = ( m_max.x + m_min.x ) * 0.5f; + c.y = ( m_max.y + m_min.y ) * 0.5f; + c.z = ( m_max.z + m_min.z ) * 0.5f; + return c; + } + + HOST_DEVICE INLINE hiprtFloat3 extent() const + { + hiprtFloat3 e; + e.x = m_max.x - m_min.x; + e.y = m_max.y - m_min.y; + e.z = m_max.z - m_min.z; + return e; + } + + HOST_DEVICE INLINE float area() const + { + hiprtFloat3 ext = extent(); + return 2 * ( ext.x * ext.y + ext.x * ext.z + ext.y * ext.z ); + } + + hiprtFloat3 m_min; + hiprtFloat3 m_max; +}; diff --git a/tutorials/common/BvhBuilder.h b/tutorials/common/BvhBuilder.h index 71de81e..a880738 100644 --- a/tutorials/common/BvhBuilder.h +++ b/tutorials/common/BvhBuilder.h @@ -1,227 +1,175 @@ -#pragma once -#include -#include -#include - -struct Aabb -{ - Aabb() { reset(); } - - Aabb( const hiprtFloat3& p ) : m_min( p ), m_max( p ) {} - - Aabb( const hiprtFloat3& mi, const hiprtFloat3& ma ) : m_min( mi ), m_max( ma ) {} - - Aabb( const Aabb& rhs, const Aabb& lhs ) - { - m_min.x = fminf( lhs.m_min.x, rhs.m_min.x ); - m_min.y = fminf( lhs.m_min.y, rhs.m_min.y ); - m_min.z = fminf( lhs.m_min.z, rhs.m_min.z ); - m_max.x = fmaxf( lhs.m_max.x, rhs.m_max.x ); - m_max.y = fmaxf( lhs.m_max.y, rhs.m_max.y ); - m_max.z = fmaxf( lhs.m_max.z, rhs.m_max.z ); - } - - void reset( void ) - { - m_min = make_hiprtFloat3( FLT_MAX, FLT_MAX, FLT_MAX ); - m_max = make_hiprtFloat3( -FLT_MAX, -FLT_MAX, -FLT_MAX ); - } - - Aabb& grow( const hiprtFloat3& p ) - { - m_min.x = fminf( m_min.x, p.x ); - m_min.y = fminf( m_min.y, p.y ); - m_min.z = fminf( m_min.z, p.z ); - m_max.x = fmaxf( m_max.x, p.x ); - m_max.y = fmaxf( m_max.y, p.y ); - m_max.z = fmaxf( m_max.z, p.z ); - return *this; - } - - Aabb& grow( const Aabb& rhs ) - { - m_min.x = fminf( m_min.x, rhs.m_min.x ); - m_min.y = fminf( m_min.y, rhs.m_min.y ); - m_min.z = fminf( m_min.z, rhs.m_min.z ); - m_max.x = fmaxf( m_max.x, rhs.m_max.x ); - m_max.y = fmaxf( m_max.y, rhs.m_max.y ); - m_max.z = fmaxf( m_max.z, rhs.m_max.z ); - return *this; - } - - hiprtFloat3 center() const - { - hiprtFloat3 c; - c.x = ( m_max.x + m_min.x ) * 0.5f; - c.y = ( m_max.y + m_min.y ) * 0.5f; - c.z = ( m_max.z + m_min.z ) * 0.5f; - return c; - } - - hiprtFloat3 extent() const - { - hiprtFloat3 e; - e.x = m_max.x - m_min.x; - e.y = m_max.y - m_min.y; - e.z = m_max.z - m_min.z; - return e; - } - - float area() const - { - hiprtFloat3 ext = extent(); - return 2 * ( ext.x * ext.y + ext.x * ext.z + ext.y * ext.z ); - } - - hiprtFloat3 m_min; - hiprtFloat3 m_max; -}; - -struct QueueEntry -{ - int m_nodeIndex; - int m_begin; - int m_end; - Aabb m_box; - QueueEntry( int nodeIndex, int begin, int end, const Aabb& box ) - : m_nodeIndex( nodeIndex ), m_begin( begin ), m_end( end ), m_box( box ) - { - } -}; - -class BvhBuilder -{ - public: - BvhBuilder( void ) = delete; - BvhBuilder& operator=( const BvhBuilder& ) = delete; - - static void build( uint32_t nPrims, const std::vector& primBoxes, std::vector& nodes ) - { - assert( nPrims >= 2 ); - std::vector rightBoxes( nPrims ); - std::vector tmpIndices( nPrims ); - std::vector leftIndices( nPrims ); - - std::vector indices[3]; - for ( int k = 0; k < 3; ++k ) - { - indices[k].resize( nPrims ); - for ( int i = 0; i < nPrims; ++i ) - indices[k][i] = i; - std::sort( indices[k].begin(), indices[k].end(), [&]( int a, int b ) { - hiprtFloat3 ca = primBoxes[a].center(); - hiprtFloat3 cb = primBoxes[b].center(); - return reinterpret_cast( &ca )[k] > reinterpret_cast( &cb )[k]; - } ); - } - - Aabb box; - for ( int i = 0; i < nPrims; ++i ) - box.grow( primBoxes[i] ); - - std::queue queue; - queue.push( QueueEntry( 0, 0, nPrims, box ) ); - nodes.push_back( hiprtBvhNode() ); - while ( !queue.empty() ) - { - int nodeIndex = queue.front().m_nodeIndex; - int begin = queue.front().m_begin; - int end = queue.front().m_end; - Aabb box = queue.front().m_box; - queue.pop(); - - float minCost = FLT_MAX; - int minAxis = 0; - int minIndex = 0; - Aabb minLeftBox, minRightBox; - for ( int k = 0; k < 3; ++k ) - { - - rightBoxes[end - 1] = primBoxes[indices[k][end - 1]]; - for ( int i = end - 2; i >= begin; --i ) - rightBoxes[i] = Aabb( primBoxes[indices[k][i]], rightBoxes[i + 1] ); - - Aabb leftBox, rightBox; - for ( int i = begin; i < end - 1; ++i ) - { - int leftCount = ( i + 1 ) - begin; - int rightCount = end - ( i + 1 ); - leftBox.grow( primBoxes[indices[k][i]] ); - rightBox = rightBoxes[i + 1]; - float cost = leftBox.area() * leftCount + rightBox.area() * rightCount; - if ( cost < minCost ) - { - minCost = cost; - minIndex = i + 1; - minAxis = k; - minLeftBox = leftBox; - minRightBox = rightBox; - } - assert( leftBox.area() <= box.area() ); - assert( rightBox.area() <= box.area() ); - } - } - - assert( minIndex > begin ); - assert( end > minIndex ); - - memset( leftIndices.data(), 0, nPrims * sizeof( int ) ); - for ( int i = begin; i < minIndex; ++i ) - { - int index = indices[minAxis][i]; - leftIndices[index] = 1; - } - - for ( int j = 0; j < 3; ++j ) - { - if ( j != minAxis ) - { - int k = begin; - int l = minIndex; - for ( int i = begin; i < end; ++i ) - { - int index = indices[j][i]; - if ( leftIndices[indices[j][i]] ) - tmpIndices[k++] = index; - else - tmpIndices[l++] = index; - } - assert( k == minIndex ); - assert( l == end ); - memcpy( &indices[j][begin], &tmpIndices[begin], ( end - begin ) * sizeof( int ) ); - } - } - - nodes[nodeIndex].boundingBoxMin = box.m_min; - nodes[nodeIndex].boundingBoxMax = box.m_max; - nodes[nodeIndex].childIndices[2] = hiprtInvalidValue; - nodes[nodeIndex].childIndices[3] = hiprtInvalidValue; - - if ( minIndex - begin == 1 ) - { - nodes[nodeIndex].childIndices[0] = indices[minAxis][begin]; - nodes[nodeIndex].childNodeTypes[0] = hiprtBvhNodeTypeLeaf; - } - else - { - nodes[nodeIndex].childIndices[0] = static_cast( nodes.size() ); - nodes[nodeIndex].childNodeTypes[0] = hiprtBvhNodeTypeInternal; - queue.push( QueueEntry( nodes[nodeIndex].childIndices[0], begin, minIndex, minLeftBox ) ); - nodes.push_back( hiprtBvhNode() ); - } - - if ( end - minIndex == 1 ) - { - nodes[nodeIndex].childIndices[1] = indices[minAxis][minIndex]; - nodes[nodeIndex].childNodeTypes[1] = hiprtBvhNodeTypeLeaf; - } - else - { - nodes[nodeIndex].childIndices[1] = static_cast( nodes.size() ); - nodes[nodeIndex].childNodeTypes[1] = hiprtBvhNodeTypeInternal; - queue.push( QueueEntry( nodes[nodeIndex].childIndices[1], minIndex, end, minRightBox ) ); - nodes.push_back( hiprtBvhNode() ); - } - } - } -}; +// +// Copyright (c) 2021-2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#pragma once +#include +#include +#include + +struct QueueEntry +{ + int m_nodeIndex; + int m_begin; + int m_end; + Aabb m_box; + QueueEntry( int nodeIndex, int begin, int end, const Aabb& box ) + : m_nodeIndex( nodeIndex ), m_begin( begin ), m_end( end ), m_box( box ) + { + } +}; + +class BvhBuilder +{ + public: + BvhBuilder( void ) = delete; + BvhBuilder& operator=( const BvhBuilder& ) = delete; + + static void build( uint32_t nPrims, const std::vector& primBoxes, std::vector& nodes ) + { + assert( nPrims >= 2 ); + std::vector rightBoxes( nPrims ); + std::vector tmpIndices( nPrims ); + std::vector leftIndices( nPrims ); + + std::vector indices[3]; + for ( int k = 0; k < 3; ++k ) + { + indices[k].resize( nPrims ); + for ( int i = 0; i < nPrims; ++i ) + indices[k][i] = i; + std::sort( indices[k].begin(), indices[k].end(), [&]( int a, int b ) { + hiprtFloat3 ca = primBoxes[a].center(); + hiprtFloat3 cb = primBoxes[b].center(); + return reinterpret_cast( &ca )[k] > reinterpret_cast( &cb )[k]; + } ); + } + + Aabb box; + for ( int i = 0; i < nPrims; ++i ) + box.grow( primBoxes[i] ); + + std::queue queue; + queue.push( QueueEntry( 0, 0, nPrims, box ) ); + nodes.push_back( hiprtBvhNode() ); + while ( !queue.empty() ) + { + int nodeIndex = queue.front().m_nodeIndex; + int begin = queue.front().m_begin; + int end = queue.front().m_end; + Aabb box = queue.front().m_box; + queue.pop(); + + float minCost = FLT_MAX; + int minAxis = 0; + int minIndex = 0; + Aabb minLeftBox, minRightBox; + for ( int k = 0; k < 3; ++k ) + { + + rightBoxes[end - 1] = primBoxes[indices[k][end - 1]]; + for ( int i = end - 2; i >= begin; --i ) + rightBoxes[i] = Aabb( primBoxes[indices[k][i]], rightBoxes[i + 1] ); + + Aabb leftBox, rightBox; + for ( int i = begin; i < end - 1; ++i ) + { + int leftCount = ( i + 1 ) - begin; + int rightCount = end - ( i + 1 ); + leftBox.grow( primBoxes[indices[k][i]] ); + rightBox = rightBoxes[i + 1]; + float cost = leftBox.area() * leftCount + rightBox.area() * rightCount; + if ( cost < minCost ) + { + minCost = cost; + minIndex = i + 1; + minAxis = k; + minLeftBox = leftBox; + minRightBox = rightBox; + } + assert( leftBox.area() <= box.area() ); + assert( rightBox.area() <= box.area() ); + } + } + + assert( minIndex > begin ); + assert( end > minIndex ); + + memset( leftIndices.data(), 0, nPrims * sizeof( int ) ); + for ( int i = begin; i < minIndex; ++i ) + { + int index = indices[minAxis][i]; + leftIndices[index] = 1; + } + + for ( int j = 0; j < 3; ++j ) + { + if ( j != minAxis ) + { + int k = begin; + int l = minIndex; + for ( int i = begin; i < end; ++i ) + { + int index = indices[j][i]; + if ( leftIndices[indices[j][i]] ) + tmpIndices[k++] = index; + else + tmpIndices[l++] = index; + } + assert( k == minIndex ); + assert( l == end ); + memcpy( &indices[j][begin], &tmpIndices[begin], ( end - begin ) * sizeof( int ) ); + } + } + + nodes[nodeIndex].boundingBoxMin = box.m_min; + nodes[nodeIndex].boundingBoxMax = box.m_max; + nodes[nodeIndex].childIndices[2] = hiprtInvalidValue; + nodes[nodeIndex].childIndices[3] = hiprtInvalidValue; + + if ( minIndex - begin == 1 ) + { + nodes[nodeIndex].childIndices[0] = indices[minAxis][begin]; + nodes[nodeIndex].childNodeTypes[0] = hiprtBvhNodeTypeLeaf; + } + else + { + nodes[nodeIndex].childIndices[0] = static_cast( nodes.size() ); + nodes[nodeIndex].childNodeTypes[0] = hiprtBvhNodeTypeInternal; + queue.push( QueueEntry( nodes[nodeIndex].childIndices[0], begin, minIndex, minLeftBox ) ); + nodes.push_back( hiprtBvhNode() ); + } + + if ( end - minIndex == 1 ) + { + nodes[nodeIndex].childIndices[1] = indices[minAxis][minIndex]; + nodes[nodeIndex].childNodeTypes[1] = hiprtBvhNodeTypeLeaf; + } + else + { + nodes[nodeIndex].childIndices[1] = static_cast( nodes.size() ); + nodes[nodeIndex].childNodeTypes[1] = hiprtBvhNodeTypeInternal; + queue.push( QueueEntry( nodes[nodeIndex].childIndices[1], minIndex, end, minRightBox ) ); + nodes.push_back( hiprtBvhNode() ); + } + } + } +}; diff --git a/tutorials/common/Common.h b/tutorials/common/Common.h index 1f1b58a..7ad3906 100644 --- a/tutorials/common/Common.h +++ b/tutorials/common/Common.h @@ -1,13 +1,39 @@ +// +// Copyright (c) 2021-2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + #pragma once #if ( defined( __CUDACC__ ) || defined( __HIPCC__ ) ) #define __KERNELCC__ #endif +#include #if !defined( __KERNELCC__ ) #include #endif +constexpr float FltMin = 1.175494351e-38f; +constexpr float FltMax = 3.402823466e+38f; + #if !defined( __KERNELCC__ ) #define HOST #define DEVICE @@ -41,10 +67,18 @@ #define INLINE inline #endif +struct float4x4 +{ + union + { + float4 r[4]; + float e[4][4]; + }; +}; + #define RT_MIN( a, b ) ( ( ( b ) < ( a ) ) ? ( b ) : ( a ) ) #define RT_MAX( a, b ) ( ( ( b ) > ( a ) ) ? ( b ) : ( a ) ) -//#if !defined( __KERNELCC__ ) HOST_DEVICE INLINE int2 make_int2( const float2 a ) { return make_int2( (int)a.x, (int)a.y ); } HOST_DEVICE INLINE int2 make_int2( const int3& a ) { return make_int2( a.x, a.y ); } @@ -53,7 +87,6 @@ HOST_DEVICE INLINE int2 make_int2( const int4& a ) { return make_int2( a.x, a.y HOST_DEVICE INLINE int2 make_int2( const int c ) { return make_int2( c, c ); } - HOST_DEVICE INLINE int2 operator+( const int2& a, const int2& b ) { return make_int2( a.x + b.x, a.y + b.y ); } HOST_DEVICE INLINE int2 operator-( const int2& a, const int2& b ) { return make_int2( a.x - b.x, a.y - b.y ); } @@ -144,25 +177,13 @@ HOST_DEVICE INLINE int3 make_int3( const int2& a, const int c ) { return make_in HOST_DEVICE INLINE int3 make_int3( const int c ) { return make_int3( c, c, c ); } -HOST_DEVICE INLINE int3 operator+( const int3& a, const int3& b ) -{ - return make_int3( a.x + b.x, a.y + b.y, a.z + b.z ); -} +HOST_DEVICE INLINE int3 operator+( const int3& a, const int3& b ) { return make_int3( a.x + b.x, a.y + b.y, a.z + b.z ); } -HOST_DEVICE INLINE int3 operator-( const int3& a, const int3& b ) -{ - return make_int3( a.x - b.x, a.y - b.y, a.z - b.z ); -} +HOST_DEVICE INLINE int3 operator-( const int3& a, const int3& b ) { return make_int3( a.x - b.x, a.y - b.y, a.z - b.z ); } -HOST_DEVICE INLINE int3 operator*( const int3& a, const int3& b ) -{ - return make_int3( a.x * b.x, a.y * b.y, a.z * b.z ); -} +HOST_DEVICE INLINE int3 operator*( const int3& a, const int3& b ) { return make_int3( a.x * b.x, a.y * b.y, a.z * b.z ); } -HOST_DEVICE INLINE int3 operator/( const int3& a, const int3& b ) -{ - return make_int3( a.x / b.x, a.y / b.y, a.z / b.z ); -} +HOST_DEVICE INLINE int3 operator/( const int3& a, const int3& b ) { return make_int3( a.x / b.x, a.y / b.y, a.z / b.z ); } HOST_DEVICE INLINE int3& operator+=( int3& a, const int3& b ) { @@ -248,10 +269,7 @@ HOST_DEVICE INLINE int3 operator/( const int c, const int3& a ) { return make_in HOST_DEVICE INLINE int4 make_int4( const float4& a ) { return make_int4( (int)a.x, (int)a.y, (int)a.z, (int)a.w ); } -HOST_DEVICE INLINE int4 make_int4( const int2& a, const int c0, const int c1 ) -{ - return make_int4( a.x, a.y, c0, c1 ); -} +HOST_DEVICE INLINE int4 make_int4( const int2& a, const int c0, const int c1 ) { return make_int4( a.x, a.y, c0, c1 ); } HOST_DEVICE INLINE int4 make_int4( const int3& a, const int c ) { return make_int4( a.x, a.y, a.z, c ); } @@ -351,46 +369,21 @@ HOST_DEVICE INLINE int4& operator/=( int4& a, const int c ) HOST_DEVICE INLINE int4 operator-( const int4& a ) { return make_int4( -a.x, -a.y, -a.z, -a.w ); } -HOST_DEVICE INLINE int4 operator+( const int4& a, const int c ) -{ - return make_int4( c + a.x, c + a.y, c + a.z, c + a.w ); -} +HOST_DEVICE INLINE int4 operator+( const int4& a, const int c ) { return make_int4( c + a.x, c + a.y, c + a.z, c + a.w ); } -HOST_DEVICE INLINE int4 operator+( const int c, const int4& a ) -{ - return make_int4( c + a.x, c + a.y, c + a.z, c + a.w ); -} +HOST_DEVICE INLINE int4 operator+( const int c, const int4& a ) { return make_int4( c + a.x, c + a.y, c + a.z, c + a.w ); } -HOST_DEVICE INLINE int4 operator-( const int4& a, const int c ) -{ - return make_int4( a.x - c, a.y - c, a.z - c, a.w - c ); -} +HOST_DEVICE INLINE int4 operator-( const int4& a, const int c ) { return make_int4( a.x - c, a.y - c, a.z - c, a.w - c ); } -HOST_DEVICE INLINE int4 operator-( const int c, const int4& a ) -{ - return make_int4( c - a.x, c - a.y, c - a.z, c - a.w ); -} +HOST_DEVICE INLINE int4 operator-( const int c, const int4& a ) { return make_int4( c - a.x, c - a.y, c - a.z, c - a.w ); } -HOST_DEVICE INLINE int4 operator*( const int4& a, const int c ) -{ - return make_int4( c * a.x, c * a.y, c * a.z, c * a.w ); -} - -HOST_DEVICE INLINE int4 operator*( const int c, const int4& a ) -{ - return make_int4( c * a.x, c * a.y, c * a.z, c * a.w ); -} +HOST_DEVICE INLINE int4 operator*( const int4& a, const int c ) { return make_int4( c * a.x, c * a.y, c * a.z, c * a.w ); } -HOST_DEVICE INLINE int4 operator/( const int4& a, const int c ) -{ - return make_int4( a.x / c, a.y / c, a.z / c, a.w / c ); -} +HOST_DEVICE INLINE int4 operator*( const int c, const int4& a ) { return make_int4( c * a.x, c * a.y, c * a.z, c * a.w ); } -HOST_DEVICE INLINE int4 operator/( const int c, const int4& a ) -{ - return make_int4( c / a.x, c / a.y, c / a.z, c / a.w ); -} +HOST_DEVICE INLINE int4 operator/( const int4& a, const int c ) { return make_int4( a.x / c, a.y / c, a.z / c, a.w / c ); } +HOST_DEVICE INLINE int4 operator/( const int c, const int4& a ) { return make_int4( c / a.x, c / a.y, c / a.z, c / a.w ); } HOST_DEVICE INLINE int2 max( const int2& a, const int2& b ) { @@ -544,25 +537,13 @@ HOST_DEVICE INLINE float2 make_float2( const float4& a ) { return make_float2( a HOST_DEVICE INLINE float2 make_float2( const float c ) { return make_float2( c, c ); } -HOST_DEVICE INLINE float2 operator+( const float2& a, const float2& b ) -{ - return make_float2( a.x + b.x, a.y + b.y ); -} +HOST_DEVICE INLINE float2 operator+( const float2& a, const float2& b ) { return make_float2( a.x + b.x, a.y + b.y ); } -HOST_DEVICE INLINE float2 operator-( const float2& a, const float2& b ) -{ - return make_float2( a.x - b.x, a.y - b.y ); -} +HOST_DEVICE INLINE float2 operator-( const float2& a, const float2& b ) { return make_float2( a.x - b.x, a.y - b.y ); } -HOST_DEVICE INLINE float2 operator*( const float2& a, const float2& b ) -{ - return make_float2( a.x * b.x, a.y * b.y ); -} +HOST_DEVICE INLINE float2 operator*( const float2& a, const float2& b ) { return make_float2( a.x * b.x, a.y * b.y ); } -HOST_DEVICE INLINE float2 operator/( const float2& a, const float2& b ) -{ - return make_float2( a.x / b.x, a.y / b.y ); -} +HOST_DEVICE INLINE float2 operator/( const float2& a, const float2& b ) { return make_float2( a.x / b.x, a.y / b.y ); } HOST_DEVICE INLINE float2& operator+=( float2& a, const float2& b ) { @@ -732,50 +713,23 @@ HOST_DEVICE INLINE float3& operator/=( float3& a, const float c ) HOST_DEVICE INLINE float3 operator-( const float3& a ) { return make_float3( -a.x, -a.y, -a.z ); } -HOST_DEVICE INLINE float3 operator+( const float3& a, const float c ) -{ - return make_float3( c + a.x, c + a.y, c + a.z ); -} +HOST_DEVICE INLINE float3 operator+( const float3& a, const float c ) { return make_float3( c + a.x, c + a.y, c + a.z ); } -HOST_DEVICE INLINE float3 operator+( const float c, const float3& a ) -{ - return make_float3( c + a.x, c + a.y, c + a.z ); -} +HOST_DEVICE INLINE float3 operator+( const float c, const float3& a ) { return make_float3( c + a.x, c + a.y, c + a.z ); } -HOST_DEVICE INLINE float3 operator-( const float3& a, const float c ) -{ - return make_float3( a.x - c, a.y - c, a.z - c ); -} +HOST_DEVICE INLINE float3 operator-( const float3& a, const float c ) { return make_float3( a.x - c, a.y - c, a.z - c ); } -HOST_DEVICE INLINE float3 operator-( const float c, const float3& a ) -{ - return make_float3( c - a.x, c - a.y, c - a.z ); -} +HOST_DEVICE INLINE float3 operator-( const float c, const float3& a ) { return make_float3( c - a.x, c - a.y, c - a.z ); } -HOST_DEVICE INLINE float3 operator*( const float3& a, const float c ) -{ - return make_float3( c * a.x, c * a.y, c * a.z ); -} +HOST_DEVICE INLINE float3 operator*( const float3& a, const float c ) { return make_float3( c * a.x, c * a.y, c * a.z ); } -HOST_DEVICE INLINE float3 operator*( const float c, const float3& a ) -{ - return make_float3( c * a.x, c * a.y, c * a.z ); -} +HOST_DEVICE INLINE float3 operator*( const float c, const float3& a ) { return make_float3( c * a.x, c * a.y, c * a.z ); } -HOST_DEVICE INLINE float3 operator/( const float3& a, const float c ) -{ - return make_float3( a.x / c, a.y / c, a.z / c ); -} +HOST_DEVICE INLINE float3 operator/( const float3& a, const float c ) { return make_float3( a.x / c, a.y / c, a.z / c ); } -HOST_DEVICE INLINE float3 operator/( const float c, const float3& a ) -{ - return make_float3( c / a.x, c / a.y, c / a.z ); -} +HOST_DEVICE INLINE float3 operator/( const float c, const float3& a ) { return make_float3( c / a.x, c / a.y, c / a.z ); } -HOST_DEVICE INLINE float4 make_float4( const int4& a ) -{ - return make_float4( (float)a.x, (float)a.y, (float)a.z, (float)a.w ); -} +HOST_DEVICE INLINE float4 make_float4( const int4& a ) { return make_float4( (float)a.x, (float)a.y, (float)a.z, (float)a.w ); } HOST_DEVICE INLINE float4 make_float4( const float2& a, const float c0, const float c1 ) { @@ -919,7 +873,6 @@ HOST_DEVICE INLINE float4 operator/( const float c, const float4& a ) { return make_float4( c / a.x, c / a.y, c / a.z, c / a.w ); } -//#endif HOST_DEVICE INLINE float3 cross( const float3& a, const float3& b ) { @@ -928,9 +881,55 @@ HOST_DEVICE INLINE float3 cross( const float3& a, const float3& b ) HOST_DEVICE INLINE float dot( const float3& a, const float3& b ) { return a.x * b.x + a.y * b.y + a.z * b.z; } +HOST_DEVICE INLINE float dot( const float4& a, const float4& b ) { return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; } + HOST_DEVICE INLINE float3 normalize( const float3& a ) { return a / sqrtf( dot( a, a ) ); } -HOST_DEVICE INLINE const float4 cross3( const float3 aa, const float3 bb ) +HOST_DEVICE INLINE float4 operator*( const float4x4& m, const float4& v ) +{ + return make_float4( dot( m.r[0], v ), dot( m.r[1], v ), dot( m.r[2], v ), dot( m.r[3], v ) ); +} + +HOST_DEVICE INLINE float4x4 operator*( const float4x4& a, const float4x4& b ) +{ + float4x4 m; + for ( int r = 0; r < 4; ++r ) + { + for ( int c = 0; c < 4; ++c ) + { + m.e[r][c] = 0.0f; + for ( int k = 0; k < 4; ++k ) + m.e[r][c] += a.e[r][k] * b.e[k][c]; + } + } + + return m; +} + +HOST_DEVICE INLINE float4x4 Perspective( float y_fov, float aspect, float n, float f ) { - return make_float4( aa.y * bb.z - aa.z * bb.y, aa.z * bb.x - aa.x * bb.z, aa.x * bb.y - aa.y * bb.x, 0 ); + float a = 1.0f / tanf( y_fov / 2.0f ); + + float4x4 m; + m.r[0] = make_float4( a / aspect, 0.0f, 0.0f, 0.0f ); + m.r[1] = make_float4( 0.0f, a, 0.0f, 0.0f ); + m.r[2] = make_float4( 0.0f, 0.0f, f / ( f - n ), n * f / ( n - f ) ); + m.r[3] = make_float4( 0.0f, 0.0f, 1.0f, 0.0f ); + + return m; +} + +HOST_DEVICE INLINE float4x4 LookAt( const float3& eye, const float3& at, const float3& up ) +{ + float3 f = normalize( at - eye ); + float3 s = normalize( cross( up, f ) ); + float3 t = cross( f, s ); + + float4x4 m; + m.r[0] = make_float4( s, -dot( s, eye ) ); + m.r[1] = make_float4( t, -dot( t, eye ) ); + m.r[2] = make_float4( f, -dot( f, eye ) ); + m.r[3] = make_float4( 0.0f, 0.0f, 0.0f, 1.0f ); + + return m; } diff --git a/tutorials/common/CornellBox.h b/tutorials/common/CornellBox.h index 71aeda7..15239d5 100644 --- a/tutorials/common/CornellBox.h +++ b/tutorials/common/CornellBox.h @@ -1,144 +1,144 @@ #pragma once -#include #include +#include -static constexpr int CornellBoxTriangleCount = 32; -static constexpr int CornellBoxMaterialCount = 4; +constexpr int CornellBoxTriangleCount = 32; +constexpr int CornellBoxMaterialCount = 4; const static std::array cornellBoxVertices = { { // Floor -- white lambert - { 0.0f, 0.0f, 0.0f }, - { 0.0f, 0.0f, 559.2f }, - { 556.0f, 0.0f, 559.2f }, - { 0.0f, 0.0f, 0.0f }, - { 556.0f, 0.0f, 559.2f }, - { 556.0f, 0.0f, 0.0f }, - - // Ceiling -- white lambert - { 0.0f, 548.8f, 0.0f }, - { 556.0f, 548.8f, 0.0f }, - { 556.0f, 548.8f, 559.2f }, - - { 0.0f, 548.8f, 0.0f }, - { 556.0f, 548.8f, 559.2f }, - { 0.0f, 548.8f, 559.2f }, - - // Back wall -- white lambert - { 0.0f, 0.0f, 559.2f }, - { 0.0f, 548.8f, 559.2f }, - { 556.0f, 548.8f, 559.2f }, - - { 0.0f, 0.0f, 559.2f }, - { 556.0f, 548.8f, 559.2f }, - { 556.0f, 0.0f, 559.2f }, - - // Right wall -- green lambert - { 0.0f, 0.0f, 0.0f }, - { 0.0f, 548.8f, 0.0f }, - { 0.0f, 548.8f, 559.2f }, - - { 0.0f, 0.0f, 0.0f }, - { 0.0f, 548.8f, 559.2f }, - { 0.0f, 0.0f, 559.2f }, - - // Left wall -- red lambert - { 556.0f, 0.0f, 0.0f }, - { 556.0f, 0.0f, 559.2f }, - { 556.0f, 548.8f, 559.2f }, - - { 556.0f, 0.0f, 0.0f }, - { 556.0f, 548.8f, 559.2f }, - { 556.0f, 548.8f, 0.0f }, - - // Short block -- white lambert - { 130.0f, 165.0f, 65.0f }, - { 82.0f, 165.0f, 225.0f }, - { 242.0f, 165.0f, 274.0f }, - - { 130.0f, 165.0f, 65.0f }, - { 242.0f, 165.0f, 274.0f }, - { 290.0f, 165.0f, 114.0f }, - - { 290.0f, 0.0f, 114.0f }, - { 290.0f, 165.0f, 114.0f }, - { 240.0f, 165.0f, 272.0f }, - - { 290.0f, 0.0f, 114.0f }, - { 240.0f, 165.0f, 272.0f }, - { 240.0f, 0.0f, 272.0f }, - - { 130.0f, 0.0f, 65.0f }, - { 130.0f, 165.0f, 65.0f }, - { 290.0f, 165.0f, 114.0f }, - - { 130.0f, 0.0f, 65.0f }, - { 290.0f, 165.0f, 114.0f }, - { 290.0f, 0.0f, 114.0f }, - - { 82.0f, 0.0f, 225.0f }, - { 82.0f, 165.0f, 225.0f }, - { 130.0f, 165.0f, 65.0f }, - - { 82.0f, 0.0f, 225.0f }, - { 130.0f, 165.0f, 65.0f }, - { 130.0f, 0.0f, 65.0f }, - - { 240.0f, 0.0f, 272.0f }, - { 240.0f, 165.0f, 272.0f }, - { 82.0f, 165.0f, 225.0f }, - - { 240.0f, 0.0f, 272.0f }, - { 82.0f, 165.0f, 225.0f }, - { 82.0f, 0.0f, 225.0f }, - - // Tall block -- white lambert - { 423.0f, 330.0f, 247.0f }, - { 265.0f, 330.0f, 296.0f }, - { 314.0f, 330.0f, 455.0f }, - - { 423.0f, 330.0f, 247.0f }, - { 314.0f, 330.0f, 455.0f }, - { 472.0f, 330.0f, 406.0f }, - - { 423.0f, 0.0f, 247.0f }, - { 423.0f, 330.0f, 247.0f }, - { 472.0f, 330.0f, 406.0f }, - - { 423.0f, 0.0f, 247.0f }, - { 472.0f, 330.0f, 406.0f }, - { 472.0f, 0.0f, 406.0f }, - - { 472.0f, 0.0f, 406.0f }, - { 472.0f, 330.0f, 406.0f }, - { 314.0f, 330.0f, 456.0f }, - - { 472.0f, 0.0f, 406.0f }, - { 314.0f, 330.0f, 456.0f }, - { 314.0f, 0.0f, 456.0f }, - - { 314.0f, 0.0f, 456.0f }, - { 314.0f, 330.0f, 456.0f }, - { 265.0f, 330.0f, 296.0f }, - - { 314.0f, 0.0f, 456.0f }, - { 265.0f, 330.0f, 296.0f }, - { 265.0f, 0.0f, 296.0f }, - - { 265.0f, 0.0f, 296.0f }, - { 265.0f, 330.0f, 296.0f }, - { 423.0f, 330.0f, 247.0f }, - - { 265.0f, 0.0f, 296.0f }, - { 423.0f, 330.0f, 247.0f }, - { 423.0f, 0.0f, 247.0f }, - - // Ceiling light -- emmissive - { 343.0f, 548.6f, 227.0f }, - { 213.0f, 548.6f, 227.0f }, - { 213.0f, 548.6f, 332.0f }, - - { 343.0f, 548.6f, 227.0f }, - { 213.0f, 548.6f, 332.0f }, - { 343.0f, 548.6f, 332.0f } } }; + { 0.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 559.2f }, + { 556.0f, 0.0f, 559.2f }, + { 0.0f, 0.0f, 0.0f }, + { 556.0f, 0.0f, 559.2f }, + { 556.0f, 0.0f, 0.0f }, + + // Ceiling -- white lambert + { 0.0f, 548.8f, 0.0f }, + { 556.0f, 548.8f, 0.0f }, + { 556.0f, 548.8f, 559.2f }, + + { 0.0f, 548.8f, 0.0f }, + { 556.0f, 548.8f, 559.2f }, + { 0.0f, 548.8f, 559.2f }, + + // Back wall -- white lambert + { 0.0f, 0.0f, 559.2f }, + { 0.0f, 548.8f, 559.2f }, + { 556.0f, 548.8f, 559.2f }, + + { 0.0f, 0.0f, 559.2f }, + { 556.0f, 548.8f, 559.2f }, + { 556.0f, 0.0f, 559.2f }, + + // Right wall -- green lambert + { 0.0f, 0.0f, 0.0f }, + { 0.0f, 548.8f, 0.0f }, + { 0.0f, 548.8f, 559.2f }, + + { 0.0f, 0.0f, 0.0f }, + { 0.0f, 548.8f, 559.2f }, + { 0.0f, 0.0f, 559.2f }, + + // Left wall -- red lambert + { 556.0f, 0.0f, 0.0f }, + { 556.0f, 0.0f, 559.2f }, + { 556.0f, 548.8f, 559.2f }, + + { 556.0f, 0.0f, 0.0f }, + { 556.0f, 548.8f, 559.2f }, + { 556.0f, 548.8f, 0.0f }, + + // Short block -- white lambert + { 130.0f, 165.0f, 65.0f }, + { 82.0f, 165.0f, 225.0f }, + { 242.0f, 165.0f, 274.0f }, + + { 130.0f, 165.0f, 65.0f }, + { 242.0f, 165.0f, 274.0f }, + { 290.0f, 165.0f, 114.0f }, + + { 290.0f, 0.0f, 114.0f }, + { 290.0f, 165.0f, 114.0f }, + { 240.0f, 165.0f, 272.0f }, + + { 290.0f, 0.0f, 114.0f }, + { 240.0f, 165.0f, 272.0f }, + { 240.0f, 0.0f, 272.0f }, + + { 130.0f, 0.0f, 65.0f }, + { 130.0f, 165.0f, 65.0f }, + { 290.0f, 165.0f, 114.0f }, + + { 130.0f, 0.0f, 65.0f }, + { 290.0f, 165.0f, 114.0f }, + { 290.0f, 0.0f, 114.0f }, + + { 82.0f, 0.0f, 225.0f }, + { 82.0f, 165.0f, 225.0f }, + { 130.0f, 165.0f, 65.0f }, + + { 82.0f, 0.0f, 225.0f }, + { 130.0f, 165.0f, 65.0f }, + { 130.0f, 0.0f, 65.0f }, + + { 240.0f, 0.0f, 272.0f }, + { 240.0f, 165.0f, 272.0f }, + { 82.0f, 165.0f, 225.0f }, + + { 240.0f, 0.0f, 272.0f }, + { 82.0f, 165.0f, 225.0f }, + { 82.0f, 0.0f, 225.0f }, + + // Tall block -- white lambert + { 423.0f, 330.0f, 247.0f }, + { 265.0f, 330.0f, 296.0f }, + { 314.0f, 330.0f, 455.0f }, + + { 423.0f, 330.0f, 247.0f }, + { 314.0f, 330.0f, 455.0f }, + { 472.0f, 330.0f, 406.0f }, + + { 423.0f, 0.0f, 247.0f }, + { 423.0f, 330.0f, 247.0f }, + { 472.0f, 330.0f, 406.0f }, + + { 423.0f, 0.0f, 247.0f }, + { 472.0f, 330.0f, 406.0f }, + { 472.0f, 0.0f, 406.0f }, + + { 472.0f, 0.0f, 406.0f }, + { 472.0f, 330.0f, 406.0f }, + { 314.0f, 330.0f, 456.0f }, + + { 472.0f, 0.0f, 406.0f }, + { 314.0f, 330.0f, 456.0f }, + { 314.0f, 0.0f, 456.0f }, + + { 314.0f, 0.0f, 456.0f }, + { 314.0f, 330.0f, 456.0f }, + { 265.0f, 330.0f, 296.0f }, + + { 314.0f, 0.0f, 456.0f }, + { 265.0f, 330.0f, 296.0f }, + { 265.0f, 0.0f, 296.0f }, + + { 265.0f, 0.0f, 296.0f }, + { 265.0f, 330.0f, 296.0f }, + { 423.0f, 330.0f, 247.0f }, + + { 265.0f, 0.0f, 296.0f }, + { 423.0f, 330.0f, 247.0f }, + { 423.0f, 0.0f, 247.0f }, + + // Ceiling light -- emmissive + { 343.0f, 548.6f, 227.0f }, + { 213.0f, 548.6f, 227.0f }, + { 213.0f, 548.6f, 332.0f }, + + { 343.0f, 548.6f, 227.0f }, + { 213.0f, 548.6f, 332.0f }, + { 343.0f, 548.6f, 332.0f } } }; static std::array cornellBoxMatIndices = { { 0, 0, // Floor -- white lambert diff --git a/tutorials/01_geom_intersection/TestKernel.h b/tutorials/common/FluidSimulation.h similarity index 57% rename from tutorials/01_geom_intersection/TestKernel.h rename to tutorials/common/FluidSimulation.h index 758d175..710d9b6 100644 --- a/tutorials/01_geom_intersection/TestKernel.h +++ b/tutorials/common/FluidSimulation.h @@ -1,45 +1,49 @@ -// -// Copyright (c) 2021-2022 Advanced Micro Devices, Inc. All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -extern "C" __global__ void MeshIntersectionKernel(hiprtGeometry geom, unsigned char* gDst, int2 cRes) -{ - const int gIdx = blockIdx.x * blockDim.x + threadIdx.x; - const int gIdy = blockIdx.y * blockDim.y + threadIdx.y; - - hiprtRay ray; - float3 o = { gIdx / (float)cRes.x, gIdy / (float)cRes.y, -1.0f}; - float3 d = { 0.0f, 0.0f, 1.0f}; - ray.origin = o; - ray.direction = d; - ray.maxT = 1000.f; - - hiprtGeomTraversalClosest tr(geom, ray); - hiprtHit hit = tr.getNextHit(); - bool hasHit = hit.primID != hiprtInvalidValue; - - int dstIdx = gIdx + gIdy * cRes.x; - gDst[ dstIdx * 4 + 0 ] = hasHit ? ((float)gIdx / cRes.x) * 255 : 0; - gDst[ dstIdx * 4 + 1 ] = hasHit ? ((float)gIdy / cRes.y) * 255 : 0; - gDst[ dstIdx * 4 + 2 ] = 0; - gDst[ dstIdx * 4 + 3 ] = 255; -} - +// +// Copyright (c) 2021-2023 Advanced Micro Devices, Inc. All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#pragma once +#include + +struct Simulation +{ + float m_smoothRadius; + float m_pressureStiffness; + float m_restDensity; + float m_densityCoef; + float m_pressureGradCoef; + float m_viscosityLaplaceCoef; + float m_wallStiffness; + u32 m_particleCount; + float4 m_planes[6]; +}; + +struct PerFrame +{ + float m_timeStep; + float3 m_gravity; +}; + +struct Particle +{ + float3 Pos; + float3 Velocity; +}; diff --git a/tutorials/common/TutorialBase.cpp b/tutorials/common/TutorialBase.cpp index 0c955f4..9e1a656 100644 --- a/tutorials/common/TutorialBase.cpp +++ b/tutorials/common/TutorialBase.cpp @@ -62,7 +62,7 @@ void TutorialBase::init( int deviceIndex ) m_res = make_hiprtInt2( 512, 512 ); CHECK_ORO( (oroError)oroInitialize( (oroApi)( ORO_API_HIP | ORO_API_CUDA ), 0 ) ); - + CHECK_ORO( oroInit( 0 ) ); CHECK_ORO( oroDeviceGet( &m_oroDevice, deviceIndex ) ); CHECK_ORO( oroCtxCreate( &m_oroCtx, 0, m_oroDevice ) ); @@ -79,39 +79,34 @@ void TutorialBase::init( int deviceIndex ) m_ctxtInput.ctxt = oroGetRawCtx( m_oroCtx ); m_ctxtInput.device = oroGetRawDevice( m_oroDevice ); + hiprtSetLogLevel( hiprtLogLevelError ); } -bool TutorialBase::readSourceCode( const std::string& path, std::string& sourceCode, std::vector* includes ) +bool TutorialBase::readSourceCode( + const std::filesystem::path& path, std::string& sourceCode, std::optional> includes ) { std::fstream f( path ); if ( f.is_open() ) { size_t sizeFile; f.seekg( 0, std::fstream::end ); - size_t size = sizeFile = (size_t)f.tellg(); + size_t size = sizeFile = static_cast( f.tellg() ); f.seekg( 0, std::fstream::beg ); if ( includes ) { sourceCode.clear(); std::string line; - char buf[512]; while ( std::getline( f, line ) ) { - if ( strstr( line.c_str(), "#include" ) != 0 ) - { - const char* a = strstr( line.c_str(), "<" ); - const char* b = strstr( line.c_str(), ">" ); - - int n = b - a - 1; - memcpy( buf, a + 1, n ); - buf[n] = '\0'; - includes->push_back( buf ); - sourceCode += line + '\n'; - } - else + if ( line.find( "#include" ) != std::string::npos ) { + size_t pa = line.find( "<" ); + size_t pb = line.find( ">" ); + std::string buf = line.substr( pa + 1, pb - pa - 1 ); + includes.value().push_back( buf ); sourceCode += line + '\n'; } + sourceCode += line + '\n'; } } else @@ -136,14 +131,14 @@ void TutorialBase::buildTraceKernelFromBitcode( int numGeomTypes, int numRayTypes ) { - size_t binarySize = 0; - std::vector options; - std::vector includeNamesData; - std::string sourceCode; + std::vector options; + std::vector includeNamesData; + std::string sourceCode; - if ( !readSourceCode( path, sourceCode, &includeNamesData ) ) + if ( !readSourceCode( path, sourceCode, includeNamesData ) ) { - std::cerr << "Unable to find file '" << path << "'" << std::endl;; + std::cerr << "Unable to find file '" << path << "'" << std::endl; + ; exit( EXIT_FAILURE ); } @@ -152,15 +147,15 @@ void TutorialBase::buildTraceKernelFromBitcode( std::vector includeNames; for ( int i = 0; i < includeNamesData.size(); i++ ) { - if ( !readSourceCode( std::string( "../../" ) + includeNamesData[i], headersData[i] ) ) + if ( !readSourceCode( std::string( "../../" ) / includeNamesData[i], headersData[i] ) ) { - if ( !readSourceCode( std::string( "../" ) + includeNamesData[i], headersData[i] ) ) + if ( !readSourceCode( std::string( "../" ) / includeNamesData[i], headersData[i] ) ) { std::cerr << "Failed to find header file '" << includeNamesData[i] << "' in path ../ or ../../!" << std::endl; exit( EXIT_FAILURE ); } } - includeNames.push_back( includeNamesData[i].c_str() ); + includeNames.push_back( includeNamesData[i].string().c_str() ); headers.push_back( headersData[i].c_str() ); } @@ -175,6 +170,8 @@ void TutorialBase::buildTraceKernelFromBitcode( { options.push_back( "-fgpu-rdc" ); options.push_back( "-Xclang" ); + options.push_back( "-disable-llvm-passes" ); + options.push_back( "-Xclang" ); options.push_back( "-mno-constructor-aliases" ); } else @@ -187,10 +184,11 @@ void TutorialBase::buildTraceKernelFromBitcode( options.push_back( "-I../../" ); orortcProgram prog; - CHECK_ORORTC( orortcCreateProgram( &prog, sourceCode.data(), path, headers.size(), headers.data(), includeNames.data() ) ); + CHECK_ORORTC( orortcCreateProgram( + &prog, sourceCode.data(), path, static_cast( headers.size() ), headers.data(), includeNames.data() ) ); CHECK_ORORTC( orortcAddNameExpression( prog, functionName ) ); - orortcResult e = orortcCompileProgram( prog, options.size(), options.data() ); + orortcResult e = orortcCompileProgram( prog, static_cast( options.size() ), options.data() ); if ( e != ORORTC_SUCCESS ) { size_t logSize; @@ -230,12 +228,13 @@ void TutorialBase::buildTraceKernelFromBitcode( numGeomTypes, numRayTypes, funcNameSets != nullptr ? funcNameSets->data() : nullptr, - &function ) ); + &function, + false ) ); - functionOut = *(oroFunction*)&function; + functionOut = *reinterpret_cast( &function ); } -void TutorialBase::launchKernel( oroFunction func, int nx, int ny, void** args) { launchKernel( func, nx, ny, 8, 8, args ); } +void TutorialBase::launchKernel( oroFunction func, int nx, int ny, void** args ) { launchKernel( func, nx, ny, 8, 8, args ); } void TutorialBase::launchKernel( oroFunction func, int nx, int ny, int bx, int by, void** args ) { @@ -246,9 +245,9 @@ void TutorialBase::launchKernel( oroFunction func, int nx, int ny, int bx, int b } void TutorialBase::writeImage( const std::string& path, int w, int h, u8* pixels ) -{ +{ std::vector image( w * h * 4 ); - CHECK_ORO( oroMemcpyDtoH( image.data(), (oroDeviceptr)pixels, w * h * 4 ) ); + CHECK_ORO( oroMemcpyDtoH( image.data(), reinterpret_cast( pixels ), w * h * 4 ) ); stbi_write_png( path.c_str(), w, h, 4, image.data(), w * 4 ); std::cout << "image written at " << path.c_str() << std::endl; } diff --git a/tutorials/common/TutorialBase.h b/tutorials/common/TutorialBase.h index 0004936..dbd0e1c 100644 --- a/tutorials/common/TutorialBase.h +++ b/tutorials/common/TutorialBase.h @@ -23,9 +23,11 @@ #pragma once #include #include +#include #include #include #include +#include #include #include #include @@ -67,7 +69,10 @@ class TutorialBase static void writeImage( const std::string& path, int w, int h, u8* pixels ); - static bool readSourceCode( const std::string& path, std::string& sourceCode, std::vector* includes = 0 ); + static bool readSourceCode( + const std::filesystem::path& path, + std::string& sourceCode, + std::optional> includes = std::nullopt ); protected: hiprtContextCreationInput m_ctxtInput; diff --git a/tutorials/common/TutorialKernels.h b/tutorials/common/TutorialKernels.h index 900d6e5..ff5ac6e 100644 --- a/tutorials/common/TutorialKernels.h +++ b/tutorials/common/TutorialKernels.h @@ -20,7 +20,10 @@ // THE SOFTWARE. // +#include #include +#include + #include #include @@ -41,25 +44,25 @@ __device__ float3 gammaCorrect( float3 a ) return { pow( a.x, g ), pow( a.y, g ), pow( a.z, g ) }; } -__device__ unsigned int lcg( unsigned int& seed ) +__device__ u32 lcg( u32& seed ) { - const unsigned int LCG_A = 1103515245u; - const unsigned int LCG_C = 12345u; - const unsigned int LCG_M = 0x00FFFFFFu; - seed = ( LCG_A * seed + LCG_C ); + constexpr u32 LCG_A = 1103515245u; + constexpr u32 LCG_C = 12345u; + constexpr u32 LCG_M = 0x00FFFFFFu; + seed = ( LCG_A * seed + LCG_C ); return seed & LCG_M; } -__device__ float randf( unsigned int& seed ) { return ( (float)lcg( seed ) / (float)0x01000000 ); } +__device__ float randf( u32& seed ) { return ( static_cast( lcg( seed ) ) / static_cast( 0x01000000 ) ); } -template -__device__ uint2 tea( unsigned int val0, unsigned int val1 ) +template +__device__ uint2 tea( u32 val0, u32 val1 ) { - unsigned int v0 = val0; - unsigned int v1 = val1; - unsigned int s0 = 0; + u32 v0 = val0; + u32 v1 = val1; + u32 s0 = 0; - for ( unsigned int n = 0; n < N; n++ ) + for ( u32 n = 0; n < N; n++ ) { s0 += 0x9e3779b9; v0 += ( ( v1 << 4 ) + 0xa341316c ) ^ ( v1 + s0 ) ^ ( ( v1 >> 5 ) + 0xc8013ea4 ); @@ -69,20 +72,6 @@ __device__ uint2 tea( unsigned int val0, unsigned int val1 ) return make_uint2( v0, v1 ); } -__device__ float3 sampleHemisphereCosine( float3 n, unsigned int& seed ) -{ - float phi = TwoPi * randf( seed ); - float sinThetaSqr = randf( seed ); - float sinTheta = sqrt( sinThetaSqr ); - - float3 axis = fabs( n.x ) > 0.001f ? make_float3( 0.0f, 1.0f, 0.0f ) : make_float3( 1.0f, 0.0f, 0.0f ); - float3 t = cross( axis, n ); - t = normalize( t ); - float3 s = cross( n, t ); - - return normalize( s * cos( phi ) * sinTheta + t * sin( phi ) * sinTheta + n * sqrt( 1.0f - sinThetaSqr ) ); -} - __device__ bool cutoutFilter( const hiprtRay& ray, const void* data, void* payload, const hiprtHit& hit ) { const float scale = 16.0f; @@ -99,7 +88,7 @@ __device__ bool cutoutFilter( const hiprtRay& ray, const void* data, void* paylo // check if there is a hit before ray.maxT. if there is, set it to tOut. hiprt will overwrite ray.maxT after this function __device__ bool intersectCircle( const hiprtRay& ray, const void* data, void* payload, hiprtHit& hit ) { - const float4* o = (const float4*)data; + const float4* o = reinterpret_cast( data ); float2 c = make_float2( o[hit.primID].x, o[hit.primID].y ); const float r = o[hit.primID].w; @@ -119,7 +108,7 @@ __device__ bool intersectSphere( const hiprtRay& ray, const void* data, void* pa { float3 from = ray.origin; float3 to = from + ray.direction * ray.maxT; - float4 sphere = ( (const float4*)data )[hit.primID]; + float4 sphere = reinterpret_cast( data )[hit.primID]; float3 center = make_float3( sphere ); float r = sphere.w; @@ -140,12 +129,30 @@ __device__ bool intersectSphere( const hiprtRay& ray, const void* data, void* pa return true; } +__device__ bool intersectParticleImpactSphere( const hiprtRay& ray, const void* data, void* payload, hiprtHit& hit ) +{ + float3 from = ray.origin; + Particle particle = reinterpret_cast( data )[hit.primID]; + Simulation* sim = reinterpret_cast( payload ); + float3 center = particle.Pos; + float r = sim->m_smoothRadius; + + float3 d = center - from; + float r2 = dot( d, d ); + if ( r2 >= r * r ) return false; + + hit.t = r2; + hit.normal = d; + + return true; +} + extern "C" __global__ void GeomIntersectionKernel( hiprtGeometry geom, u8* pixels, int2 res ) { const int x = blockIdx.x * blockDim.x + threadIdx.x; const int y = blockIdx.y * blockDim.y + threadIdx.y; - float3 o = { x / (float)res.x, y / (float)res.y, -1.0f }; + float3 o = { x / static_cast( res.x ), y / static_cast( res.y ), -1.0f }; float3 d = { 0.0f, 0.0f, 1.0f }; hiprtRay ray; @@ -156,8 +163,8 @@ extern "C" __global__ void GeomIntersectionKernel( hiprtGeometry geom, u8* pixel hiprtHit hit = tr.getNextHit(); int pixelIndex = x + y * res.x; - pixels[pixelIndex * 4 + 0] = hit.hasHit() ? ( (float)x / res.x ) * 255 : 0; - pixels[pixelIndex * 4 + 1] = hit.hasHit() ? ( (float)y / res.y ) * 255 : 0; + pixels[pixelIndex * 4 + 0] = hit.hasHit() ? ( static_cast( x ) / res.x ) * 255 : 0; + pixels[pixelIndex * 4 + 1] = hit.hasHit() ? ( static_cast( y ) / res.y ) * 255 : 0; pixels[pixelIndex * 4 + 2] = 0; pixels[pixelIndex * 4 + 3] = 255; } @@ -167,7 +174,7 @@ extern "C" __global__ void SceneIntersectionKernel( hiprtScene scene, u8* pixels const int x = blockIdx.x * blockDim.x + threadIdx.x; const int y = blockIdx.y * blockDim.y + threadIdx.y; - float3 o = { x / (float)res.x - 0.5f, y / (float)res.y - 0.5f, -1.0f }; + float3 o = { x / static_cast( res.x ) - 0.5f, y / static_cast( res.y ) - 0.5f, -1.0f }; float3 d = { 0.0f, 0.0f, 1.0f }; hiprtRay ray; @@ -178,8 +185,8 @@ extern "C" __global__ void SceneIntersectionKernel( hiprtScene scene, u8* pixels hiprtHit hit = tr.getNextHit(); int pixelIndex = x + y * res.x; - pixels[pixelIndex * 4 + 0] = hit.hasHit() ? ( (float)x / res.x ) * 255 : 0; - pixels[pixelIndex * 4 + 1] = hit.hasHit() ? ( (float)y / res.y ) * 255 : 0; + pixels[pixelIndex * 4 + 0] = hit.hasHit() ? ( static_cast( x ) / res.x ) * 255 : 0; + pixels[pixelIndex * 4 + 1] = hit.hasHit() ? ( static_cast( y ) / res.y ) * 255 : 0; pixels[pixelIndex * 4 + 2] = 0; pixels[pixelIndex * 4 + 3] = 255; } @@ -190,7 +197,7 @@ extern "C" __global__ void CustomIntersectionKernel( hiprtGeometry geom, u8* pix const int y = blockIdx.y * blockDim.y + threadIdx.y; hiprtRay ray; - ray.origin = { x / (float)res.x - 0.5f, y / (float)res.y - 0.5f, -1.0f }; + ray.origin = { x / static_cast( res.x ) - 0.5f, y / static_cast( res.y ) - 0.5f, -1.0f }; ray.direction = { 0.0f, 0.0f, 1.0f }; ray.maxT = 100000.0f; @@ -204,13 +211,14 @@ extern "C" __global__ void CustomIntersectionKernel( hiprtGeometry geom, u8* pix pixels[pixelIndex * 4 + 3] = 255; } -extern "C" __global__ void SharedStackKernel( hiprtGeometry geom, u8* pixels, int2 res, int* globalStackBuffer, int stackSize ) +extern "C" __global__ void +SharedStackKernel( hiprtGeometry geom, u8* pixels, int2 res, hiprtGlobalStackBuffer globalStackBuffer ) { const int x = blockIdx.x * blockDim.x + threadIdx.x; const int y = blockIdx.y * blockDim.y + threadIdx.y; float3 o = { 278.0f, 273.0f, -900.0f }; - float2 d = { 2.0f * x / (float)res.x - 1.0f, 2.0f * y / (float)res.y - 1.0f }; + float2 d = { 2.0f * x / static_cast( res.x ) - 1.0f, 2.0f * y / static_cast( res.y ) - 1.0f }; float3 uvw = { -387.817566f, -387.817566f, 1230.0f }; hiprtRay ray; @@ -220,8 +228,10 @@ extern "C" __global__ void SharedStackKernel( hiprtGeometry geom, u8* pixels, in ray.direction / sqrtf( ray.direction.x * ray.direction.x + ray.direction.y * ray.direction.y + ray.direction.z * ray.direction.z ); - __shared__ int sharedStackBuffer[SHARED_STACK_SIZE * BLOCK_SIZE]; - hiprtGlobalStack stack( globalStackBuffer, stackSize, sharedStackBuffer, SHARED_STACK_SIZE ); + __shared__ int sharedStackCache[SHARED_STACK_SIZE * BLOCK_SIZE]; + hiprtSharedStackBuffer sharedStackBuffer{ SHARED_STACK_SIZE, sharedStackCache }; + + hiprtGlobalStack stack( globalStackBuffer, sharedStackBuffer ); hiprtGeomTraversalClosestCustomStack tr( geom, ray, stack ); hiprtHit hit = tr.getNextHit(); @@ -249,7 +259,7 @@ CustomBvhImportKernel( hiprtGeometry geom, u8* pixels, int2 res, int* matIndices const int y = blockIdx.y * blockDim.y + threadIdx.y; float3 o = { 278.0f, 273.0f, -900.0f }; - float2 d = { 2.0f * x / (float)res.x - 1.0f, 2.0f * y / (float)res.y - 1.0f }; + float2 d = { 2.0f * x / static_cast( res.x ) - 1.0f, 2.0f * y / static_cast( res.y ) - 1.0f }; float3 uvw = { -387.817566f, -387.817566f, 1230.0f }; hiprtRay ray; @@ -276,13 +286,27 @@ CustomBvhImportKernel( hiprtGeometry geom, u8* pixels, int2 res, int* matIndices } int pixelIndex = x + y * res.x; - pixels[pixelIndex * 4 + 0] = min( 255, int( pixels[pixelIndex * 4 + 0] ) + color.x ); - pixels[pixelIndex * 4 + 1] = min( 255, int( pixels[pixelIndex * 4 + 1] ) + color.y ); - pixels[pixelIndex * 4 + 2] = min( 255, int( pixels[pixelIndex * 4 + 2] ) + color.z ); + pixels[pixelIndex * 4 + 0] = min( 255, static_cast( pixels[pixelIndex * 4 + 0] ) + color.x ); + pixels[pixelIndex * 4 + 1] = min( 255, static_cast( pixels[pixelIndex * 4 + 1] ) + color.y ); + pixels[pixelIndex * 4 + 2] = min( 255, static_cast( pixels[pixelIndex * 4 + 2] ) + color.z ); pixels[pixelIndex * 4 + 3] = 255; } } +__device__ float3 sampleHemisphereCosine( float3 n, u32& seed ) +{ + float phi = TwoPi * randf( seed ); + float sinThetaSqr = randf( seed ); + float sinTheta = sqrt( sinThetaSqr ); + + float3 axis = fabs( n.x ) > 0.001f ? make_float3( 0.0f, 1.0f, 0.0f ) : make_float3( 1.0f, 0.0f, 0.0f ); + float3 t = cross( axis, n ); + t = normalize( t ); + float3 s = cross( n, t ); + + return normalize( s * cos( phi ) * sinTheta + t * sin( phi ) * sinTheta + n * sqrt( 1.0f - sinThetaSqr ) ); +} + extern "C" __global__ void AmbientOcclusionKernel( hiprtGeometry geom, u8* pixels, int2 res, float aoRadius ) { const int x = blockIdx.x * blockDim.x + threadIdx.x; @@ -296,10 +320,12 @@ extern "C" __global__ void AmbientOcclusionKernel( hiprtGeometry geom, u8* pixel for ( int p = 0; p < spp; p++ ) { - unsigned int seed = tea<16>( x + y * res.x, p ).x; + u32 seed = tea<16>( x + y * res.x, p ).x; - float3 o = { 278.0f, 273.0f, -900.0f }; - float2 d = { 2.0f * ( x + randf( seed ) ) / (float)res.x - 1.0f, 2.0f * ( y + randf( seed ) ) / (float)res.y - 1.0f }; + float3 o = { 278.0f, 273.0f, -900.0f }; + float2 d = { + 2.0f * ( x + randf( seed ) ) / static_cast( res.x ) - 1.0f, + 2.0f * ( y + randf( seed ) ) / static_cast( res.y ) - 1.0f }; float3 uvw = { -387.817566f, -387.817566f, 1230.0f }; hiprtRay ray; @@ -355,10 +381,10 @@ extern "C" __global__ void MotionBlurKernel( hiprtScene scene, u8* pixels, int2 const int x = blockIdx.x * blockDim.x + threadIdx.x; const int y = blockIdx.y * blockDim.y + threadIdx.y; - const unsigned int samples = 32; + const u32 samples = 32; hiprtRay ray; - float3 o = { x / (float)res.x - 0.5f, y / (float)res.y - 0.5f, -1.f }; + float3 o = { x / static_cast( res.x ) - 0.5f, y / static_cast( res.y ) - 0.5f, -1.f }; float3 d = { 0.f, 0.f, 1.f }; ray.origin = o; ray.direction = d; @@ -368,7 +394,7 @@ extern "C" __global__ void MotionBlurKernel( hiprtScene scene, u8* pixels, int2 float3 color = { 0.0f, 0.0f, 0.0f }; for ( int i = 0; i < samples; ++i ) { - float time = i / (float)samples; + float time = i / static_cast( samples ); hiprtSceneTraversalClosest tr( scene, ray, hiprtFullRayMask, hiprtTraversalHintDefault, nullptr, nullptr, 0, time ); hiprtHit hit = tr.getNextHit(); if ( hit.hasHit() ) @@ -394,7 +420,7 @@ extern "C" __global__ void MultiCustomIntersectionKernel( hiprtScene scene, u8* const int y = blockIdx.y * blockDim.y + threadIdx.y; hiprtRay ray; - ray.origin = { x / (float)res.x - 0.5f, y / (float)res.y - 0.5f, -1.0f }; + ray.origin = { x / static_cast( res.x ) - 0.5f, y / static_cast( res.y ) - 0.5f, -1.0f }; ray.direction = { 0.0f, 0.0f, 1.0f }; ray.maxT = 100000.0f; @@ -414,7 +440,7 @@ extern "C" __global__ void CutoutKernel( hiprtGeometry geom, u8* pixels, hiprtFu const int y = blockIdx.y * blockDim.y + threadIdx.y; hiprtRay ray; - float3 o = { x / (float)res.x, y / (float)res.y, -1.0f }; + float3 o = { x / static_cast( res.x ), y / static_cast( res.y ), -1.0f }; float3 d = { 0.0f, 0.0f, 1.0f }; ray.origin = o; ray.direction = d; @@ -429,13 +455,13 @@ extern "C" __global__ void CutoutKernel( hiprtGeometry geom, u8* pixels, hiprtFu pixels[pixelIndex * 4 + 3] = 255; } -extern "C" __global__ void ConcurrentSceneBuildKernel( hiprtScene scene, u8* pixels, hiprtFuncTable table, int2 res ) +extern "C" __global__ void SceneBuildKernel( hiprtScene scene, u8* pixels, hiprtFuncTable table, int2 res ) { const int x = blockIdx.x * blockDim.x + threadIdx.x; const int y = blockIdx.y * blockDim.y + threadIdx.y; hiprtRay ray; - float3 o = { x / (float)res.x, y / (float)res.y, -1.f }; + float3 o = { x / static_cast( res.x ), y / static_cast( res.y ), -1.f }; float3 d = { 0.f, 0.f, 1.f }; ray.origin = o; ray.direction = d; @@ -469,3 +495,174 @@ extern "C" __global__ void ConcurrentSceneBuildKernel( hiprtScene scene, u8* pix if ( tr.getCurrentState() == hiprtTraversalStateFinished ) break; } } + +__device__ float calculateDensity( float r2, float h, float densityCoef ) +{ + // Implements this equation: + // W_poly6(r, h) = 315 / (64 * pi * h^9) * (h^2 - r^2)^3 + // densityCoef = particleMass * 315.0f / (64.0f * pi * h^9) + const float d2 = h * h - r2; + + return densityCoef * d2 * d2 * d2; +} + +__device__ float calculatePressure( float rho, float rho0, float pressureStiffness ) +{ + // Implements this equation: + // Pressure = B * ((rho / rho_0)^3 - 1) + const float rhoRatio = rho / rho0; + + return pressureStiffness * max( rhoRatio * rhoRatio * rhoRatio - 1.0f, 0.0f ); +} + +__device__ float3 +calculateGradPressure( float r, float d, float pressure, float pressure_j, float rho_j, float3 disp, float pressureGradCoef ) +{ + float avgPressure = 0.5 * ( pressure + pressure_j ); + // Implements this equation: + // W_spkiey(r, h) = 15 / (pi * h^6) * (h - r)^3 + // GRAD(W_spikey(r, h)) = -45 / (pi * h^6) * (h - r)^2 + // pressureGradCoef = particleMass * -45.0f / (pi * h^6) + + return pressureGradCoef * avgPressure * d * d * disp / ( rho_j * r ); +} + +__device__ float3 +calculateVelocityLaplace( float d, float3 velocity, float3 velocity_j, float rho_j, float viscosityLaplaceCoef ) +{ + float3 velDisp = ( velocity_j - velocity ); + // Implements this equation: + // W_viscosity(r, h) = 15 / (2 * pi * h^3) * (-r^3 / (2 * h^3) + r^2 / h^2 + h / (2 * r) - 1) + // LAPLACIAN(W_viscosity(r, h)) = 45 / (pi * h^6) * (h - r) + // viscosityLaplaceCoef = particleMass * viscosity * 45.0f / (pi * h^6) + + return viscosityLaplaceCoef * d * velDisp / rho_j; +} + +extern "C" __global__ void +DensityKernel( hiprtGeometry geom, float* densities, const Particle* particles, Simulation* sim, hiprtFuncTable table ) +{ + const unsigned int idx = blockIdx.x * blockDim.x + threadIdx.x; + Particle particle = particles[idx]; + + hiprtRay ray; + ray.origin = particle.Pos; + ray.direction = { 0.0f, 0.0f, 1.0f }; + ray.minT = 0.0f; + ray.maxT = 0.0f; + + hiprtGeomCustomTraversalAnyHit tr( geom, ray, hiprtTraversalHintDefault, sim, table ); + + float rho = 0.0f; + while ( tr.getCurrentState() != hiprtTraversalStateFinished ) + { + hiprtHit hit = tr.getNextHit(); + if ( !hit.hasHit() ) continue; + + rho += calculateDensity( hit.t, sim->m_smoothRadius, sim->m_densityCoef ); + } + + densities[idx] = rho; +} + +extern "C" __global__ void ForceKernel( + hiprtGeometry geom, + float3* accelerations, + const Particle* particles, + const float* densities, + Simulation* sim, + hiprtFuncTable table ) +{ + const unsigned int idx = blockIdx.x * blockDim.x + threadIdx.x; + Particle particle = particles[idx]; + float rho = densities[idx]; + + hiprtRay ray; + ray.origin = particle.Pos; + ray.direction = { 0.0f, 0.0f, 1.0f }; + ray.minT = 0.0f; + ray.maxT = 0.0f; + + float pressure = calculatePressure( rho, sim->m_restDensity, sim->m_pressureStiffness ); + + hiprtGeomCustomTraversalAnyHit tr( geom, ray, hiprtTraversalHintDefault, sim, table ); + + float3 force = make_float3( 0.0f ); + while ( tr.getCurrentState() != hiprtTraversalStateFinished ) + { + hiprtHit hit = tr.getNextHit(); + if ( !hit.hasHit() ) continue; + if ( hit.primID == idx ) continue; + + Particle hitParticle = particles[hit.primID]; + float hitRho = densities[hit.primID]; + + float3 disp = hit.normal; + float r = sqrtf( hit.t ); + float d = sim->m_smoothRadius - r; + float hitPressure = calculatePressure( hitRho, sim->m_restDensity, sim->m_pressureStiffness ); + + force += calculateGradPressure( r, d, pressure, hitPressure, hitRho, disp, sim->m_pressureGradCoef ); + force += calculateVelocityLaplace( d, particle.Velocity, hitParticle.Velocity, hitRho, sim->m_viscosityLaplaceCoef ); + } + + accelerations[idx] = rho > 0.0f ? force / rho : make_float3( 0.0f ); +} + +extern "C" __global__ void IntegrationKernel( + Particle* particles, Aabb* particleAabbs, const float3* accelerations, const Simulation* sim, const PerFrame* perFrame ) +{ + const unsigned int idx = blockIdx.x * blockDim.x + threadIdx.x; + Particle particle = particles[idx]; + float3 acceleration = accelerations[idx]; + + // Apply the forces from the map walls + for ( u32 i = 0; i < 6; ++i ) + { + float d = dot( make_float4( particle.Pos, 1.0f ), sim->m_planes[i] ); + acceleration += min( d, 0.0f ) * -sim->m_wallStiffness * make_float3( sim->m_planes[i] ); + } + + // Apply gravity + acceleration += perFrame->m_gravity; + + // Integrate + particle.Velocity += perFrame->m_timeStep * acceleration; + particle.Pos += perFrame->m_timeStep * particle.Velocity; + + Aabb aabb; + aabb.m_min = particle.Pos - sim->m_smoothRadius; + aabb.m_max = particle.Pos + sim->m_smoothRadius; + + // Update + particles[idx] = particle; + particleAabbs[idx] = aabb; +} + +extern "C" __global__ void +VisualizationKernel( const Particle* particles, const float* densities, u8* pixels, int2 res, const float4x4* viewProj ) +{ + const unsigned int idx = blockIdx.x * blockDim.x + threadIdx.x; + Particle particle = particles[idx]; + float rho = densities[idx]; + + // To clip space + float4 pos = ( *viewProj ) * make_float4( particle.Pos, 1.0f ); + + // Normalize to NDC + pos.x = pos.x / pos.w; + pos.y = pos.y / pos.w; + pos.z = pos.z / pos.w; + + // To viewport + int x = ( pos.x * 0.5f + 0.5f ) * res.x; + int y = ( 0.5f - pos.y * 0.5f ) * res.y; + + float visRho = rho / 4000.0f; + + int pixelIndex = x + y * res.x; + pixels[pixelIndex * 4 + 0] = visRho * 255.0f; + pixels[pixelIndex * 4 + 1] = 0; + pixels[pixelIndex * 4 + 2] = ( 1.0f - visRho ) * 255.0f; + pixels[pixelIndex * 4 + 3] = 255; +} diff --git a/tutorials/common/dependency.lua b/tutorials/common/dependency.lua index 16b5ea6..86ecc30 100644 --- a/tutorials/common/dependency.lua +++ b/tutorials/common/dependency.lua @@ -12,5 +12,5 @@ if os.ishost("linux") then end files { "../../hiprt/*.h"} -links {"hiprt0200064"} +links {"hiprt0200164"} diff --git a/tutorials/imgs/04_shared_stack.png b/tutorials/imgs/04_global_stack.png similarity index 100% rename from tutorials/imgs/04_shared_stack.png rename to tutorials/imgs/04_global_stack.png diff --git a/tutorials/imgs/05_dynamic_stack.png b/tutorials/imgs/05_dynamic_stack.png new file mode 100644 index 0000000000000000000000000000000000000000..be51ecb2931ba9dfc1629610be3b492d54f4f2fd GIT binary patch literal 12311 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 literal 0 HcmV?d00001 diff --git a/tutorials/imgs/05_custom_bvh_import.png b/tutorials/imgs/06_custom_bvh_import.png similarity index 100% rename from tutorials/imgs/05_custom_bvh_import.png rename to tutorials/imgs/06_custom_bvh_import.png diff --git a/tutorials/imgs/06_obj_AO.png b/tutorials/imgs/06_obj_AO.png deleted file mode 100644 index 7f13758929dba9e613b21a0df2f006ebbec16e7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199739 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 z 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 A?*IS* delta 103598 zcmW)IdtB1@{y!H56@iihF9ay1okjXdOC@i3_Z*$=)J{>E@hL{NIhW|H%mhS4^9I|Q z!;>}bVy9ni`$VlYYbjWLT2z{yCQG-YF@_!IDxGC&{a$|m^&#-#eR;i}w-=A6=-3q9 zAS9K%)GYgM8L{X$qT$Pb{YLy&b(OGQYfGD=*|?^!Buadk{D4Z^+569cE4hxV72J)k zH|}l2|_l`N`J>9ppJtgCB;Me;18@ z={ZUis2Z9*5*4j8baA&ZJ=z@88?orz2Mt`d%hPRJf|8``ATOoF98`OLJV0-3l@+Te z)jfv)bk8<4ACTqAU$%78Z|ZNXxKvbij^d;g{fRwGVy82bCo%Wu#t6R>ZtG*Mh`H11 zufV4Sx5%}1`BAnyB&y588u|mG>X(N2k;e!&~27)~aXW`HrjVu@F-X z`bKv~+Yyi^$Qq0G0BIkAjyK zC(4zq&SHr3WWzeH3V%+E2oTR2CP?Nc{DW{-WA2JeudIttBQdhF3Z1)ci69VEm6DBuO428zyAdy8ceiY{6=&pXsN`&IAYMcDwblF2^JY z*)I*2WAH9Y1!NHV#@$>z;T$Xh%C91>^#9)D~Q7nxNqi(4+&PrH!(Ez&cnD z$8QcVC_l#*#|b(;mohH!+f=-!n~m9tFEHgoaem*Bn%gFbw23BP>27xqmX8HHE>@0j zlty>=par_ndRxezg#yv%t9pF}>A|9B=rPN0e$uY)aB@|pyRWjf^4I~1!a|}s(@pUv zZdF74dV-nRxL>mR+}_GF;i0DO zXf->IXnB>@Tkaw5>$Z^P6lI(HnZ$%|7PT?OfkBU%SG+wG9MNFGvNGvat1XEU;aE+K z;465dZ;W@-85MTTzRG#*;Kd1JubHQ z38RhKkw{QY@FTBV2ff!%a7McV9Yv&_J87Gw?ZSQxd0VskTiOLGyBIc4Jk({OG=5_k zBL1)f+nW?g-Nv+)nHH;z_rld@QrAVnsvZk54wds72VNnUTOSi6sB9*_hqzSV{If*q zDwWS+m?T^8D)1gJ8TR{qIF&V7dI0SjNjHRl!;N=l`sz|H`6 z8XS`g1}oD(hoc^a{1U0)aRcuwxVq0P#>?cLhP%5YWa()_dwaXDizrd?QZ7+D_NK7Y zH|oz(g6s1c8DYzXt(->ONDQZ*q{NZCd<3|6@W~|JNlv4utlAZ}{u6ihLSzlniE5Zi zVTs1$^W;#eOkwp};iz)I-Fk$U>5D{|Fz+MXJ}WaAjSI15z6M|09M)6c{9a<7^p$!5 zJLYbqW93vQTdFd3-y^EeXq!A~OzDnP#!i!O*2>WME73NFDcZIUf3D?Lx<zPG`h6!RVJ)ETo6}{VXYbDN=a^YUG zH{!)Y{R&&2W0Dz8Q&6&2UbAr@3f-Tfw$IML<&+GrosL8p zhN{N$C!>4Vrv-mX0|+=n)*|fsHA5bve%M9wWw&Fv)}4~Y6~U1H{$0%XG)UNP2AZld;6YgR~KCx=>%bDlNx zt;fo@f8r_@b~X@cl44;Mou-PBNA2j3a$O=?xSlTv%C_+Mo@Q!?th|HYRH<_}`+2$irEGJ>$d<94#MX`UbEWf=}`MlquGw zi?v+UrGW=-C0Dy1AfkN36W->PqPr*bG~37XHJ4}TcT*0Q55P8YOmmB;uXMW|AOsLV~`!nMeJg@NuB)0ag)Kn8#yppT9xy2mxV0; zSa6GO-r9QuErok9O^LhKs*h4iRb7s~r?xs`-PdbZ9_k)hXg`XNa^tv${|Jv%H^T!E zvJ%YG*hP=yZ-dtK8m%8oz9lQV$c8xTddh^GlF-$I8f&?KcM;3aQ8u-ug!V{?lyGw7 zE?x6LpO7W~yo==jNG-{(!WWVxeehN+jX<>A*>(^3=QXed>XhcI`CB{x$w4xq)h$K^2xkdIU{eYV4<*w;S%> zYNLpAj8B%>=UzQP%-fKcfQDB@#sN+3CqPhnOE6z$3 zL0|g0ipwVhXEa35t`WjE?;}G15$((eHG^VR;*aDJtpokwFQPoj2!^F+Pq?0ER^5k7 z^(Ljw*iXT;rSU|-Gn%}FZ;+%*6gCAfOKQ|NQ6p+Rw=gUgzs4!l+45r;atKG=07^3D z`+{z*H0PRl4hCY5q5fwPp(Mo;OFD6WS-4bUA$hU8unPB@{nFO*VCRpJO%L3jX6 zr7^>>#}tPz)aIfsZ{`WJo@gDJ+xLv83WKWvOONcU$u?C?q-$Wo&3Twg>wl$mFYR4!T9Ql}>t> zf5Y6gB{2+W~n28sG-H1fUN=@;O=w!wU2X=EYA2}#{PJbfQ zyNeioRx-e!9JF+DZ+R2_b84TfEUAHM@Rzn$Ha{}VQFmG&20m^$$7k~et9)-RE_OLj zoc06M_--LrZU^dD*|Ho;zLSwRrRpA& ztb2=GU)4f1{UW0;E}BkULsB=p48kSO-Ht4M^8y3QOC*!5zVySQf0~T6jSif89(^rS z1l&(?j2vC|WrVdZ&y4rS5$XDwE9GtqcfN| z*W`y`l~BbnynsNX8vG|!kCtXJ8V@8ogLaXEPqro)wiI1&xkUs5bv|fUio8(rR5r}$ zhq|fzi!BV-aWd%VUTAbo^AfzoV0DExqWOl+u2C=XP|#`Sdy14Pq3vs2(Pi<0dQ{GR zl%c(`q_%SOhLa*M>>Ki&;Mn5u{KV`SD1a!H7B#syO*O^IbMq93p%YOh|Ej#P%=R%p zO4!WkNsA0wrQoq{? zvmZh(YkCZGZg(!b%E;AP#C#N22s`OLm8Vt~{fV!5nW%J4`?YaWgpaGo_r3RlCvAhn zOi|h2#k_p%^VM@IAv~asZGVdo*WIfeO=TnlVA{}-C48(OqdIPqM1!*Dw<}if@bb~> zsI~+k{52Z@*Of}!1^q~*=x+C{dW-{|H^KOjK=}Ca4qt+L<$2*jU;AINzj?C({_3i= zwsQBSN}cDapdWQS&`(pH z3TZT~sAFI7#f~Td7|wDZD(k2B;*_si^-R(E9hpUf3$m|wINUsTS|__~DN*E2NjKa0 z;#xR)%yjvTY!6u;CHg!_PqcZPVnw;eh()6QpvUwL4LJiA)nEm-E{2HyYi-3~y()Z@^YD2od)Cf;eolAwS+0TXYR;uecFVBJ>l-pSRO! znZSRZqNtjCQ?Lf$WpjS7>WSaUhOfT*iWuN~v4&tIFX<4JyT>al(?a+6vDRMUX7SkV zf&);z0^Q8i$X^MxyrK)JhLPEh8xP0kLD3Lt1R*KXO7-pTF?AoFFR7OT@_3`}LoNqR z7$e-xv9{~3VcP#%kB5XiF#Tes;2K`0(?!{`41RcebC4<|zvyz%t}T-o<+jF_0!!(y zX>#{TE{<9ou$kA!XHQ{>_6*!OTmB@HTFf*bL`MmB0CbEdCKR#Xpqb?+hz94E=_uk4 zn6#Z(J(s$*l{rCG5_Mxyh9yu<3rHYm*!&Cx(a+G)EQFMuHBlztONid?sfr*EedR4B zEH9N6Yfl0vz2$D>N~J-k{gR3UXULB*O?CHJaxvSs9lPqbzUD5&z;j?}j9tI&riPV6 zEuH)}YMf1`P`!O~bbh}+BFK1&Q@&Z=;`6J9eRC`SaSkI?oY5}XL8iU$u+6J6Mpl?; zf$?s|vb~NJx=-@`6wE@}D6u^33L-aRZ+F;dJXN11hjC?ZG#~gw6G_z^Yd1zDyjbp` z97)ZVA*!H1)Pys-X;1rIoX#3eT&on0}?2RB^i9!85+t`Yzk}HW{ z-cnFS^`J_{JqglBiL&-i2iWPZ@uW*+XGl?$W`uQ;!Cr@9>JFA7*nC7b>Ncc0s_J{x ztey#z|(KJwbUlC@>XZ9UaYc7}lv(u9u; z3{qHHU0gUn?qlKUU52%e7he%QWgim|?**zZHbHQ@%ZH(?ur^m6!+TjQr6lP7UoAn@ zlRWV%?W-0%CA3$f=<@o&Q9)d<%~@!H{|!=~hh04ig4ayVuOgC(H2K))Bs(T}waS z_hgZsiM(t9Y7uLBXtj{qsGwEM;W~fwR&)AzAKQI3n`!YE~q#g@$Y#1wnw zy6i*Al;CXQJ!@75eI*q40^)kwJ7JR5P_=)hD!D;X|291FcZNDJt=&C>x5NHALsrkMJLKZ`{IZpJh;1*F?qS=$q+zE(iR@WQ`Px8Fs7z4!6 z=1`E8*L|z%ODmBTTSt7vv&Ol@V^q^GMvhvjU-*bZh>3}@N=Ob5Y6rQ|LpFl-kO7jk zRk(XsrQK^06dG6r(RyP9RTR-3PRjFODngVy%2Ro^c*jPzD9NCjBW<|fQ{gv;=WD0^ zhWNOmd;rRdpVXNg$$xYNlt6Z{V9xa>ov}{-QZU03le-2%Y4=GFE0vTwYU|JO?4RK1 zVOv`0g5G|iStTj9z5?ATxIT{qfPIcei!p6+Jky*?$jjI2ShgG!ABgG&T5x?%Z_o@& zK~tVNL zk^K-pTzjk@yRpn%vLHbG1}z}4(x;ffiRWk&obY$?L&(0MetcX~A43rl6bV^gZM=W7 zWheFvR+(Z9{qBGy)1|Ky>p4=DuV%7)WWmi!-9o(7#4~Nivr`!{CO@R`{1;o1HLhQS zMR$+y%a%D$=mS8dz8mzo?ikQAQr417?V2;m8yk501Y$=iXqq?E7&|A6s5R8dy;|L0 zKphwf0QK#W?10A*6Gzp@BF|5IZll}Y#q(t#fCUiR^BFr@SSktAL;ew}A=P+D|JzE9 z&fspQD}#V;-IEDoj4Kf7N#Ulau42pJH0Ml|)ooiAHPaUZDY^*DVtk(bn|0Q0Vg&%h zg`Q`niB3y+RBauXjaM@ocNKyh-zRYRNH4HU0 z?>m2r=vZB|^5d?-!^gH8`k7|FL1pzAik*CxSPWXbZM)!rxk~E2I!Dm2M_wc7lj) zWjPq8$3`nl{B!RUYU4fZ2Fn%-8@$C)MEo4|F|)skE2{NV83-k&mb02BZCdwL_ zb0=okaW~?_U21o=B;#6q_~z|mV0EpXjr)E1qR}-AC^MTY##6- zgV5L~nVP*}e!zCbJ8B6v-lhY%Cr!c0qGyD?2#PgCivq2?rN@&Vk!cZ9O8E!=a(~dF zB2?(G2MBI=vvymnuoN;a%n)z-1w|?Sa3`9UY+GWxHsBK`vSA;{9VEhLo+2c}`{+Ek z-DjDt=YAuItZleknm1g>{bOF?{{(q!8KJj%-_+Y_g$d?3!K#6atgK(QpR5cPeUB=- zc1xEvfV0!#T1-~@cEP##wyScWQdL_=XyTvy=BfwPi42bP3i*t_gU+T1{O6f8tk#W{ z<{?Dv*k5s5+tX`hxAE)@`GoNaWhf4LdE$s>tk|S7KJgdVSuD&p#?gknNZVXihER`N zCy<1$5k_38!AcR|>wDtn+$B9g2xoTKxuy6@(3T1)mp6<6%a(muGre<-Li4b?QWmo3~n0(uIW;Th0?}}Ympgg4^-3@%MCP+ zBO|R?n8EGQFZ(dBI$$H-J;>}QL*1q}4jWh`n+mJFR}uL!A%ZH-0TFWL7&c92D-e}+ zmP}hAm0D&s$Np=ic}UwN>o8Y=I*)>v$~$FWEQ0d&2|l`TsB{uhKYx3iu8C+N%Ao*x zfO+c> zsJB6#Eb%pUkMYh%QyCDhL#jUiZ0b5a)6<=i{|SZ~wc2vkas*K`k7jR81K zZ`6(^*E6LLh57)|_kC9PHn#XGI$nMwMEO(FqXsS$FVoxz15I3|1dzSC)^iUUs5Ga( z3@iE98*oj@k;uFvNutIDw#M+-dy!AuxBNfclh^pn@VkVOBai6&oopxHA-Fs}6;x#d z{o1qiu+@EYdaeevig9XhNTp%gvw~)E%K#OJ@>xgz$BI)NgIN?)q7Xsv`(sR znkF5u4Af(GJ*+y#HA-c(@#zI}zAe@y##Wb)v8B>CsZUo~9KcH2DE1*B>-L;^G?jGk zTjW!yhvUh|BFpXWv<=dnt``xw_j}WX%yj~P(2=f|4^r3bRb!Ek{g%dYSy@v3_5}f( zxz1ww8qhJmbM3$ncmPVa&zBnbZtP$r#`uK1wDKHP&M^PdJ2c-1UTP-=r-c+QLF^5C zd}u94;r58q_2akO{V4u|kZ^gV=smQW!LGtJZtELrQKA>ERPNu{g}zC>*M%EBYY0-+ z4p~w_Fts`&@Vk4mDd7=nKP_`Fu3IH~ab6d54%6wt+glbaP0_x>buYGy&Ym;Q5iT&} zw89YiWJ=vwnu*K$X)4sjN1NQ(40zPRdhRE9ndCCiX;GfxKLUMN7B}wmZkxKpb2E?q z2_lBp9tBQd{U!rf+0B?x1(>&^Xyx5fIoy=;8^U?boynqBcaQiwDbiP6aMYbAqOuc9 zrS62xOl*<}GSzC&n(c-yj!6mt!&lu8Ee|!exT-0*M!KlU3qGW9A8`I}iu?>JLKd?sZHhzomwZXJ)1b-4OH;l2DVbjh zKE-P8N|Z=p@11wSN4%yXJfPNufsf7zaD+E_u6>6>3zPm!a*u=U)t>Tn%vLnl8|R3i z^5@FqmCY@;#F2-v{hHC4nn&%xf7tngRR*B=3(RGX$_OxKa%4O3aqX`vdfpB|UW|jL z5^1}PMlOmle*R$l$-ejG1#Ey$Tgw$KK@z5Xva0;{&YHar8;K@xNGehnDJ|-0s)DDK zl}`pySKC&CqvGYWNR6>qX3(n|1_RPAlf@5Er#0L|V)t+|7=O4*;RO zNt}YOdn6!HiTi<_Z#6kXOnL;~L> zYsQkYnV_jy+?G-^g<#PYRNfWkj6>18E0UH9HsvF$21;Yj)oMoH*6dtLR*8o!7Lxs2 ze3Ye#gj_|l<-sDdkL2EV>|z5qOmILteVEI@+7s&!ntTD!e}Y}CAIo(_6V6cW#1&6K z3O~u|$Wq_nUy3F+F)z^A_dww6gBp{43ppUoP0jua>Fl-A6_K{1nAx|DC%zk~XJs^3 zd(PCWu8ff+^(sLQv1&{#t>_N&+s4e|iObQ2%=NSvqDvl{(d5u(S-$pm_bZIF=;p4Z zBNM6hvb^G;PQM;XlfL=3fyF5q)(jp`$<6^6bL^9W>7Q^^Ct}`70dcM{0FOfsfpp_9 z)e>*&mu1Vp!-pw%Y#`AvqD%*6J6r|i3jt15f?+M}Qnmk3sexIRsR=dd$hy6@6clPx!GV|bNP>(3=5afXTt<|Qz9eB&Hwr(uJ@vK6( z*cO}P9wo{F{gSo;;MC|sXg*4Ob;+!-b8!b!Zl{{5&SJ2Oo)cAtG+Va(a@VW}EmOM8 zZ38)iEN%$=?PGZX$PIIv=15>^8T691$@LMyrTwMtfwuxhdFaic3G}tmO0tK6=TVCm z93I;OmTd$DQ+2u7M?FL+SOwUT-!WQP=jTY**d6*00BLx2EN`YUd2zxeme z$^EMN-pviHv08lO{O~kJx?B}B;#fk6$LC0wA2$BcJ8u*#? zdpSU||4VFKNmN+>shJF#@!TBqXd&Tm_lc5*Xi5;_%4yV-mS%OJ$26%V+s+nA#j;R` zM0?xn6Kji=j#Q+QL@$iLqE1zpO${!Zb}Z?S--D>pHm-aIt#(hbmb`K`5$sFwd`c5F zGXuJ6KHMr1W2Z1=FMJ!ix2bG?`6`b|CF7F#dz_^WgKMcxWGhB;cQU2A%9UUi)^M*2 zB9%41&V6!!`+a;I?#qD1=g5|#3xA||Rd)}>6dnk(xK4#Uz68Q2mC$z+GQ2y^duAph z2Qi%==x1EbEBtwFb7PaC4NPNVX8OQj1DAojCzw0%*T9hxxQ@K*uIB`$ik0Qv(Mkws zZ9E17GB;8XnZ-NF-g?6mNc8ulYOr8*^@E1QsSvUcp@Stp8hAE2I~kj#Uf_uN>K;?? z+Vx08!Hqy$uBk&Xhg~Jy+2ahB(PzG0iu+;RUWN}nLK!AxB!QVOpXB-TwGf4R| z8R#)WDr6FPpyE6%-@SmZ2)!hrHc>xp?kYK@!v0Qz#qQCr{JY@RGV@W)jroEqDiG@F zqJGV8Q>Sr`+TW0a1VTVzJN`!3;n&6v){kY&{{+jZ9aQ>#WTjK96IWG!_cOR6!xcQ| zzz9>^Y_M|J@yN@-(?mGBL$$}gk-4w2Ex|CiY4U*|JQTc3dnA^0tThlxs1KBBAU2^>97r1eVRFfbb4BF*U6m>#%R;P;)g&LlCiU)i9 znOSjH4j^&(*M}ybB{K@8vld%oSPLY3_G@=fT8Q>_*DvS52{D5>2oa}z$w zv6spBbr06$h2qWEcPIaWTo2O!#eCgpT@+W37LaKl8R8eD@e(Vh`Oacc{qKHmoeVs^ zZb3k0-=9H8JZYQY_zvs8wIwpvsZ3uPt&K#g`U@%u{T);`2mfN#@~g(v`HAC+_g><| z4f(t)322#H6SQMw!Z3IE?x^%fLKnA&hYtj)H6%h!j$8;>Y9W26HI__6AWV{|AI~j1 z4Z0G^vvHNolN`Xe4_=p6-jx|O%^4uQcv9>Qu3>5+O{u6AE0mFN4(a}YYAZ9u zX3>=+>S>mot(0~RQqHy~dU`x!rDYog&~aqCxEBv;Sv*D5m0Z(y*?96xs&ZDS4^t|7 z+NfXpmXwe{mS!#Bi)Z_u_^?BP{dw*3rPG9t)rZH}^VfjWlh!~pZIwOu-k=>*NC&j4 z-SPrZM0Py+TPJe4d(!&CLwO~c8R4*avah#4V9wiX&>K$xbp!8liSl(CsGv)*&Ip+T zK6btp6GU_BhXOrQS)!X>43PO>X$>o+Z|0@EXX(WeqFA)JYqlT9>d0c15UkCh zz}&fry9;w>l(UBBkWNE{z`O*j zC7eKqNf9h@w`GERIleZe%Z4L%vT5j431!jls-e}+AHO^{!10ZJYh)VWYR z*!P6&%%4Bbo)2hdR*Ds%u_r72n`Z!b->9D_=IhSrb#dkyqm|#rU^DPhx5hTZU0ny= z8DI3WYlP%faf+fWBM``HqbMjs(>BOe^VC0}CoLPY!qD4Ux7dw>^VfHu zeTJf55&XD8Xs$BZFcCocEZGc~bVY*f1@b3ypeP0%){k#;^uMm4Sef2y0}uRiuWV`-1kF{!bMKMn3gsn_V+@`ugs#m2$B(`pu2=UVdWL zIdrOg(%OSU&q60?C9i@e`sSz+97tK*1MmMi>2ERku*U}Nv2jUhUa{4yKnggx@>CRr z<_-|q>mU;RAPzL;Vd7aiAY8ya#gcJ~omj}MrPriO{nbt6!VslYJsnAFkmuM9c249u@A8fY&oepQjb+AwSS-3iw}!k(a5_Nxs&&R)%!3%1 z&OMwS5n!LgF4ld$!F_@S9wYpbY2J(}Rm{!a_K&f>#3pj)9f+64ecNU6ZsQG=Nt*?~ zMJ)&b1)|gVXV7UDw8C2Se~)~73E+90N+$|q7)}AjhoI~VI>=CjUI_ta8NsNfuV-$c zc|}W;)Tu${&wKxKJUw(d3H2n4cc2Q{1(q{Zy0q&dXkr~?sG)wypDGvX(XZz*1p5LX zyI-JgBy?MtL%F7CkySmGnvZl3>Q@>q;BK@VS-gy}b3b~oui+JgDrR9TsOApWbGO1U z+qX!3Noy4^+x66FT>`?;&g1_}E#@c{>GyC~iD9lHtS&t8A30b#1xRjL^7w)75gvP& zAl?@5JI{X>)ZJN$sOA~Ym9%UQUJRwLW)np14pSRJAqjX4HJ-OE2VStyFGtYto)$0R0Pf6lraPg}OCA@=_qCi}CjFP@ z1`#}y?;*#pob7rLDSEeikQ%{kEKYPDKbx9;0r}Khs)Ft8`tAN#ei`n#Cu?(9WPyB@ zBSn`VqEvS~46Kz(HG~zq2+I_cZXPvxjxHdj>+&!>E&IQCzHXYBa)R>{R+TyxV&gh$ zYx6?PTk>9`5cG4)v_Syri07FP>T`X8umYi~sA(3Ot<(PrvGysf*cPmsu7Z1 zWJ-`#`vp^3>5Pwx)(FJX!4Voqdb9kLP`=MPMuxl)t)yAdNrr)pz>1vxK{Fu7VS5uJ zne0zoqg-(=TISw|O;VL1-X}T(+NhhuN>s14x|PcP!Wrt2Hz=hL%&R%ayqVUp(=>-g zch7SeagL-!hEi&_4v>_FX$(o@t&wDZ3sWQxNP%GlJMA-TBel;u?d+5=t29xoMG$5OJd zf@m2f?4&hHj9U#Do_=pNasWh~puXNBG%*!L8eh=<0aIcbqPtlcLXp+ zKDmPrqH$zx+9g_JI^5El?ecx$EySV=vJ%<+xwM!127sY9?Fn)CvxYk?DENaG3*>Te zoftUw+nuysIm4vP5KOiDF!y_S;QNOLX2}x)fca*%Iq_YVh0gS%Ls`YXZC?OA{O6v`g-pDk@UpOLOIy^vFJwyfj`*7mc93VfoT&chQ2B(&};^lm3 zHA}7v1X}yC3)OP#U3rtUgwNmBocN~uCxY6~qIU1{S)v?C-naTnq{<;lg5b~rfmqHI zJaz|t=biVu0%5wQE79l)hwH!dLH_s*;3P@etFc-L-~9ta4q+SqWf&qy1jrM-wS(>v z)D(!GP4I1H(h+qB#~BP^nK>jLat07U`^8}Ob!N*86BXq?i$Uq8DxH;0bz=;}FK9_( zahJ;Cw^3$+sWzZ(F$NFz_sC13-p}?ivdZ^v#U<$i=fbrO(yGwhv*G6+jkZWYYxaMtPxZTyif4 z`4qBxCC0lj@H2^^e&0}4XY{8IfY4YhJbh69)?!((nb%V}%~xPGyrvwWmIn=9YKpJ%9QWcAT=}s>>leHy`E50w7 z;XB!e&4Rg>-#>E=yA=vyy6T~Jgci&&lR=F56(R)6Xsc@0Gcy9Y239K*AFgU<_CDdt z**NGcn3DPEzbVlgvdjQi0WF*ZJSX0CQ1UtvCKbIv51Dg4Kg|7OUUyOtnkt&e z5&Vtkg^#J>{3Fq#QgmE9npppd^!xG~o;H=B;IlLW_AXJd)utx5?D91UjeGL8oOf5P zRrUn#;!b))4tO(I)uM1T51^{LVl?@F`@mRg=zEfdG%vn12x$Bt71Qnt=JIf({s)KLMEIN6N}rH7O1j2mNk?9$uiK6FRF6eTlPWvlT!jB6V+o$?NTK%EGzX$3 zlBc}~vt6F7#^rBEHt%UTmaXc2LITCmU(%RsTj+%~T)Su2?e zgJi^bQs|^FMsOhIO?Ayo8CsVYTvc}`$FvoWN&%%`1wMOzN_G@BsXoVmeE$T=RwwZ9 z$U&1n^w10vASnU1KO*LJ%gs5H?Od%1(!kvZ7ZL06~Vwb>SWA>}aP%y=)JAHXLx{yZWOS|2D^dAKI){SL5GEyT0KrOGfTD(() zyWW?>B%;;A6hF62YG>V8`tyCPg*e2lmH;)XsDoKQMYm5po+aIpk{t#x_5zwOd6^)x z!Cb~RWa9j&u8ICx@;+9{RpI~iqsa|BrLQcOB`H8ie3nwfS?rCf^I5C99wIWLtGN3? zr0px@pkas}PLcD$M32uK*NqQy0VkO!srIk4dMP5?SJ-MYMDnSI16UejD|1ZJAlS*NrAKhs*~mnb!T%3Tg{h~P zKqg9R9e^(NfTjGGq<96MEB!eodj>zD#a<=n-e5+Mol%a%G$%*OwT$?+{a*-xl=&9f z*EQ%p0xyJA9!cyin`-@E`uzyxf^0SGrwk9#7*NmEW;?!TQ5$=x0o$LvvF46<(Z08- zPt}53;@Y}ndV|$d#jXTQKL|Wgnky*|%c8^7*z4qRd|uM0I&+IwnVOJmaL$3dqczQ! z5=;KN*30CX{w;fGy>!P?hp(dtMimS!Kfoy^ru7bQ&ABCPDelKtP(&j#4T)B2+6)HD zNnuT3Cs8a(^dxssNe{>?o*7o`hbX<@LKRz#+1x+VcL33kZ}mLMem`1pHgzKthAsxr zr^c7O3Y=k`|AkL(osSPKIOSDp4)e)_(kX-FRe9DMS^!)pug$FN01m1GM>!dLD=;1#(4;*NEQ8 zo>M-;w6@g7m+~eFK_Z4Yv%Nt!e&V207)gkOb?4$1vo*feb|#_57SVN<^iD(1ITDMcXv5=4SyZ zcz$XF#}Ma2Nf%gRI(W>YI0QX&R)*4H5SDo)Kvtm3V=CLbEPe_$>tZ6gMkp;wWNebZ z4QwzSf9zhvH2J~x81>!wjYTynsL?*uzMy3=#J_Ys>>4cRR;vEGnM|lzJ?VBsP3ir$ z;CUh=vC-PbfO&)}$s=l}6tDJia*MSgaqyR0N{I~TY`1W2{=`Nwzrp&eVf z#P!f5Z!b@n$_ally->;1l~eY z@T-Cs-4x6rf8u!#Om`~85UbSH$GbrwZ$4A)nVF8~m*3#vTtoCZwR%*u7=ws%zN$h; zhKT17HG-9LBC5?#|2x^+v;sIYx-*=epFuO13Q zLV-a!B~p3IuJ`g3Rua*<$CsWt31M>40%i%MOD&{DY}DmPS5TMd8SZL3_;Gmv ze^LlAWfv^}6Pb|Zmw&Jx)Zh(4FTa6ymrp&TS@ymO(4%%4V(`u4UXw^v^;Ed8mPL&i z934_+2OY$AGE_)1Ao+M(S>Cwh+mnz@rl}1627Vun=O`j)X5zzMw9H8o5wbV!fgs~C zBIZ@RSI3WNV0J%G+TN-s?tac@J$Uagwy%*wBaN4bmN(~1UI;E2etVVp0)JC!2d$-z z-&iS|U;j2iVPC-Fmcuz286G*K6VIL@U1OC^HMtV#yLC3fV|r!{B-vj3n-b7bhJp>V zFA7Ky=CL!pVTAfU-5Fw&t~m{>J^|qo@&zXQOPFOI>VB|X`3k-BrK`X*g4PJp-rjz0 z25%|l1PXJwB<0KdUnTg-rkOpev}|h2B=I8=44V0nn>2$9h@+5v4b~rfD^sW^=SM2| zlQ03`-ofAaW6S@@w_7(&;(G{+$Sc>7_^PxDrJ<|Or0A&^?I$M9d4HE<%gQ?l7AF;`r=06Pm%O0&Ev}B}T zB5WpKiH`gfS(Wr5tduYN-&hZvW-o$V46`E(1tApER-=&rWvp_k_F>mpV!hm9tIZF~ zU{s(w4_lZ^=as>2^p)wv=UO%JBN+3!H;{yNAbogp8hgQ@8_PFzAP2w#$akyO4w6)v z%duzLX+WhwK4aAb_*6L%Mmofdt<w@TYR_}bO6h_-?sM2VyLq`9r zTx|IHy40DTSgcifg-C~KJ7^vrNL6+9s=bAU5$c{MLx~6<_2{WY4Rg2>=I6PNNe?rt z!%#7ry6yx_xUVYO*EO<4{07FkuL}Qf!0bQZo^AtA7-Yjuxq?;F!NA{A9Ty4ER^Jc- zL?!bNX>^Onsy+tylU?$<{L~VY|AKjQNVVG2Cpr5^I5Mj4AE<@_9gX7~ntK%&2!&R{ zon#!P`H(v}CpjB$YQ`$-l%O5H@Pw;pvOZXPu7nhx?1*R&b)(2eTdSDPOjgtW%} z05~rG=w6cojbMygEet6GeC)Ga*#mQpMskgG0sXMl;Y|P$u?x?KHvl>CkYEi0L_#*M zD*x`O3~Ii=azq2+{aEPhJ(AZZL)#LW6C#=7aapnEVVBQp(Xi$nw&^W83d2F?c4_i> zm!d%jxFr@{Me|b`syrqB6i{x*lDN6R$J#MA7=il$-ib@m=UyA;eNE7}zZc z3bGLVo%&N8Q~dlMnwu~ZeKTV-Z|j!CNSZUs#9P1z+?OkV3l_+T$L5t}f56C1+Cf_C zMoI(~1nqT@M)7ZagARLtp1iIQMvR>t`GrJPp7e>gB1(A*q81%v>JG9P1o_tA)ShcdfkF41LK6BH4frMNAJU#*o{ogP^u+gjRM zDpoY9ylEX-x~(G9&Du;WEwkUne&?_A$4;lghxh08zFyb$ye_FAOw`bOX-aCEYgUNm zZ?l}aj2X=T*L8wFa7}wV{W!OQ-H{CceO#Jf+H~)UC9Zvh_a6~>t3H3?o~JWS^s#kM z2~c6sCdZT^!}k?I?!LdSNdBkHo%&^hr*2N9-kY_olV)W|9f;k= zL|0W94WNsDI*VGP#nAxF!`9BJ{*Ua>E*b@bUm^`xjEk}zZ<4n5wT)c$Tx*Oj z#W-O$cI;c-4a>_26*erAeayS}xe7P`i&Z91&q~bSE`ojf2VT{Yu=?CnW3j}M29^%% zv{8b6Zvvi`RXtW8^U91;@oLG-%GVm&+MSyvd)Xo8{Upo>ZBB@~pXOb(f3dZ)QT3r} z*^`tP5ZujM#V?OFG6^_)Yxe zp{d`6w!sGNfHs@bsVe!|0j}A#(msD3({jleHlrhjLA6CMs>shg2Xst%lx?Tu$%LB; zLr)0rb zf!p9UxCyc>E9J??_9@abW-du^sOpL=c81i@Ho?2h^YSr|I(A+#-@^nwbdNyeVy4>m zU*7V=X{xSdVpFs52V7(5fGV8SY>c!;C*4#VFR0-V4282x?$}GJuhA!0cMX)n)G8X! z!?i2@gzyI>Ioaoh`I^meOdNYh8Z-aMJVDYO>N5QQf4+F>l6CLDUnP-B4aDYrhfd~D zcIlOcN~{p(HT|xCX6nCHvhh!X=OI_sW&*~Btbh}58ETEgN$`qMbGc13u>}_0lx>Cl z3eD_q{f(sOz5>Km=}6Xx`FdU*8r6+ZK+eI;5!h|=!%_>!v*dYjS}2@*=VS+Fna}+7 zzi-0@QlpxZ!X_ZZjr_ z{*)aEv24{ZkUCJ#%AXq3wCpZSd(P}Ys*+Sts!N(JXzdOUPh~fYlb>@_=LrI;9uv;W z??beoqK{E6_6*h*`Chu{{qQ67zwt`W!X&|1xD+=Q=fFyZS6b+Q+X*Le4HJyEPnk=; zyFiDtxUlqJ9?5c}P798Ke2Zfs<(#kRiQWpf6gD0~%Hx|BZCyH*^yh2SeTHbC{;{r^ zcpQETLc?H}aG9UETRuvDN>cXoUwz#j?%<`8PPJN! zV3V$uZ=|&NP-d$eIaf=&`z$4sq!nCP3})>=gWzSDmuQLb4}v*IdxpA#;Tdnf%IiFO zkql!J72bdwvPD~6;s3FGYn~*;y4D!?z1u$G*e$$-rS5v+o3<$jSUl@wld8_@d9JTs z{Jn`lf5U&23v~c$NEofzmD0>QPKAl~phNEO>jaN74Jd(`aA%?ia{uhijsTYz(QkvIaWr3H#voJ=o)q}_7mVZ2@>yxck>&JQ*- z#vQeFqk2|&+5UcSHOv|5hR-0f=T?PBq{hxY+v@SQg)3YrRvJ%N8n>(Gq}fX7s&H;5 z2M8P5AR})+ERY<;wH~+!R@O!8!-;}(M>e_I@`_iR176V)nj58jV0Um9y6q31hc%SQ zwW^nd(dY;n#DNUiJ&N7Ch~(emTA>dtLZ1n9#rIrRc2NHu?)>@ZFtw)>oYU>DgB0vq zV_QcwCr!sWYgD1imE`O9dNiGMNcLM?YDE`1#P^3LeXwMEQZz}23b?a$SaPOBydHjt z^&2{C?FL)*8Lz9l=9#d#-Ku{@9Lx@E_?#-5*FLi7Otfr^do@xHN$J0@yIi=@5cLVi zbb8ef-jE@msr&aH@`Uw!bxnZI@4xOvdw4TaRq^|nJ*2CD{Lj$_vpP4nt zinP>A>0taUK%gDbdm1gq@TQ98mB#SAV0I^$dt))R|FD^oG`kGbVycf7n>a~`LHs9N z3m0Xv@7e<{lt2nC!Itc5iPL*4Pq|eK<SwT)C!s6T#;d6jip`q%peHyt0p*WN=-^DCps5d+`y=jelLuH{~#Svz09 zdlRzMrKp3~Z1GNl(pe{znZ#)eEf{RUzhR)Yt*(k0rY34 zcE7=FeM~_TeOcwa)p)n~+$q*IGY3O4oyWI)0|QSk^1rN}aYxHRo=*nP|JBT^l3N23ZFZ7uKI_^phZ0Rf=K6ewprSaaRM11=u~x#v%_thLM^j~U^iI2uQ2m(-bHQ} zBQF0445>HuSLEx5Hd3&mZ70+)do?4R%zPd=Iq9-V59?!Lq_O~8!4XY23=v!0j#D#g z)E4b<%FRtFm7I-zXE#tuBU1#akK-^^Zs08ago6w~HqlyM7bw3+?A(Mj*SLzee5WuU zJSJf(^QjMC`cqN!tUHF6<#(Ekhm&q?f_MGq*XD)m)FHf*2fo4$yzB!7<;efx4UY#lq4-^ ziVm4?b7U-@5H4v|!QbiLIL5gTR3^&g?Un@u2(B{DrY?lzpcasQd12Ck#PmL>lIe~x@!7D_)dm3=P(pZM8i(a#@gMf+4nfq9gYdamnk!bo zx%j)*%bjN-IxE+J1_Vj#tHVNxD&1!M=ZfdwX`5&I;sU$9NXu%9?+O=L~25@+aoO)_$Nk5Mo>1)}im^DMbViYE5N~AK{CX z$|XR5-frtBm(%ns6@wa^Bpczay0!Y=xj6RIhyscKs!{=E!_o3Kf$6wsrYBUMI3=$Q~PMv7QyJJPr^I;FX|z#Z zNIFS9`=!2 z6$s2nuCb?CmuLjh;j?Guo^7`6CnXi$dAfigvGj;0jZclUu%U$P8==^R=fh57&UqMg zf1p(pWbXTKa51v)rOXhS5BMsNmzYcv!8Ce|5@8%p!$!)cIBY9%iTa z&^;^_c&h27+MnAzD_~-Ntk%*RpHkkVK zV(zo?K~4IKRzr?xLM|C(1M7a?ZmfW~-KIL+r!6HXN&h)|4mTUS&vOT}r5WCw>_wZf z;10o!YCZ};Dlb|YCuXu# zm}@>h%zDl6ThO82lj^FRL+PRQGJ7QtcfQ2;o*A3sxHQXH?uXPB5* zIo7krGKpuxbDom8f3;J)2R)4oA&m^8l{5e^f+EslvpGV!%}2DT+vITP-Q@FBQN3}_ zQrKCY8P+$4%cycG(>=DXi_fVx%lCSyJmbvwNZ=lboSh60cm_Iw&x#&3j{-5WdD$@`+@ScTTdkYI5kgESJ<+ zr^ad;fgy)uQA@9=hI{5v`cnCVeNY70@`rQr$*cxpPw<-rqKjYCx~ef!8U4>_eB`%` zVXB!8oI%FwT~OrG{32h;CW)d;NT0GpAlTGm^N$t&3$eVkE(m6~VacJl)reg%?Gd=A zp!bZowi7OmXbzk-8nMo_!HYq%rUicYsRDl8YeDDpKL4JmE@aPb;&-tk3dDc>>?&lo z2Dpiet8VC$T$*B9R!S39>KI-B+tA6HzjWTx$F5e(i^}@J&-3QJz`*S0>siBFC{|>? zV{~-gwz_pnUH878<=Lc?C~S$$b6yRcW#X55KF2CRs_PoL zNd@>(HlSosV$S+sq-JuEB+I_G+&$o$U5Hp>1kkCOHt30+Ry+_4JKA7AMq~yPX{0QN zl*?Vf&5BHmRj&32!txWW$8RL;Ac6Nehyk_1)0U2TJJ>c+dc_@**k_2T6zpT1t+;ofck3L?x zz~NzzbORxfksEFf@lM9(z?gW4%F;cIb>n_jD1S(5g6=)PKkD z;kqg0?jlu1obAU__D{wiojbQ-y4_id7^Y+i-}n!pR?P~+uy(IzyvQb=F4i&yA7cUX zCorgxvgg~HyjL&*Ul=oRozHr(4>9X&9={2 zHG#NXQZ#0IkGE4@zbcYLa1uud-fx>CE+Z}832E)To%cG}cHco%1(xy))09&=RUd1N z7C#Rzkg7*CS}trqKeqQB?%2oXrlltQBaDKQ_8G`z&1BINRab9VT4=$<(QCA(1$uT1 zQU$VU&Bh(xcGU7haYQOR5yX!$uIP1JN7XOIBiM!*BZ~S@;r(`TmghHkQRCyus zd3@710EAxxnk9s>conSZxBm#Eee;>!Nf2qCMu0t*t$%!FFn#s38U_w*jC zb=aCoL>Fwnpy*pk{_q z>6FDdAI8GvF0$!hUk@3ZuUA!L1YC-=@9azdq(eR4`m-zC+(AuN-X)~AjM@XMV3rxj z>plc)l+uwPIHfM}RQpaZ)4{yTG5e)KM42jL-vUke9dqt$z#M_8D*YpbUx_I%}ihhgfdJa)BI#!rbXXfH~NY*{EPqK^q1g(c(&fq&7se~_ci5r9(UgGe3& zpQyS^3(n5TKnihyd5&oX!ovR*wc4Qn#bhC?CRulWCSAwRZhJ`$k+uW^$U-^U70$10 ztbAZOx&_O>C`3{q8=UXI|HoFB82}KL`vR`_fNedEpX9T)`}Ej!{p;dGaox`}w*$P^ zLZn(f3BGUjAw$>T8~F~92RyHupA=o;r!g|BOn9n%u|We4!tp-;qRQ9GFmNGKb8s~Q zkXFYROjivMdo^{{V(|W4t0VQ#_&`D|Gy92H~ z2x~$SNG!~J!!JLgqb=apuG0^cJc(Zf=qUsi$q&?wlWn(Kd+24%#sBM@qI^O9DCDq< z=lNQK>NumJ()r_}xt7bY<7g3K8gISr|7d3B4_JjJ6T~~zw~xHoT-7@#jgCNOOzGO6 z)Dste_LsI4KMcpvc8z7>K--;U&Mp;H{JUt}*9bdZjdSN>^Akjd4_%YxXtLvw<+|6Y zw%>xpK@$I^I%zG>=n%!I>wlN)?B`yexCOCqU*p?a?DbdKJ;;8)G4oKDUR*FS(lJw$f_a?Q`U z$i)_-SU;3y>S0?HOaCtgG>m9_o`sQk^hEynPLS1bQS_*${BvxMVGW!b&kmpXM5Wk8 z@Z2Qy8Hh2&4q?*fzak^)mXnujwCdiYr}?$`nK30MGxDL<4BQwhOsV9rmbZ&R@FD?& zG@yP;5xj2eVU{t+NPv=+Z^828Ue#Z>+&5FYw zE$M%tM43EAdt`Fe{zhiT$$%&d*4Lf8ftGvpADnzsgj_!B*SWKw3S*Vt{*SilIiQ2S zl__O%GJb0NS*#yO+dMX9+^#*a1sCtZ`V*gyKP3iMeorL)8dq|tqKhT8Y%mimgEj3g ztMX#8bMnxUW0W0yJI61K2L6?QYX=U|e`L;{sx`3%gGDES0*h}A@Xg{jaimhU1A9em z6C!xpq%e%{pyvu>A!JYBu!F+D1eDt}<2W}FoA;}wb3EbiNYsq1)w5H9LdFGR4|c!I zApL^Oa4@2Bz0x=xDd|)g5VWC4pX52vLUBgkBds@0QI28&S7ohV>w27VlXkBseD5yE&Drz|MOnfbfyo-^!%QD=lH%b6cg zX-rClIut5o$ri~EzSg;z(iHkQTd~^!z3=wXS6&@ZifB<7B_=u^F3Eg7^qhZUi$ayH zc}U-rC8On2VhC7Ndp}UdH~H$3o7$!aa8TvtXH?OzlU9C9=)BDHxqU$rGA7%j*hV&VB}?TwF7@(Z-$80%U|`)_ z&f7?TgjUFXZ6%s{ZS_>Q^WvmRS?1UNL2(E>FGKKrm4n7gU;LHXozz5Xpzb(H7A!;B z!qy!=-yEY~VJsnkKpieod_O@&?pXzP6}&=DLY`9ZmVN^r3s^nEr}*5WwC@>WWwZ zFM*#)e$H%JnfcDpa{!4lbB$Ve<;3ArR|Yrbg?pC~gt0?-8hdidt|mEpkmQCn zW_gK%k>+PPJ#=&?f_FctJCJesk^BI*mHKXA15`(KEM*ITwUZp&@MDE<5Cj{OWG7W{ z^_(t|GwLIh!i(OA3DyDOIsF6I0o6PV2-`>mksAg-h|NNC5B`aib`Qb%5*ofUYB*{m zT6|?iT6R&NB{2kxDNTor$m|rrKDWo%{reJ^q_g$Hz1;Fz3(Ev5Dipor{b-iuZo)?QeeQwP(> zzjGd2h%*ZcZl(XJqO-8~hWXkUUESY+K0yQ9Psd3Yz5&kfxmUropbWkYmpVp?Nh+>6qT`!kF9<))v*^skWf+s_Pa z*zzBP$~rXcX#fPRGoJxLBE(0|Eov{JVLh(EOMe*C;1GIC^cN<#+rJ zeEu6e@svdQkIC#o)6v~AKFU>xYNYn?djDEw^v9ccr}>^^xpch5VewL74&2*g3ky2b z{bh^&lnuq>MYrYUOld&LN$N?`J5F7%%kim4S`f2Osbm>eV8MI4z2AWrZ&+h5F9@~V zG8#*UVOOcyTPL@xZ6)k1oI)LXlcVUTDwAXNp{@r6>$k`e9!^kIF3-e{${d?#h|_;I zBq!xEQ`w%s;Y*imIDhkYi?cL6K8gqzD7SJ_4{dBASP$_3``O{FiGwB-)G+nEvjmpz z8%d0K+XN_;533$Hdvb@KB;TRtvd%|q;C^AG(FOauO+;(x&>+&5j~5|C{cFM!9Vo0S z%bN=$>YAd(e&?eXJzp4t4_`ljE_{K$)^yuMVny)yPSR-3m6>KbOnX4d#Sm#Eyc|ji z$`*0H-HPy<{|J0dP&_T_(eB~PoB92KTHYf7YJ?bPIsU~}#RxOBJFa08JQ6r3@v8`D z2129Ub(1@|Ryv_-y+6bH`_L|`Re&_}laA`h?de1rZKuN7VR?Xr@u4lv(L;B=&B1#> zE_{dgGPHUgtkp7its+q1VQ2S!xKwO%S++E@2>kvqugpLg7cL^Gu|E7>bRN+f+vhRg zPJ8s0`P{IWv{>}PPl0V6=N14dMdodoLM3{|C+OfAq`9hI9}^y`3$!Z@Tt@E z?1G8<6ZCOxq}eFG=+&{`z{waEm=+4JYkwu@TW~Q>?aBG5QK+gvr91YPbTyJ(`1ao6 z<;rKVft*@Gf+K9og%)mz7sD}Wx+2JIYA{nWbe$RQ|4`HYv}>M>Jk*pTZ5FTyLo%s|0CU{tN& z!1!=Md~-WIvzvqnO=UZNgq`?QQf+z49VTe3aHYtLM*bx}(*jFZ6L?W+`Uf+y4*C(E zCJ)`Pwz(1zeJsMFlq)r7y`@&uY1mugzNyNW)Rw)UQ?H%p8O5A6b;proy}* z_}AzyY=K1{@o&2SrT(=R91gZ!&AE`2A3yiwwjP#6fPCyZW=2li6tcND2C(X??fykQ za;^G=WQ*sjwd!MX>95H*y?8&gKAmCac>AuvkUabW-o~!7g^S!B16Ha1Rucfajsh=FrNc z;V+uar!GjVAkx+2#g>xcB2|)`_e)|<9xte)CcV0rg1sUoR z|HKOYO01)G@3chYc|gm-s_rW_|1>6-V%P(ganX*@rpcjUhvojdLwAfdMG7ufcD;lq zWDJuSEW=6+#JJfHa|bGgr-!B&4WhckQn+V2`9<)^Q@_mEzJ4dw7rK)Y1{1{(!?UhJ zi0piUcfc~Hi6;td*tN$NtwX{UnA+HH>p`&!RZco7eFaO}dk8@5`@{+D?coSWs*wbylXO_EK=KnA%qtD9aY#x@O+OTtOF1BTad_4~NUmPPI|B z%iAh8#1zygJvzG3PCWNChZ|cBpT`FfR?n_JEonFOytI?k@#s@Qa zuN&H`F2ifte?{#G8oHM)()N$Kd8X%c7>CmcUnJaet6N|b`2RG|WOJ5j92UK~?d>#cCv;}`U(FKLiGS_Bq50T9DV=tB+-b3w zG2*$`t(9*{AJR{a7}3k}4IEE@9g{tgfP}bE-bW45ec~Uz2M1j#BIK|kbJ#p z%CUBlS{sG`+__!ysUu->=PCuGJ+PE>R``zUtYuDHjJj?otiy)`YPE-2 znIXs)l|eZNR3S$OftQ7O+I|Eh=6cO@5HBV6@u9+`JLQ(rIq&Md8<&+d6FpUcEr9J@ zbiHUK;pTtM!&K2vvMnm&SJ!3th4E^e3Hz#J$V7etA?zFc#ahtp?PMLUz>mPPKYwh3H z2_U-qn6KfDehZ2@9?V?h2aZ8D`1wISRA~h2Y1$ymBN8|GjQg_rNW&V=MSF zwQ@dzw?RHhtiB_o69J;=3BYWSV^flaAtdyp_SqutMn zC$KaZe4_4m1TXwUWY~bo5{4t)%BeK|2qS;wD?AVn8BM!Y-48eeY~`4$J<j-g`aQLNNQ zi+~BUbprQu1l*T^#=Zcc7GJL+aL=2G%b1-<;myFe-%rHNDva7uY9+!=HwrD}RFwGn zzxxi$C!i}(T?RwELD9x91*0B6Gklhj(D(ttod1Zg^8GxxEg-1C=1Ba2IX0tUeaE1? zwBg8ZhXyZ^+!Vmb3Y_~z70I``m2|zW^e5cACxqc$BxejaL^aY7;ulniNdYdNZN|h3 zwkLpV9kQ3Q9aw`f*BLna%lh!S3VV-=FkCX&*6wtv$c_eDT{S@It;Ej3)zw3lfRC73 z15@QzafFk};sEo@W%IPg>dZ>G*Q(;^l^dwCCJlOx_Q)TagZ=ymKzM# zGsDJ^Mw|K_!Am&1i2a5&!~dzTFfB`P z@eZV@fR$U*igT7o0=k9RTRsvb^(krg^5q7W9!l?eU6LINh4*!-2K_o<*Ue+yp$_| zdOo&%=?aREme74zzBSWMV1nv~6Su$$cA+_Ys{B}zE1D6&YvAjsEzk_q>^SVe>h6iNOXjEwrFNQK%Vk{2 z?-Aio3vbjHVKLJvd!nm(;q`GDt@;m1MC4`rB@Pz#K`Q7PHRTE}hWIJ{>&}wfG>2x^ zpr_5aD4jMWuV8ZkPDHXCaM8Bg7zSeNWQ7Tp+oTJ$&BW?b{VzwrarSMAK7&Ri=kjov z{ZzitU0OuuJ*%HM)I9S#DR;bY>ff8qwZN4Hb2x5k_ERIDYWc)U!=g!`ma!7x_vY%Mz$4aSOc05*EPIFwO`RpJ0|V1 zdj=AiS?yC!ACSNp6H3wonxHyrq+0X_HXwFatvME$2<<-O` zvxlmR6;x%3#-f?SSbD$c*~pvv8)H1GDhBMBeViO2>g~E-mmTVo(H$Y{J;hVmJPY!! zYvyi*pJMA}H4X?_4e42L35cyDC1~z*M~zvwW{yK=**R(;rCbFO^Frw{f5cW^^F}YH&g7sNVvn={TzSFASe4wT zEjNT6Io+3q{pw&qEjc%IA5LC0A8DS%8M=oCi#w_YoWrpT$O>uttj~f%Vg*bJUZ6qV zTc*oqgk0=;{j-{k%BAd3Wpw?iglZFf8wgf7ib8pR6^Uq<6h+p(3d;GXlt7ei9rvmZ z!hL!^rhaBohh)$A=PsxR1?Bmx(5hef|06;onDlLcA@$Cd#9Qa=EKl_>!RATk*J}+{ zUbw#VKS)9)ORbu^3YA28_{WO6%SZ&7Tr;ZqkLdcCr;NsbIvg*CI@}krh6JiNhBnXkL$y~w@a>|TE_tca2 z0~4~nj@4%Pg3D!iG0RIZpceqeuxO=IS)EKJ&T6|)K%b_e)zDP6N)a|7 z-;K+{*Rp$MoVcL^*)RzT?`P(mqPn$RCJ)?=qQO!|I|vO8(+Zelo*lglxWE~s`dGMO zWnMn-F0`VTj-TzqZY7ga8lPSlq}%zei!f3BW5{1nB5bJv(` zsiD6 zE^PZM$NbP=Q8F`QwAiA47%V+V?EJ>O%T3geWsfl-9d$8)LXiY)*~ZXRc1C3T+qu%0 z#Aagi2JLDqMw(@$yUr^0>hvQxnCXO&kdPUlnky13-E6HTBDcU&g%hBo)EGg%o{yIi z+l;&H1n+y^lC}Vs6`=wGob|7bWp;~>Q!Xi$jz~8WVRCoUwzEYRR8WY*BgQ5gfl06oF51RJA zQg)>ALh<#ZI-=l5AoQDj0DX8UUvJ#*P(wEj<+$bs3Fy2NWB{XKGipQ{ZKl9HTDrPf z16Q8IVimTtuXVVRrsIDiOyGPh-mx&vuMtZjU%|T8ehoz0VUh~9)sqBKtpBw+${!zi z=$f592Zsub*2)nEo?m+zfynQ0?fx5VWZ1^TWJKf6l85i>Jr+HO%n}*(#|OH)^Kfn5 z_ikW<=)h4FO1u&nT%3_RT5UN877H)hJufp+pgI7|QI5XA5Nmwb`Kv&=d>2;p8C({^i>wwa8oh116I(taoGqE>Jt&6ib$~5C3jC0fBb5e1pp5h3PL<$sYY8dC=l2Pp~|=911_ zfHL|Ee^a1=o$4CMSlnfqHP$Z_`FK3YqJ!WXlzlCudtu@AeSwYEE~06`D-m#0Hn z#Xegxer-j`^c(;HN+-#Q{A*E`5a|V2AhfC|h)6v%o4i5T_!tddrzGhblss;hCa|(7 zsjk)4P{sa42-wQRtMDmq$cJW>?H4d;d~EYyt4HFnjX&pg{s4FdFjJ2a1!eTDCYyjTx38mdwH!LdctM6Kkxog~U_;>re9XvNA8kBpKd^5(5<*#s0) z@4Tj!(usg=P(&=uzLDfes#VozX&+o}CldVrqFoqMoYD2Rpk6W19Y zs^xDEWf!B}GdktwD|{4JKv_NhCUjYfyEScmoN&&bKYi&?v!6{hj%yWE)^~gr`BXW6 zIFqw%jJ*7#|I?WtIwL14FRR-mpH8me+R%=}iv7uW?7iZTvMUpsN9{n_=513DZm4L1igJOn{j;^Z1s4!uE9SCZBT`X0Bk!bU+ismW{ZqD z8^vgS1UEL-_>WerLiwujhr>aO^wH+WefZq~6;iMs7&vy&P$3GhGO-KFf7 zdZ!a^I#;}u^`(1@HruYwz|X!=Fa6ME2w=CXRhlotI*4-k=`wZ=OusF?D?p%*L?S*hcJR2%Z zzWG0Mp=o1OWKP~#RWKJznE5cpM?dX~#YX?(jK*TroTvn+i^tp0Sn`b=1h|(D!6s>C?Nq#b{u}FXpdr~}1u0dVbQ<3>w^E7p|YCzq{M4~PO9@-7m^RLlYMNzMqMQbW5q2Ay*O68L zUCP$xw2i1VSFWwwyn!~G(Yak13E$z^LP3b^o>qXa84w1ykbyof(40(4ho3_|Nf+Ie zBNqDC8a0TD_8Zx#efjbw|3nfXxGz)k(LQMSMmGA?>*EEeFwBiFxZr<+ZV;JA;R>kg z<(AREOku2()*U^u&~OP7^)zfk5=_kl`9i>@LLwjpVu#BWqC%b z{O{_rqnbqKtiw813s){Le}a&b{GK*DDh=l&5;`YhrMvdBlZ_FssZ8ahLoUfuiDCc`ja(mX ziIdipj0EP{Rqf{sQ(f1DHlgYEe3Q?Bt73~Q+~o)2Uj|^?R0^Uc(54uv5#lZ-d$ep6 zmh1U0R#u;bhp4stnaQT-I}W%?JMcPk@pdbn^R`rdQ58e51I-n3&kf_ac%TQTKFmqDSw zu?-h+6kWe>y3L2L*CL}wfQ14FFp4OYJ5h5D+NU2PVqs3`sIA5I_+I%uM)!m1&>l9g zNmYPHI9feLUT<1C3arg-^=4b{T>Zd)WDRy<6$Hk$%figd^N*bFN?`_N#tGP6V`$ON zd=n0A&(@sL?#Eg!*-|<5{P49omaPb`O&5>KBbr#<4;Yu`V_;SGAKuNXp4JC1z{h3P zjCf`4+9NOKgy0-$CR!DHRE2YrxGa6&~CBa@RlPkF*EiyHX?OQ91? zxMcRpFzS&91Ymgg5CIaQ*-$EnMB8j;IsC`mKC5+>48If-u%2&#>uTPoK1Q|~$tShH z1RE=y&rj|9)a8%PuS2(|@PZ-?WFfV_w=c}&jD=i2S9+L7jaJUK^GM@U=P7o&EEl(0 z64Lh=Q%N7V)A&9f|)piQmXthb^-i{;%^ zE6-6Ma_TaqS#>T!nkmNCx-jrXy_SBT(knRzt@z^<(_ zIf)iO9#fVbWQiTxLK02Olz1Ah@LP5x3}RO@Q0Y-uin<^!*XlPks-8C`o0hc_w@-S- zf*xwxyi^+Qe?ty_yNdlaFA`p#Exw|kjFaGt2&TJ&#fIh6_3vG3A3vgVw|`&g7hR}_ z5uefA<5=UojASww7C(F+zvN$9$NlrY0jav}ubYLkq?XH@@8*Kig?=rhC{0ri<+bW%vB7U0$gDv;CPk^ z=S$ZY@A8HoK7mT(prx=Na`cceo&7*BPg^R6y6zDHOfeKONkkeW>(07{BcIr|OYYE= z3!AJcJ8&e1`3^iDLQ734^rBu8c*Of)<;G9sn1k=1C{IeA*Z7gMD%gli9zLVzMH9yA zw*-e|gYE5(u&UIU!4q**I;0@l5zadij3W;rK7S-`)`HG6fVKj`yteyJ%{pQ@Z7>^~ z_;i!;J0hxR@`!c=6ATjlWKh=eXU9n|wBL6XrF9S71YKy1-BbWfYG*3R;ypgDRk7EZ zpR`tA#cs?*weB+S@)G@KY<91O*El7ViXTpYrJ%BrXp z*qBld?ypP1L!&}?yHut?bLKzVhi_ppNp@@DNIAM^7bH(rRXzf{bS9VYS40B+LbZ#; zq*3{L_=LBk+fnJO406mkqqdOdJ=Hc-tDkqFkCUV%S>78OCfav(Zh2SC&IHl@?pQSE zJ$Hg;b41Oieu?g??Dy#o1x~NeyxS_lp=7C7Wb$@7` zBImMTmmeln&qvVW?Sf43!W_e>Sxlv*l$~ufCRS5XIa|A4T(Q9h9-NmU9&VK;d?<;} z`GP0%KV@`=C6y z&Inv;whT9FDi(U#YB)DvbeTvL({9m~bz*%e0r@%iULbw)mQZxw; zszRhKr4K(caP?!JO>E^)#aNuv7dH82c=0a!dH&8@DBt+DWsUKv(;&lO*XVZm>tfSf z8@T^sJ0E(pSkIqLOOqs@=gbK-Tp21VKIAR0SX4o<5fYyhfIu!Gj^P#yop^_DBSB05 zEP(3Jg6LF0E$P3I06+T;giE4nKs2z0i17yo3UXDFuHyuD<{wB$XEZzaSympOi zG@;-=n6fv1H+EE@SVWmyOpfJ9rnSG&j7^@ND)TNzW(aF#0s}U@b)equ zh9WWx!ueh(@RL;0-vK9xHU__G(wv28b?}#R@TQ#y;m<^10y~+5c0BxAn^3DdS@da$ zd^+I{iA6d|o^+1=9gli&R9A1Dg<;!{^vn!yU&RaRu<2KV_&h-*0RYU_s=4l;!V|Cp z%3ojUc~F!TVjeqEb6hRgg1<>&x~c_2<0XO6M0r4+Pinwg@X zAdY$nIXgvzN{jYJcc$GVa!&!emPm2}R8?gemWk}W`vaM&Wkg6b&$oJm3glGb4 z_tt{0`j_t5dwX8WU&;pSkr}8S+TlNz)9eh>naDhd2y9Ugb#9D&a)#$MC=_dL-<2J@ zgF#@KuF*4tv3@aMRrT{{`q##%Bov%;P=VAN1IA_+|HQ|(2+}fB$uWuZSg_zVM1#)D za6Ub6@9`0&;dx;1s~icmi>BfizOdb}v8lk_BdQGz1J1F)#JH}S;scPPV#6Z<<8TX& zfUN1+0N>&|VV57}zMVdKP9MA2%&@fJFgM z_TmTfSOutebr&i+I9Hh68-v-U8zGvC=UewVut zr6ZXS!dxQ6Ng^kX#i!COzZ>r@fd71Eobm!s7rt-*JdUieXr>STP+-&`{qW{1$_w?q z421Wd7x%etCO}<_OLfNhpejUFlApaB`3lSjagF!Uh89lq-9N(IQ>cM0>06^PF?(~X zr8Sw4UpB|O)+Q_Y7uNOo+D7V`?OCnvDX1RXjCAJDRl&*90`m26|NVWy{{2za8DX$O zAwQ;){t7vKn>+a`F}}YlWM5G{$iBc;R!14cNn7z`m0_$<@%ywdm4cf z`1~(4H_wt0HS@Y49>(66RTPT|)^r0Lsm|rAz3Js2<{@5`kiJ={y5)Zg)O=%W(HsT} z_sZRDC4}|-O^#6dZj>ewfMK>2v;Tve=vMi?XI>wFNSIwwXGI_LD;5k{a=y+>Y4F#P znnc*tolJW2Y5SBTjcM?$V$D=KVD!M~aE(AV3X3)d;Oq=z+1bP#T$E6$!vzB&hmxxb zvcOqbKEkm5i6{trHg5y=a$rWm_n2aO*+ zSQaUccv{}YMJaZc{xxn-2(DGY4QWYC=bN+cug71{?w{jkUWOeuJ=`pTxeLX1b3x|A zTeCvnOK(x_mhbYYjfa;F7?u!=-%tT=z%3VnQ2(xY#LMui>K9orleQ}FmHg#)YbB== z*0$P0gEun3EeTOf&u`IL8DhLb1u>P5T9Q2=IVeRgy}E2lqx-1WmJas@iY?GK#q6x* zy#a}2PvyMdQ5=TE=e%3^#H^aNs*I!8xR@EH6K+=GjyUzo>*M+UjlW6Kzcva>o0(Z0 zFm-gyR9ASsU>>Ie$@W3zNH*kR+s8~ZV^NkV#$oZ?A!pJcFAw{8IEYu+cSM_HMT7_Z zO|DW~>qzmO%%x)gln7LdJ~Ji>hOk-CSao&pBUKkJD^!t(Q_>aa5Zb(Yreo9Pe+wZO zck#lzSnQTp0IMg>h2irG3a)TnxwJ^XQd+!dIrEEzJLNZZ*Zuz@0dKem7}NzQuV#FL zeyDgrsCO1m>DCH)CuU07{(s5E4tRCdxK$4$aKO>;9yIRM;E+5c+d@UN?u~V-@4ojF z&L5vhjG}@#vZKvs{m`V-05UCS!Y;K+K6Lc-|T$yvyYzJb;JUfC_Q#8*9*N*y%uUZtCSaZO*bh75u~ZJw+CM zxSyRY2xT4;e>dD(D1zI>*0US^)i)Rhl?2s;E>tTX(QFn{m;ba*0sbo*0FpP1CHfdx z;T25fOK5tj_EmM3P4%5lfrb}pL7V5TA?$G0$wnQp{eO>lf+}4JO47f;um@h)Z(j-n zTBraW(;qNsq}35vHteTPvIdvK%MSw0K)4W=0EjqPGcYu00rVJ|8&VXyq$_1K}TI*gg z0Df%mr{+e1HJ{^9|NlAAf3S(-C106~_H(R8ap@eNJe|g}$V){!sTHvY=NlGees3gT zeb|VgSN5#qTu&J|xbHd-+z?(eA0QTFi6g0^ZvRd10u}PzJWpepIK2zrvbWdT$~0Oc z`fY{w3}$P9C)V8C@m8G^X7GhS^Nn$5A|pkAS0DVzc$)f2eCFik)YBi?&~CAHh_`&D zIY(8(d2akiToH^@Yycr_c%P||EKc+0+lmRGCPH`qm)vKI&s!*)8IRF;3n>}Y72tX4 zSa9u3c)?A@x>PW&2l`xP-r|lL6Oc@GS3>8SOn^PbqeU*g(_EOG?rYqmJLCzg>_|TD z#XF|i%&c8@n!KuEfH<7F3WWzHPO+5k&NALagzt(jP6rtrYcCJi( zor4T%TylCjZ>;M?BOG>P0<)`XJdgY(6()i$nWPWb20Z#if63T{EuM0Zy07o)TX^pj z7HRp)mkB7P*H&_VLrn2CpdHo!>we&c>OH6`d-T05BoX6{KN1%H_6?CPgU7#upP0UV zXs@GZ4PflSVk6m2c~}DnJAh!u5^DKeLy#;xC4B~rpDHA;(4$tCoIb-$EUVkD|D|XI zgmfg_lbGxSX^5_08>&wVK^51uK?R znw=I)JIl!FW}ca@X_@^l&iUg!_D5^peE7Uy@7Hx*&np^zcqg%1OL%a3f&CV0ZDXN# zqkR3gBFc_W6G_s8pz}S9U$@jax{y0XN_rC$tCj#^Bz|eQX8)6dJXL^vtkv#5pmS6w z?4y0A?G#@KjA>M02amsBAZ|a;A^R*Lr*-eC8~fb z`P#gNIzwOgo1rT>17#8qzIhAO^LMAje=S^A1X9un6qdVG)l*N#8s{hr#oix@3uP~5 z`J*1M(7x^^+K$yWN%C5FiQOz3tGwT#xi-W8o;i+jmx7S#8eFT}(#}&tXh)Pv9oj77 zF(XP4qMM}$lfD!?TIHVlD2!1FyT(Xs+&vk5xqGX(db#HjrH|)YghgJ0MB;;l6}lPE!hZakFB$0N@U@mV@6%+zed6=&EG8Da~EBzuhr%i2%&GCYCQ>pX|$fuSqL zCPJ6VO-TN2iWh(it*!k}GJE0ZmdVQK*Y1%#M}qTDcL&q|?WBcEK=}e{RXYd;tbB+6 zEOZcd{JY^0{nPZSWzccn1k#Wz?(ehoQhT03hK_QJMDPnIPm;A?G?}qv9l2sQbui8OvYpi;&*aCpXBR zB~N*i8g@)pn#|f#^mkDD)Ta69;N%cKC9t1O?c-s&mO_eTqxI-(MJXIwvsjsR<`lP2 zlfRpVN%S#eBzQln<54fAJixE%*YRyx`ShWPyHjSCn4pYFZW~@R3S;mw-KF>tO-fla z=N;e| z@@mEx(YA28-}XF=zmPlylMmIavi)N3AO@xC`q z-02)8qXynP{wv?Wlj%jkMdcx3pG|J@)<~vY*LR9(!3VdMyM+@<^w*|~0)s;RoOW=IeGl+o z;4D3-wpUD_isNEd^UhLFM(GC$2K6qYs&%-FTX9h#kyWCBLX2 zXFC>RE9zaDo*UU|WjU(hB-Dq^3*g>?pSl{p*-xnZ*&wz)!@?YZ1YkkLqUu2X+{QC( z#?MzXX2zQm7Oiu0WI^~}*QB;+^Bf-wUrBd8;QQNIpj!^6BX9GrVlRt8nP9QYk0fvD zrS=IPob$MNN%=x}=~YD4BT|!JKCEoi5ip}6(vLIa3$U)d7M3-$X}PTg!gn>}`qKc9 zC=!NBKedBgxj>$me&4H*hd2$ix4(& zrV;WVgeQG+qci3rvA8qLa0@2(o&;x9>K-OzneTx{L42HH{C}*)OhHK15I27)orkf? z<$QGH7rg_s-Bt#gFl@tR^(PEHBvc&jRJ=6a0$-$mxZIw;4PAfmoqdSzcX-~o`8)j^ zbCND_YJOBacI&l@RdS+rf_>C@i+lzK?gzw~(G$j78y9q_9c2ZeAD*LS{sYjqs?FGl zfQ_-h)gF;gdc`D5zp!~|qvjoEG6F+0C;es#K48oMtt~U8)z}VDC;_8I-;hX&+^8{}*WD6Q7k%fM;F`EdL%RV#J)>#I+-d zqEEpG9|>*x<*JL=sNXzn}WHx^ib^g4R}177Oh+PK?Ht*JT@f*qO8k-EN<1pYlBBNLdV% zZ^>$pVVQ5wZtMr2L%D&|*w{m`yV!*h`Q@ZzeGye2UMjw2v=wxd0B8r#%+IGc?plsGTG6E zPB2xPl(hu$-F&=M3S|ZQ=78&HM3SsVGi$sDwuw)?+R~yKz-e#Su797vH=`2!&C=(* z6)Dqq!xZQ=`qOL&M6M{5M=$ViYr$n$bZq1mbm8 z1c5H;$&_f=*5*DKKBc=BjJ0xUTi@#ZwYCFWOmTL8{(yha*JBpGq`E<$C<<3@rDk5} z-$X^e4q%>6jED#0@iv^zUd(vz52Mye=_Hi84;95=crP8o#cqOD$;f|PfnE4|cMx#q zyYeA`I0wjgdm_j3hyXf6k|WCxId;ko3(DqzsM&kw-h$C|%hs)}+sF-}v7;&4@M?Z+ z|A$I4In&*ynzmVjGu=$J6b{#jgh`0QK!CJ@tBHB zc!0wj_N|3mY^6vAVRP`9xui1gGJD>uh{ctB$5pczmwQ1dnKD@k`eiLXi`?JDiHA>8 z(U!3TL%d(#YLu(Hxz*$uZmD&FC{R8@ZKhw>k5|)wk!sPRGtqLFA^H)||9(DAcnQaB zV;|08Cd}a%$gXRCci!Q+%-kKQ4lRY+UxH@1b-|ZDLlC5U zZ+Hc4NFLaAjB0PA!wjG70!+T*HwY}9;5oAMpTqmrOgXg1_{7V>m(N#sLfe7L)*bYa zNn}1m{n5R^lOM_bq^x9+dJ?h_?=yZyL34wbZw*$G=!R8xvFFj24z~^h1y*y?&@Kno z4#=WF05EFFQ?-EI3i7!2+gCG=;^##}24I*7e^~96=1}0MO5U`*{G!+Ly zldHk6=y<8XACU~R4X&dBFyjqO>kE*_S>Zl;!~6Ddd3_$hfBI%xPqw@yDSM4=Qnxp_ z-8!Ki;*J)fBwX}g_`vf87tv*dO=J{6Q*ig>cig%L0k~eu;+Ym8Fk86VM^K;}mJt(3cNF1Z zM}PyM?@&=SKDe-~eL_R}c1U_#k6KfN{AS>^J($_Q$rEljn)8RG;!vnNA9nu1f@cZN zGe&cv+dN8hK1k^zAdo4NHCW&rXO14zLen|R@0(HNCsC>&^zZdsp4g=8@3o5A#iUcjM|cK7rBmnn%tyzn#_YNb+i8=5KzGSWkkYs=VE@_;VZzmmj+RCQ1d~( zctPhA|N9v&PeXt#A`lS$9BA$?M&(X?q|KNyJ&1X(x;o0KSCvt7U6hUQ zVMiXs?jRn8#eav2hF~Fo&Vb>fm(nLNtO)7T_oLdq!~40q=q4HdOflFlQv`65)Km(@LhJ78PcJ!NJQLdnGa z0F?($j29NWd*_3B)U3HUB*q}j&G6^4@ERrZmCO;|dAs{rMu@&{j$+uolHx4a0Gpa` zKsN;z&tFU{xqS4Jk7HNP3+rfuo}Lk35^J5uwZCro=RZP@`Am^_Yn(WXXSh7v2U_nP z)%!G_(a*hN>4pyjwn9v>OAnvqA<)(pB&sr4!Pg|!-YLJghg4hb>IBj>`}bTGC%m*# zMMKgTK{uvj(yX-JeFy6Wt2cK8+RGyu(0H$i{o-#0!=K}aq9n%0&QVQ$cn3JZIf|%@ zVDL^yUHm5Unv&}^+hCqRW~eJz1v}exI{^+#61p+#j_P?Acj6Cnf3v-?l+>X4biL^L z(gmi3(XsLmvM?p~pldeY715VZmg{^V3duljG+NUALPz|3OF3Rt;Vw|*Pe;Q6n z`jI)sVHMvAqs}Mb4dcnb`b<{Y~Vq>JoekNlM z0Q|4%r~g!dkw@W<;fy~-IUBHa6EdvW7hN-04OjxbM!CDn2~|N5YNJ!I*eJ&QUzJbG zh;NjYx!zcN8rjXmZi^{lLR9VU4cxHUg}SNW|0ax{Gi)6MS|7S!y`q+$5`2j#;VTB* zkFjS>^1h9!UVUaV^~;5CD(?kLFYvIT_TDQvA$$cBI*wm98YO?w=%}h)u8Y=}sJoGf zWJ+?o726Bq0NwQ3HlV>`_y!qOG+Xx^IFN}9jrhXa!o+9-w326K%{=^qzXY%PkUpnC z-KKmONJJLlJXet~%3_uXa8XyqwGO%sByU5VVC(3*%AG}LfrH6oi~a?BBn<1n8@otI zKz`fcMf*HkIxzjZ$AIQ|go%)TXe4f_m%rkDo4&tpn-p~dlp2AoFZc!-5sO#MwzPse ztzF+taaqT_k+XaSuV)GT>0_XKpYWK)h97SxDxDs7wio8^$c-sO^rlAf7|Y(Kl{f@k zJa11NICWOL#xXuVvZ3*Wawb{&V=O6ti&BtYEiw(*ScDoc#P4nO<$D8Z;Z1R>-qfm% z^0t<#vs9KOmSRy7`nFx;48E7e3KbgOimmsoK*P-oWL{~x7kr7H8{KpXx1GCePI`8^ zI2uH$$J!wR#G!46U;P%bm`bZ$u;?@*lZGe#5i73iuF;T(^2erkE3@6!j|&>H#IQ=Z zKoPZvxz9g;=Xw-`UwCe0FaW0+00(Y8OsRn|0M*+DIFdN!$W}bX-i#P%=~n|^1#m+i z^s@6jN=ntIbmIZQKlS1P$`7@Lha5Aqif{t6r(N&=(D=j+RLk8cNb1bWILd-Ud;oW> zA~d;srmbry(qZinPmv8_(<^*sKEBH2hlmG2LXZktdZ%;qY)UP%muuinODK91*lumq z?hTB|GCsvz*UWRZV_bLXAt~SpnV=8LOZ0T>Ai0+O?jiHLT&_U4V@g`~*S1X_H3B5A z+rZm7#;VM8=_h*K+<5`Zy@@^#jOkBs0Wqh=*n!^wwGAl;bLSL82}s+Aq>#a`+jfxJ z(jtxmoCEUuZlZHO&)meq$VF2X9frTA=z4kd^z!;NWhqK)Ry??)ra~cT;kzHjHECCF zwaWn0V5^t0G7QOzy=){nnX1Fyg`ihj+lSs~klGG?iRCL55yOd@Fp2{XD3(F2E5^)<GU$W2#ec?~B6ozLC4HGs%r)!M!0*t=64;qp?QgZ2dEQg9_xZvTvH{Vw?<*vEz< zOlxWlHwz690UlPA$fD+~Y3=q7J86I*n9w+=t7UL#U@wH*^AU+3Qm6GPl&$6W_5vRu zd8>88b#SF)I$&@hPd(EfpJDPFJqE}v=@89Q^PRFPy(W3#MzJ1Q06sbFo}x-a_1cdx z_Fa8GJBuIUal{xlBjlW}K>Qj~69Mgjs`@n;UFbXj_WV}5Lxcq*%GolNYQxr%cKV*8 z*g8>N*J6mAhK>Jo+$!`joE86_B01C2t>M?h&&Xio&f}f=K0chdoOZ-oV@WI;=3Nx=TtIYZP#~X_6?5h!NPBHtv2Dd#3y3s0 zoG~D;K$l4^NF=DbaYGd`2b11*}-W4*_J0f8E?1>gN^gt zf%*`rHIo`N1*LuWD{N#OTBmuG0o%ZNb+>yZ>KE{Xxz#dJ&R=MrtHpER5;OKIhuOi5 z01T%kCbYnpAr6F6E|7sWI+zWOK5}{R$ryR;(Swy=y7>|9hixC8neAo@R#fSz^X3N} zgYJXsM$)fd+lzLXY8z6#)}rSYST+;D&3&y24=4=^m5OW~Q(AfS8sq*mD5v zb3}wXZ>6y|=MPf~6JgI5;I+kS8N884Yl;^~c6KqF)^v=7K3QXJWu?wZe z5#P?s1>F%ol8lIpl79Lh5i3&l^+r4#N-VXUZp>vKFjfAf*_fXv+%U`ZHTKKxftL>A zP3bcHW5)J9P}hOV`o)aRS#bG?o*~Fs6QWSMbycH(jqdvANi~5oaaJziQC{c-IY)&? zvB@19F@NLEP_sDg?*)yIX_2mx2gQH%LLQ1?3Meq2S>5^qOeKpRSnkGCrosYv5#^bK zK>02(JWJ2M(Z9*RZw=lIlS=FrbfK%m%iUL|M@68X#(tP5;Ey7leM5e8zqestY_pdN^O^q&8<{f^>M!Q5z@ZWXD zoepdq`;Owlet}h0x(5)0ED1~6cNlr%EE6A!*A7qaLL174u0W>+80`VF_7Ux!aKc9b z$M|u}M!-mkjm}+^Fs-6b8TK`fo@V;JJ(^k#{|033Q4%m=q{Y=a6&4F>e;jx|>Db(? zkiCde(by8^V?L17BvpCCPFA00eaulVZ6v+V>Z7O|H zD|zKlY!w?f@of1o$pw4BbN%o~;>~T+Sz1bPj9fW6QF&jQx{arLDFX)zF;Lq$Y2}Y; z?1iSC9e*9ZLCq4tP5K=`+sj-dL0!X1|D0hKhl2LF+crugt&zggAwgsi}$Rx`A0^iMR7ar;p0vR!y1 z-k$A@)jpLu=X)I^P-+GE{7(=E@gCf50gYm{Vz?q~w~M%Vo0)cBJ-8|N1_tN-6+5Q% zkzkrRql7r`zC6M%Fx^m;Ag90EwwK$t366^->761QoqjODKw+)S#rk#@8%|em-+-R? z#D$%a^B}|PX`;7VymsckDZAHdmw|jrTsqTCb6joMqF$eYUB{@}!b6gk#Yi{&ay27) zxA_s4x%Sl%gXXdGLP~;Csu)xJn}5aYtH8Z=0=W~ona}Bl3gj!2ZnwDHg@Pu3_}uQ2 z_Eb!t0}LJrA!*xah}7G$pOz%HjzV%RW3BY7K(Je1pY0+P-9Mz&QQ$By+FyUw(B*}= zD;U<^2r55=Uxjt#pkTC!o>?ek5csfiZnyDPdNHRdw(+0zu!YLvmgnyvxIpYz;%$~_ zT8SH92?t#9VKcx%*z)!9#p>Y?e=AvhooA1e2Bv&mc`W|VOLS6<_ z_4KCuSEbtH%bm}C9k&SM{GH|^&%y<&ix7z`0UGVOWkVS=AKz=;eWeQTqJy>KZNiVA zZIHS>sQ#ktAL<>%)MZI2FFZ4tjlW9&7G|+>MQG_%%@^MZ|aH!m6q>IiWnfM0H*Au3Lkjp*dyTQ@z}#-^ zCO6SQ7m9&k&4`iLO{A`zpr2*Tdc!;Qb0z<41eQQU-Ty1ML+CmuClE1*YG2uFd5Fm7_1TffLQb#T8$ zHZk{tw%Z#N1bkR?f_EMvju9SW zo(yx0OeWgdK#UF?U$iqF$foOsTe4AZ5+6CFI7mz~0hrh@6T9N@B|d zc_hrf%MjOe#kR>)@?&S0z~%S>Dfy!>J#l{yGh*#=x=}eq8c0rf&$|z$oyI5Z<=*k7 z#-0N?QVT#}f((9qJe)B31I(HN#Y2V5AtkOMh1T+W12+P8pMJrpG2wE?Q)7Tm^OA+Y{}bZ8|4(`jBXM%nIA36?!;a) zEMG|iNsIjhy3UF*lV3s#1`z2yFn4auM3x|4n20Ds3YZMwaF5_}HJEF;dr0S6Y?-5~ z`3J?XI<5ZPaQwL)^2;p~tS|;TdhTlL{^N=w-3flEN z6?5>yU8uc>mI(_J`{J!YtW@oEzGQF-^KG}r%PD_HHm!tx{GA{F*RtBO=2(&s0s|c# zoS^e5d+LNrBQj@tQfsytI5V*-S*xJ}P}e~?Kvha{ z8{wc7&mY*mf(pPNT~~}x04cfD!9XP|J{x%nwgjxnk2Sv~e}MPVRF3^)TS57$)H^?z zQ@kqInRfTjn8tl!8`3w=oTbkXht#%Q{3b~Mwq0a+h@ywEc;p|O1C|5oV&fZPFP6&d z0`(kt#aVsCQWL7vxw;^|%dA%~E0N~Q=WE6(ph(V_`yRbSlN2b2%8q~F{1a!EZRC6N zsC(o=`Y&qrvsbB@+O}w)a-4svmuu^;D<5m?{ziLifvZ7xK^7~7^#rbEk-ko#*t##D zry2vp8mf*OH=oV60x-(vA3&OjcumRtxgTqKeXZ6Gu=r$pF%RFI%GS4*k)C_OdUL*M ze5`x#5CVa~P(Ie;IeHPOpWTE~l2?_{$1CRY6+`&easx5~8t0`Tr7A9SFqbfn7`r@R z`F)}7F0cDpF_{|h62^k)0CX4nswfm!ExGX0^edN>qX~}WJJbM9qNNMpLcS}Z<0D;4 zQE{?ZyE{Xg{sUIStn9n1NVc$4WyO(nQ3mWTlMM;Vdx4BMAEbx?QDzv0%H8^LHs5PnZCG!(bw_`j#2| zMxk0YZf*8)T!qKzv>v~13aTUyDIR-bJs|`ETgv8{)_}q{T14(WdV`GE)B%!%9fp@q zS!P7|o1l}0ayf#0rOEec#615ijjrNIJ%9BB3k&`5@rw+TaKd>!nB!;rm-*3Ll`js} z)vg73LHa@Mu<}YS_@;TS-3;V{Rx8%GtT~rWYFcA(U|K5>shvtD-MPK&49*R-$gdB| zmGB$dGJ6lM6#@#SXz`ILR7TS+3qpscaRF$;yRRaPXYmR-5skPJ(} zI;)%ea@PI%DJ+E{R8e2CW2)p=844HVX|k$Zv~i>`BY8EX4u${``T${}fy2Un^$M=z z;|J)QwtKJo@0yLhWzB3j-(G|LTek(ovmx3~7zBY$%g4tr)XkYf{Y-y~NdH-1m!OzT z19me``LcsC$53kEt5UtdtYcurzp9+Xa?1Hb1u&uh+`nzL^jXz{$^N76L}y>15pB2u zwi({bOjwrIUso!gNeLY^lPf#z~!q)Tcg!wu%D;`$kH(~f2_Kb>AgVDEGJ zAh|UvcxA;9-Ko}}((gqDp;rjrq=j;!=ALi^fmNu4q{v6X%a-r1w_^B~|6X4ym6Z%E9|_wkPDT@Z2ka4a_uq zYwO4$K6KFl)u*fK0ykuV4fu!VlpYBS=G64;WYDu%5$KlbYrW?pG@xKvdzT{W0n7x3 z#uu7q1MmW9#rDQp9xW=Q-#M+NYdMUAPeRwV5B%!f$?@!tNNIG_rO!ptnbV-4b)jocHo6IkH&tm!`>$w#M>7wj5@b&xWk{k{RZ zYy6Ng5-n!3J2~P{%yv&WJU*76Kv6vBmr+lIFG`{JxiQ$z<`~c=GN>~f|CF*_$H2AV zc?aq$Fdvpt+A2P1K^$7Lstlh;y5v8?HS^2r!f|=}Ei`{CJM5T|k?gt`b8G|rwzOi} z`R8QNsy30Yr!A|lA5si>BP9^C$aN(_6%oGvf;4!3%t_}_W7_eo;yAI%B*=NJ8C;4) zeVT3SzHhUnRsQ*#yiU+0A0v(l;C4@o+8wQPVc{4EcI<0pLmrB7Q7Tr-eOo7}@RM9N z_UskV0Dxcis9{UeZU25H$v>V{t9wLG$zC8ltK31CB)Ises{diLkHYqQo87;IevG!< z`?{WRX!uuc!yYg-Pvfozbng|u;bCO~8A?`|YFFTm_=~Y3x+|LEHa(9nO6sI=mP0e{ z!v|mFBMzLqf+F#|BGuOF>P&bUgYCLuDq2;PEpD8i9Q2gV=E_Ndm)On%r@Ows0nYuT z4{urj!E%;Y^WVaOQKKhdp|f{b*^V`1_B7T4Q?vL&*&sUa?C;rhQAiljk+=mNNV#uN zV0xV;Kan8qv(5wga>{GosowHyR2v_7%pvS=yxc}(bvhn`)C1gO+@-Z;Fh4CYl;mCz z%hFH6sdI_#_!lCOgK1UihSxTo$9H2C_#RV;X#XApLyL|MX!QRXZb@G(=od#6oduC} zD6Kd#E8^nU3WT>4u~X|y#AIHCn5sKfQtz^lq~%@+zQoRBXQ7s{h$-R&yUqg^$S(am zv1Em8DF_)&Xu3_^7E==2(#wc%bb-#U*dCJ?R|~i(+Lf#}K2s7fbQPimOdqPM3%bPN z{w92)=nJmIcnJT=&SQwn4F-&kCF3sryX&VEf!JKl&p@?c@#OTHT9d690+ieQC;6w= zUZ1`-@^$Xm!aq{DsL4Gf6u)l9OB(}WB{oF0ZcAXKR{f}P@rrGEM^5^H>Xbu>-&Q6* z*Xzg(DNA9}8<;8C-nQNcZqxh3a&=3|Lh&8-XhY~CjBV1Rybzm_GLLqQyJOh1BuGmQ zv9G}=k^RjtQ z`#DDx8GJI{L?B%YRLXo)vw6FEoGLkRgg4E+rKQFLRo{4WW6)kAhMl$MHtO7g9f)YP zYn%N+YJd^6VsGHdnTD?#%xU3M49|$PXx^~^(BER4UPE)=Ei5!L0?~wrp!GW@WCHmt zoGA&pJJ0B5M!%gqBFzgtIXxFt-E~QuJ*PD3$uucg`t*_&nr3F&QGaSAWfuEW$}kFw zYgpJ=+xgDev?|!|mIs_KayyGqDwbqGz)U%GN&36;X`nrv*rf!ERwRcs0#&6fXff>k=nwJtYl_`lN*oVuGPG?&JSI zq)wr4uXN`K2n>jl?JtZV#4|B0TC&MzRonCKl(K#rLSp2l$ zQZPhP&@wV9%{KIdK@i-9Kw&f0xl|w!z*vigtEp^b$T15K>>qN==wUQR2qYs%d2qrg zdK<)A;-gS4q9!{PYjGm>Aol>#>}%y?E8cl)%~|@v80V<_TCF%kz#T&G>1{c_tr_A% z_#~ggq29#n``EPGY}TIA?2SA;y*R65={pEn4_DUJ%kofjr;aaPEa8`gl=DsM0XeKtkBTVAND6@Z^JWKY652IZD<+0QBHZB z0_&+jo={%Pcw+5_v?pqm{w@WBW&ic)x$3ww+H>GTgz>^iQ^Po)djq3Qc$fhffNj9J z-z@6j#^t^PFVk7dERPYMO)#b6tId>=7_b4h(m+E_w0%W@wlk^@`wDGkh<%&LW)fAx zS}C;zvA90s-R2hka(9(bRgPr}_gAx2J^MqG)p$#@UVU|AawUEbK5l0@+)d^dS+xIh zW(Geu3)uPLgNJ%xXkQ5sN6JyE^2myM-rX46!9&N~_n&bJTDgB*L}&J%09x z3iFlFr3psnA=|KK(8CmfX3pdB@;Wg2Zt0qhE}zI0#O`n?do6+G32*iMc4O&T<$t?V~` zOLuNbN1?=_Gp95Tsw!0VBcc6bB@*hfIE>(KEtZv%j?a~kgVVRC;;Vn`;}_Vzm==AZ z_2yL5xOu|kmwi?IL_lLouW^4wcw+$OJ<}@qAa37*Sak&VMkwgJfwo#fK`BEbEC}nv zRI{t<4jLCKsI|1svs#|}W_Sa&^H8DmR>h$CdYnnLpEQdBh5t8GD9PDIb~#M`5ol0i zdaHZewMOZH8=IP7f7?c;7Cu;WE|8O7q9E()#talTPMRi#53s#BIZ4J%@VIK$FzL9aOuwkqc4qHRzuf{^xVRDB=KeyF8JAIqO>)%unUkUe+pB zO{|d9?nu%iK?}qvlhda~hL$nN7U%V*j}@=#LE zkIGW@HNXt#`G>IEIl=_axpda)EMwS0(^ta39^4HAgXIa}IFcXX##{M0qVtZqXlA{t z-e{O%8=oo}lq#99!d@ZYrJQz!#!|F)DGY8e3H28T`u6qX=COd- z&qi1t(T+ZI5%t|aZ7!NFC=t}nueBBm{)W|^U0zVJaPR}6c=8E#uMR}kB8>1EJ6G;1dEX80Ww0L zAAy3uYs^Ak(~6?Mg@;f-Xda;czu@0?IOD43P8d*XoqXPPg{Op6=iG1UZYlqKjqIfY z@_3HR9ma^iZ6uzR*OHGahjn;rlZ&pPEA6q@6QFZ4*o|l1K1)X*@DJMK!Sdzw_84(u z(5o46%N7IuS&T}8)3b~t?}*rC_Zog%2M7K3lwwy*IUb7C0OvYpAk-Iy8{2&l5UPs6 zCne^xlSQa=d}ss*?~fWZ>aSumRc&)`(4c zr>(sCIR~5ge{6BRD=BF2dzPC0K5ixtfi118lF|dF6~K8H0x{)yn2Au%;QlW`xF6WA z$Fxt=!@U(ss9*|oqA*OCI=et1R=6-XEi3xPg#hV~2EUpPlO=5=!k$0+Cm9XF=$9`k zb1>kFcx=3dt0Ag~Hepkn!Jl>?&=nUaC4`;HLo@HamO=G6jy8a^u>UHaf62qc&{+>&5;Ax6AIJ#l1B($|4zeg2#U9B-^NCrXvG%`V5x)&j0<+quyUpd zQvn1$t8kmfK6{fpX+=Mya3SDq`qSZp@dZQrYaka=}Ej-3c|DU=|k?%C8SM!{)>e}kLz~H#n z-jB(dF#zzLr#W&kWjyc4@pE9X6tAgC>5I^d<2C{WkU)9he*WtIV)ThVONtJ-p7w&a z{{V7W)!2|;d9R4DqTQ#|eC{U5L`7wDy)oFv+Xf8uQ;*r10pe|wss5iNo!4R{KN;X6 zJ+l43tH6cqyl^WBC@OQ>+l@KepIV2zJ*f)h+|lG)T~Bn z7KD9VbUMu?E&%1$vicjiQr&zXpT+`=jOctSwylM^y#13Y0U;ilXAxl8QudQ}qbaeo zJ=Zy=Keb_PkkViHyko9?tvm&kpQA>KKte`YY$J_>P==^Qx@(I66+LUJ{)5Z-*zA%E zTQ{P5ka$KxHv^Ts*X)^_ zfQR>SKWgNF_?^pzTZ_HtPI>g_o`3v1I5f=}3uP@2vk!W32-gvpD5{e__CE9`Ir{;W zh8r;%{OBf^haBP-MMBhdKACb%@Od_nD_!i$C59R3*0G?CZHYEN1e)k0!2FI23p=_Z zaJY|FU`^A9$$v494*V?;!}WaiwRh|bk%EDN8IA7@ z{G^#^NM50IN=aEzDP91EDRe&%>7zNvW-P`i^r; z#WN5zquCmp9zx-OMg6KCT+PnwDcyOSH6MdYD#Yd)^SG z>n?;Pd}%YpXKT0cimmv_$wawt&<&pGRuJk=u?c+8%^(UxZCQr6{S~LEowoJfpnQE5 zeDH0T1%ng+-J2tyRCJEeIKOP9X2fTBBk=HvJJc`BRL4iczr=}0U(uWE)dR|;|ND<( zsNz{)(w(sFcR-d&K{>}0DJzY&J(r;{R&@Waon7qogzaqyt1X?C3n*}*CXU|3YgS9M ziEo6_`;iG$QQ!>{;3oD)(H@28TV?Zc8)0)+q{7Z#7*>)*`CvlmJrbM&SdZ#3^DOVa z3Y#%#_N(#vWZA+^0u&t=+ol8juN+x~#CND`3!E=4kbY;E~T*WoJ5O}!my@C+i3-!H7;_!480w;L_2>n3NC2xyRjUiZ-$Fr51b|CR{i3&SK z2@DkgBL<$7n0n0TtZJI@200@@m4l;4?+@+wZ}mOxb3PzYjY-AqjJb9KpZzz|rzGgw zHDdMg4LIY5|E_;-M{iV#_C%Q0M1sbYC*{pPswHFCU!htKdTUs z*jkyB*xDwWnVtXt&;d?r4KuEmRX7nX$UQ|Q5=szjb;xaP=hl* zi?;85`9jZ{2E#3+Y4|hD8RgVD=)|j(PGMpf9^C3hf%1Od*c$fS=a0MCPr-+%F!&B@`3Qxmbu$o$6(Hnf z-=9NLw6}mo)J=P0?e%knL$H`>1FPadT^cBY$5-WkB18fkG+43}P zW|v_doiQqt1r-OEkoLG$MjYoklLQhbbPd>HtZo?X7?K{LKJ4O7#S3Mme~N@&~%9~AD@oGIoyZ{0Nd>8;h!mynTPqn zp6IHJ%i}(Omw-ZjbH$W^`%(-*&LR?HbM8*VH4O25wZ(U71)${!EO;nU#g~uOOq;1= z{z1Teq48A7UbsR%lNl@AJx8E5+32+EX$#-C(OD?Zi)w6;u~KrgZnRFN`ghCb;He}?0uIUj+FbsVnhJtK)wa<#`ltF@CJ@w7?y87J6)xST1gG7L zvB4Kr7>?KC4M8^|RVA8nHlCak=UDl4Z`%+V5WtcYeAMB*;n#czkkB6*9eGa$xHgbo z-GJO(6?kbn_iwy*-?0sY{9)({5EUqhcNKj?{amE5t(=u(!8hVd=1Yq`RA0(2;D&(M zNDpFL-E5Ffun0oYj2+*~^)yy8p3WTrec?WU8eFyUdo;ew=Q}_QWEmncw@=Osf*c}U&8@+IzzeM zr!j{Lu+*tDE>_Ym?eV!&n0G0EyluVdLhAP&IrtO$+w_Sld089U#;;H+R~lxTvjefc zn`xe)R5F}@TCU@D3%gwJUivAHr;1|#ukGl!=FSy{*SH*1zEljC6+}SR>9ws7Cn!@} z=DU%Wcr*A;%;Q_7eJw$xwu;nfky(lcQ5}_=<(KAIlx zic__^vAGUBt9#k;!7cZ!L0*!P)15>f3rN>AZ zLR{EDZIC~9#|DgrE0kFEvYcp!efUAI_X&2*8%0zG|H`j`qNsLRyV)EN174HY1}_Uj zPe9dXjJthlIJN)kpVV*C)m9Fn7p`GhNPl0TJ}`@&OD4Szb`3 z_5n`#iK?7|Uav6c7WEfo+f(M8D&^B4VDQind9~$cf}AK(fAJo=4SKCN1twQH>sA01 zKTz1VTFRrorEq8ilv6J6J58Y+=E3#hVBf9Gj{u}2M;;rjr{bsRp&F-bKG$+Hb#%hL zi;|gWu8+k*%fct0gG>X0HmhN4{`M5zy1#Dq8_)j^?$vU!NOion#9`fRQj22D5uAW7AtH0C0l`s?4m4~Mx7=%d+Ji7 zRK1$Lf$W3g!_2QNK{J9C7|Trt!(Z+@nYwbN zdN34`k3UiHDakRgN0N$T;I|>x+IEn+*|ra%sjg9MEgxEH`r7cMj-IKk%8$+x9Gq{M z*|6nx<-G;v4(v-gHJ^~g7Y?JCst3(zUMsL0LJ5K?xH9-gaMLA|;U>di#G>8-x^5ra z^ly|S)&Y@uD!nSk^q-C=Y&bt2VvF(;xa6nnEGcZ{s2}{T-m=qbHA$<98Xd*pzDi z$6~^Q7sO6Qam!s2s@@3jqeg+EyXy|s_vqDrC8LXW1e{e|wRrXd$YbWF^iF z&^Mu|&3nuC#um&#!+^s@T<{hJbudVap0dA;(CXe2H5nOFsOod0Oye+GB~3x)*35q0 z9MPc5LFZ|1BiyELNZMT9GF3Fk8(X3y28Oq(6d2H|M3*26qA=Vu3^-eHHJq%xw-M={ zYxJym;9s-T&33P*fEqHm-d4!sZf$UGy>fLG3{YpWA+~tGV50|NZ(+RD`%(W1jIc2Q^;VDLOOK2!g6^dUQQ8&X%tJ74dsV<`qa9pJynhBVW= zQRZ<9D1chmkpUlP#oX);D*`9Y{4xh^DonnOglMAj-mm4K^h*nL*Zdnrnx`A&k2K%r z=xZsT!C!qHz+e>ztshUl?GeIA#Q~DxO8*x~7%VN;bbE&VEG^JH-65Y3h#M#+Pe|N@ z!V6{h4(lb9scO8~1TOH2_9yFI9{^=G!PauzyNeP@;S&8%BhHVy-$hwH;VgiC_^uZO zvzP990kBUNdXcyqr1(>XO;41@1MP>!uN36{*}=5%{Y+p!W5t(bQJ%roaoDmskU@k4 z9Cs{wr2md6vg0Ed%Tiev5dw4ho^-QGrqzao4nyLPRKna=+5Kh3>}-4$7A&LNXEkJa zoYE?Z(d{~1bHUh|!fa0w##p%imQjn{4OSgp+#UCk#FFhTpoF>AOp)~oc>=r?YO&Z0 zZifdgYi0@G(hKb-cSJD+0dyWs<%c{%h^TV2G!M?Xz72A+*JtVIdHRp}9CfjFu%PHF zywv~)WEJ5!VZa+X+ZEK-#Wrps9iJ{&qTkJQ$kcGIhS_cYTKfPZ|AI$)NKxkNq#<iSGFfCAhc+4#a;vRa z;*qd!_Z7*4(&wwvu)JAJ%QToRq(g~VEfPUIKH_nC!KW#IO^lC?{d(bL>%Eq#;TgnS zT%A@bOV=gcybKuD`f2i@66> zz1HxLc$XGMG(4pAf=f3-`(}e%BqKiG@NaOjQ7Fc8Q9<1hMjyfyU$<2H+&mBoxR=gN zCAapHQo!r(aaj!j=e?D}3P!M5xp(d@;VW`m#Wf11@j}2bXNnU_#;l{Qcm1NlrtqmL zFj)7|zcso?qR2_SpyOFeaab0?TJ{opH{9JTu@}a5wIGGPq-cS!nI!)q=;Urg0yeu_ z+&58CqrS|kns!X^z7oFJH1cH7CoOQ{-4q&T^nc~){I<;e1I;x!U>|c$I^^!q#?8A` zzVy46UbkaxKut=Ls+OTEXHvOo#tAleq3|7`42LUonG#km4dv^49@ z*)GbeUKcE?H~fE+&OEHiJMa2gNCJc;EE2Ym1W>RNB?6*RmIT>mpy=2s#-*BQL~SY6 zKv7Y-vk;IX5ZaN3(JC%zeWYzftKw2af|}N-h}J?yr(i^E(W+1tMSM^C{x#P#&()5? zegE#?_k7R!oEz?HdDAbUu0eR+eVK7KmW17(9v9NgspR~?);^S}rw5BV6@2PL8ay)V z!!Eb`PC||1-6YWyWr_Y~1OpAA^50PM%6r(Pk^OleT`ow|ABc!5Mw4i5mWeoH>YVbC zsi*0)JzstqP<8~~eswdGNtN$Ivdy7eg+{m1BQUyev2a7Xub*E7#n%~wrZi$W1`Aj&eZw9S*7(X*a(#rn)0(Xqr9OX@T^9D_BvP(PMolsL57l%go49oDw_ zT&%eN9;hwZnZOHvUfJf8&nV?-oi55mqB34o2n_@AFfDvZ*s~==h!YF~6#A`V+<;hl z=-@cI*LID=MR2a$)^;xVk{8zL&Gmkg%bFK z3;XjaY=3V)6ICuv!(~t}J$O4WZwXM?QaAIn0h#ZC;8aAA93jaV9(Db7_ zXvA_BsyKU&^Q>lQ+I%#(I;IXP*|ALS3G)c6dM>ea6GcTAeT!ba(z~e%i~$CAk%!5n z{ykfTn`JfO@=3Kz=Lst#{_dWbShqA&sO#;~0^b%JW7eZZosX%{f4F4s3lp{uR0W z{FYHGsd|Ys)mNglTHXKS4Y@0psy^Fp<$|G>Y`lZ^9AKf8p8fhR2D%1DHy6KFto5D9 zMs6wv$S#BxiSxKOIq(hs72fTEPf!c{16JERP~f-px@|~zApls|V#;t#X>i&LM#32> zJh*9+G-_+$h(T?dv7x@FTox6IQ5=>jDeztyT;0n`g?&V%q&$* z3q}7>`+hn2QV6z9!>Ym>DB0TH#Y2V@Hz8SFoczCVJrRyNd{^$e@=LO-bL``?+&>Uy zxC8eo7+<6!{M6(af^Z}r3%QtCTV$MrYvmY}q@f)8eEGfy9OEMKdW=R7!llk~_Z2n@ z4ScOE%_h$!9b*?-o9GkiXjPWU(?EQ-Ytuc|y0qMzVh&IfnDYx<)_Q_GFcVt`2bDI< z&O(6ZT{9){Aid2jTdgl0Z`wqFO#42dwic%`&f6Y}dI*f+XQAW1p=bXGq|P^WyL)8A z>*3(UeU5a14P|3Kjk(h1E5zrmgSEf@9(l=P>}DoeU?eo)iB_A%mjWIL32UrJ>+++` zOv0&imxS8-C$uRvjm*#WtMcTfT33Z54&nqxLw@HyCSDH~R9Uz-7ot1xk=w($C4P=K zD7{ppAmSJT-ya8%9OulZQfCSzkAypEzLm`jA;bfY775qnnV^Xm%Wu6`ZeWN)_gBV2 zd@8hDtf<;sNmjpdJBs`V6S3N@LI@h^R2O<4m7+H$xH`6&AkRvFUw?s!S^wO$hOo>@M$ytzjC3~!0EJvbq9izurHzfh*-V$K^j_tg z+!uLqNp@|Oqhb=wx#D?N-`NNnlG53UFy_ItEzDvQc~~#)kIHkp>n8=9Ho-(n<9&nW?=-oFxM7~N7>OuOzOxzmsr-%KeFvg{b`Yc1(GY=#~ zn~w{$KQfnt3E-Ruf1Ak`>;Zh??V0ImX@Sz2bN3yh0jT0c#Y9w^DN#h#5W##`hWni? zmb(r8EGLC0+kIz4H3~TpfE(bf%v>t+6|s@vtJ)Z6uylonnGa>Nl_fH4A5a{^r1aLL3#v zr?CmsCZZmm?}9jUxO)5yz8u_rY_KV`M#xb@U6 zOSX>aMznx$P}Y4*ma=Eb72#1O&KwF6eY2h_kobgW((OfqWOrtw+;Z=8ppw_ft!dK$ zWRX4t&Zo*t@ZmaZ0(a6j{8n?{?IME9r8%vfmw?-| zcy8`Z`;z}b%x8tD66{yZZm4_z7qbODAReuP;XrRv1z^lc-?JWqH_VRyU zZ||j}q52rmUIlPbNWQ|>CTXj1r}oO9_?~PuG*2~wwt(C1=X2Scv6601!7Znsa*&^a ztqua=!JrH6tmFLxBQH=Y9Q(Mohl-DWlxltC@pn>y?jH3-vsa3Ci2N}9S^!ijD+O1f zX6i?FY;>(tX5p#1?_N+|NA`3z>!h<+%Fp7@I7Mc9V?O2fRJq9y;Dr0$5TS=;C(&{a z9Ljn(G<^jE>&5HHoHrAz)rVebamvR3rm|Ne9ujdt{I>n~yy7>wYP&F}sLgg$xK5}3 zh?t9MdDVZ_O1qEh&D&(p38846EFP0(+d%eeO#Re3@ zXBD-hl7@ts+=5QE0rrU0(8xl0;MS&Pv4d!H33hsI8{(@_V?qJ5k|_$)cPRZ6vXTHu zAEUreo`ifJv^vzuj;zC??I5>7E-RTHMzBKKgCm9O$z(G9AOH9V-Sh?!MRgyl_DqfF zkWn&F^WqQq=fUy|acY^CchdYsE1}(rr8k20evH|XQ5ygqd}*Knu}zlw;zWBgEX;qI zFGjZ~8P91e>)22+{vLzb5)<{XIX)SyT@hBqCS?WzXlFP6D7T3BPUN8<)YL z={xrX1NYIy@Yk-ET>-f2f7ag%?K$6l)7Iq=PR}s~YZ}<2hXP>Y`cSEc8Sy^x5BVam z1&qsa0MvW(C(^5_^3|YAN;vv%;PBBvd0Q6$b**kk7!ud-)uA=^ZTnB}IA7|}q`eUS zK=Z29j|O!&vC^E;3Re+kt2bD#bX4y6)85BgX&ah5Z>Kq)zE8<|2R!xB&;u}y*_UCR z-LE4vEx(d99}{7zR~2?Rh5)Pyz|y9D-|G3^sA!bz#pnQ<^m=dBdz|4wyTEKg^~9<$ z2De3RHpY{DGnDd#PD7-J1Ptj zr~ju2@|W<9e($KmwLKn})68zv>Ur}Cy5Zv&K3r}-sb-z<(hP@Suu#8>j_t@6_yvc` zdn%W9;+TXN`yPB8VidV3f+(nvWT>XK{DvPpeobp9^tdYCoU*`0F{P)qqd<7U2E%T+ z3*Lzn^}3qFqt&Y>(j{+fU5H|)!Z&o5=1G;8BCLD0T1+4qjX(3uWaaP5LTSuz7&i~O z;6I#^L@n>T!Bu47iI3Cb{2HDslsS_{$ZRD5Qt6EUY=|zu2iH92y+@fRLQwnh9Z;4} z5n4dsv{F;ZMX}DSa^zGg!zt>(y|4Wj&ZZrvUZF*x%y*e;!~V)3Ea7kMq!EV!fcPi_ z6KsevI@~*?0)L7I#zXB4FEqX_#&0T^49?Gezi0oUh^BS^5oG+p{&YL7f}VGUCoL}#UMdi@uyq%hsAYQ5{(CV{Ki`uz zyPJ$uj{#!Vh}&?$H#2I76sFbn5s-Mnr86qX4mGF03a;y&y0e}G4PYya`b=}p%n!VWP<+-i99>{Y%!SFrUA z2B#(%d8`_oB1}K07wZ{EZ6m1?;Q3#Wj;=k?d!Ulux?I`(KECg{;Qo6e?JvOMIcBh= z-HEM#R%q7S<)Zg^=8bT*VKnI{Bi}v`o9O*YTo-7BA99^$ai#xpNYJkUHS1v`D{CcP z1UDM$e`X$a0TN(HvD|P+bMtuGE&WjD$nkBv1{8&eaftui|DvVy4&_)tnjXy@Z2Qw% z6nrOJK)N{Tf?k?jHH-OXF~Zf}Aq@k{wd4$2#s+1XtTxUR*xHE9ErBdYiu`5MC4e0P z!@YdWzTSn-UrR~yQu_0#zNEv9D%-6<;qB^g1zf(pAHzWsK>n3;L`wnO;IGCnzC;{W z!xMga$o!Jg7K+sVBycPoI;F7`*O$u?*p1$?KMc)h7i0!dgI(|ZUwj4EHiZcs>{Tx@ zk!htc8@h4O-_t`Hn2Z^b<^}I?zBRFC*`Sc&t5#XUIgpNYkeb&^v%J@R<5BvuJ z$uc3WuNYjvy&&0f#XQ2P-Vi8g;9kEWgf9W-^WC@M?+=-eqZ-NaKWvH)YoXq~h8gVw zuKTju0Nllo!ot#!FGZDJP|i>cv0%T4Wa#=0U?;GCJ|(T&j51%)s{Zck`i3H!YU%eJ zh%DaFROvEE4MZHttR*1wKNnWc$>F$)9YnjXztQey7_U@bV6^V3zu{x&8-wM+8My)7 zpk91yd{a4;faOyoBRWd4HkiwYh~msJE<=a<3@j}l5G?0e#*G&N-yCK6W%5^Pe~!j= zYb^s*_bA6FK+>7;UVnN@`naM|&zosq73Fv{*hjj->|%fmyIWT^{Wp^NC173Z#rSxE zxHAq=6hJe(!Vg8LQ0g1vU;)k-D}I10_aAL$iQtcLX(xY$X|D3Wih5cR$w4I`+?BJc za}aJS$7MCh-bm`1i>jOGo5;`k;H|wJKe$^<%~?iM73(%V!9&OaPnPiD39cH+aHOBUHI6 z2V21J%^RU!|4k=Ew`8`<31fxs9)q~>ua!L>``(6s<5giu`P;1iJmOFaqWCN0!lwR4 zX+#2XCKLZoYtWuW2(}Py0ZBPZrN=O{CBSQ#gF5J~!u8%EJ0*i3V)O*}v5=0Aqd%dn zA_07K#~cJ=TK$0HI$H_Y&06Zt#mz}O0_=9oPjUtD{m-dKVP?dQ68Iwr zl!6=G=+ve*07JXd8mr^G~}y1^;D20&*EImmj~Fh^W&~Qu(js zM#E4FWOSDLl=h}(Oq2Mlr>}l$|J>Y6vFrW;J@y0Zv*O(g z9y8uAYx<{m$<6327AP*q+B+0vPMlzXVM=UGmWONof3VYdcAi|T|=K3S*ph9YChnHT7@a1bl-oLlg-=UM=5( zhO&G6Z(u!ASbjl(3Cc=pc&GDkE;tX|!OhsOmnury`&n=)@B{Hr1|a;MRAaIFMAq%1 zE7$rD1gOptSS}|7tct|68MAMJb+L729zhBK+@0W|n*}H4bKuhg3vPsh`8O^*qH1efvwmFQby> zTde&)DtZ=cJEw~gvXxZjdiv>~Qy+Q0eEukes?IPNl3Lpk?v#Xv9aFA{1u^?1K9!QC za62}Ks@@9EkZ)xH@$z@8*Gte~G5uPlC#VB?sM36;SkXP@->$#A@sW%jQ2Z%u`%_9> zMIA72q%(_4R0=}C$dW3V|a=$kaJQ_gPwsOVgbW%0l5a_$3{)_bXRvRuVkO!Q?X2ejXRXHx+=cB<{WaCSYwTMY5&QSbD|&kPgwn7TmMcX${Sf zIh}$JEc#J1*hGNpHL{M+un)tz!VqF$tdBA-L$7)^YWj3Lj@S_&{Xply+82I4tR1KC zegCfbmmhJUvHx?t{+B3F^}Hnb2U2Adc&Ct2}ZI-z0oBGC&ILa)%MH zdw*pVGAF(JVM*gpX`~|hDui1k+zXc2Q`aLH6O1UX1-cejU#z~8P05|h zHg-Zro@B z4+9Z?y*A8m<68h>wDT^=wzdO87!IG*Hc44=D^@rN6$cZbo!A+OgH88Jvwc^byR& zzoyk?JJG@&H~C#_sTAMs_r(db36^V_uM$8=wgx7(C?31PDV^#nq0@mpXSgrH^I#=U zq9R4UuGg?D1Mv3j2s`$BT3f%Hla7n&)4H69)jZV; z7obs5DjmO3x=jW``@SAy`?JP91Eb($VV_MhVO+BI?;=Rg1o zXnt^IbDn5N1ryP2Y+vhk0DnQh1?kZKvTvYLvdtes+C-zxcYr%zZgpHr2-Trj_ybVo zMgt_{*F)OzNErZvz`J+nPdk#Zd7byD`GlZli?*@uTebwX4}Pa-m2T1841W!QsD+^t zwBE7f4jTX`Wh@OJZ~Q=zc8ugEa>XnGG4^tQ25T`NH2*)!i}?aF$t`>JLWB< zBEK9SmXu2s(5*ibN}R>CY{uZ)M=`(tH)KA85wCvz*B=Y%aG&1c5M8h`qS$`3D`PpQ z7?f{X!#ofycv0dFE2I4s_h;MZnPdG_(?suv1I#-M>y-LM^2B`)W*TRI&LvxY14Q1& zIG#FRisG$HNP=zwOaygv>qhLA65d3%=R~KbViHp7_O0EX!Sdg1;a)v_`3fXPgfqhz zR)~q$(iQ#v{a#JGQ?j;u{3_I?N5<~)_;@k{ekY)6QfsB&u-X{>KoclcZ8B{V!Wsk) zW}wDV`Tn?YQ$dxNtM~)pw=yR*H{dmxF4Wjp*els8WT zAIspQE=@flc<`yk9#lnUYToZe?|@{%byxqmY1TH5n)hsr@3y+7BoJ{oPiR|DpdgV8 z;(Ze-6LZ2dbDCRGw7Q=RZxwaT5kWz_0AKNmws7Ab0-x?GYEr#5)>FMtpYGeT&kcP; zbkM*yLHVi*&F8lCGkydD3`fR)>>d9tEYwR_Sa&No68#o`~JO)qYq*$eape5d)4 zkAd;z#Dz%8K)xA{bDTF9*NNE2{L*Y=&jUU#_H+RiT1bZGP}ddG4|hx+l20M6eB?53 zu+;y(2ub*nrY&@5kaz>J?=~xYGoTUUbOVSMTl z=Lv#DBBRDlgN)WRbB3q7Tl>>ojEK;|>5r&&MhnIR@_6gS!zmeCw$eZ$l-|Bu}D$NY zR>b-^9G0< zrHW1NAZJZCH8!o&HdYQT!$DIhyXuEE5*U46Bk>?-q3VJm?_P<|5*5JwPjPp>H=)g{ zK?in_gCAJ)c)9$Pt&8TOdZ1gBSZchSZ$iB@z0JqTj$HFyprjXzq3W5&G9VdHVS)$+ z=3YZw>lsKb`53Os%HQAJ^pMnXPHq%Q&d|v!F`NEt!K}B*^jKMER3F3MP zi(~~(yR3GjyxexPo#$~wU%)SI3f~D9IyumhIKQcV1Z3cJil|93PHLka-y4U|B7L|pQLJ4>v2NPYLR1wB`SoHd46AgyylgmK1@o#s=O0DEj!Z3ufn z144FZ6>?DZ)4&nGB>P?3-`(Xc+5_|(4EtC3X{p`I-hY)!9S zZJa$~X7to7yKB2?`6&ta>?Gk#o%rjyS2TYYZTL>G&+ir|il(FTBMJsE?$?erFsY`2Zp zXjrPScAGDHwD@DWfIZJ9Pj z4)PZX)Qhzjhyc(olr=3C$er%g7cx$}ST}PTjTMJv12)f9Fi57<->U_ad+ambm-c@m zAJ|Ou7EHi5o^iqd***cDF1+otgq0G}qrI;K8rauCINKV2=pPVyZJv@A<*2s=AOvbd zCa5h>=APh8tQ{&*B{+D2EaqJ2SOtNb_c=Q=NLKnbyry6u%u?Sf5ngun6$6evcpt@h z$Z1w@FzvZ+!|*He>byY{6@sUC59KSy56rVJaIa!FJ~Y#`{Q5mtxII+es~eKBBQVNU zg#ALbKjcqjAGryTTlRAKQ> z^P4+u1Duvlw2jArfqw~Bo0b+s8}zxQ*Ti8nP5`bnFLQFA_KMQ%u1^nk?1gl^LdN%^X6rKJEXPyiJ^A|daFLI0#G0tx6)4TO^i~Wll6UAv-lQMds2Ha;vWOzrJwr`n zUtWXx1SM!Geha81Rg7paR>I&TZP1PgGli%51v_FLxh5nIWVaXyMm0=yurPq-8X@;p z(VclJ!qUt3b6I%*HyA{@wUXLKEnaT}rvH zJ+ia+XUOI4FYQY9=fvD;RD5pMe&KOgJogp?!o4AxwG5;ucmqNuIA;9;i@XLH#V?R( zdg@jbv#p|e;rw1pzuN#C=7-UMq<3{F0iidXP!v)cIni-O8x14KP8^|+Qz7|;bX2tY zA3&kVjBZ(BMGx&mcSPQ?M;nXyBt>udbNTVZgaRK7iE7w5>~BZx4R;^;BJvlRb@RX~ zW7q%Hgwmni=3acAG4<$mW?J!!_M0}?bTh@kTwxP= z#c+6~wKX^tvedD9n@`(sud17$=r8zhtGF;7p4b(_7nb0xCNIzG)h^%>`2Zgun>!de zzCdFgEy)3g7o0I`Od+TlSWrpy&eAm^fC9rTxd#PyoG$8c%y!m|O5QkB8k-M{UKf2t z`OJx`b>v1Muv z#j{;KcPY}J3o-xJ{GWA1_&NmN!lzaIPjFoFiTS+tE>X)5zznE&Sq?I<PKM}uNX zLg_BeO>x+csW255YHPmMJrjz)LGxy-Ujs+6-fjQ&J03S&@axl={I*pDY)^M-r1z?M z{}R>-IXi_>AF47fyluR-W_ud&u}3Z8-uai7A6QF4NzU%f6Mp#trQsS{xF{BegL=k) zhch4lt35opL8dgsiIld|#gJahK(qu+9Kk7&&8tLp%jVmB-B3sNy}7(X#E71tcn0H} z2iM6*VwGs<1RZGCkM%cP%+_ai=7hg*NkL4!GsmS$ywI~Zzj}208}(^Ou7AU2 z#miDB#m1!q!QxxkpR96MpRT-+(s~<3?EU6=?PD%r;gwN2F{M8MoH8tEU7~zQkA&-K zMZ_UErKEY6$`c+@TLlA!@=fJf(UzHlq16&QIn^A~93v_smWj{D^#x5uiHC!YP}ZZ2 zhRobE$PP3|b?#e^Y4biCjHw!7aJjONg0}nhraSPFujO#Rv#(`xZwaTvrTbz1sQI{o zHxsVY4y4G7INLb0FT2HuYR=}98%l6bxdEIjGeC6)e=+Rv89mhm7~UnepLlYC@CQdi7-aLCQmYI{ojMf(Q8kJ%K_-VZ#cYfrg1Ho1L+L^-`F)K(oesfg@%~ zJu_4_b8pl%7<0I=&|E>L$-tUCu6Pis>A3mx&q0NE&wB9lsfW=62Ods$*rgew-Suy3 zTNphlgC#a6QWlmeo8=b)wiu(dhCpFD19#$d`BG~aIVW`TGDRQ#^1sc+C^W!+OJFwZ znm4JE9dF@cXT2+*)!xs=&;i)1e#GYK?_5W&+CTG|;<5HZgy>pWB{|CrxXs4^1fo(1 zoyeA#@I#+6T;SkB`Br#oI#RLcgc1b%jW$^IMZGWttLUQTw%*SQXSQsSva?Og@hTLh z_#L-Y_85jD;nW*I8_lArcJKtMFTgT(o7q*3mwyi^Qp{{sk!%I3G!c1$%840`x1>zl z%)$8dlsp^)Om4njj73{NNpe+zPXf#yNo*|bV~Ak<$eQ0#K}-i<8*a`g7iYXn#w~WH zdLw`=^8`&JZvSO(93Eh842f&;$^b9FczbVCMe|f+qpLNAou=>gJVFINJw$>vz$z9_ zuRoY08)ehZU^DoH{Ivc?96ZDKHy5u*KtrxA=e-m%R$R85%XPe?<_<67hJKe+;laoo zL}E*#Q~a)k{eF#8N0x+Nr&1fj6wmj+o-3D|$lNE$HHHUCQWdYH0Q1m$mO*`C`c>5Y|B0TR?54PPhvTK(4pFYC_LEJe#F>>aO|2s*wUn&?5tu z(-}r$v78rv+v74x{FgB9z<~pSC69ikr3gqMw+a>^#ee-C`j^8##t9ya6i<$=9@m!aEyq6sjpW-8KrHS$jKw_3Lnftmb_3q`e#hT;b{o_JS4Rh zXm-4Vr|mYii~3$2YL8$ioun#4#Nb8%`j!UtYYHAx1~|r@fG9XzUI#yE4G9R+c+|7u z2p!RWOP36RiT5nZzSX=@`lqG6w`$j0*@s5~dh9`ichWgm67&rd^97%02GMrXPMu;0m|yRwOa^Q zrv81R0xxr+{(6&G(_>f`79KTwemm*%gh7Kx%QIPRk%~Z4XmytSBI(hY?@yjweQL`n zVjQ}1gTK8j5LGo@>?~e`j{>8GrV)=^^%9Jc&zYx7Rj;v5Q+f_FMSI|<0A6mEIyj>N zb)s;Q=?zm`XB!h+#F`7#R$>|O>1#a?1fV5=hm}=-pbGaMDO^y?6>BNnC>-$*J^!;o zmLL9yEH_)cUOo$ShGTHRZAM?ntC+>BbS)?>bBZ&-xK06by_q^v%mgqFep2;3_XC_f zt@bAJ4tAfOw-}*!#6TNuW2M=|qT2EB87u0C2@*VKvmz=ZpsDq-KF4M)DRjE*ax}j7 zFipa4<;zX5V|4MCkL!2zi6MU&phaz0mXSvNxP|uh&|4bGtsHJHE@$U$z0@OV^*6jl zR}ri`-|k3bQ*o2tm0W)>M8&|gv-5Xfs=WBno zC6@2X!tVZi;Y`gC@`Q)A*AZy0^5p)@+~MxIwDYGm^1ZNo)>A#xMzSc4m&$L(WwPZa zVipL}Rp7QQc4JgyZ$avz4KuUYZNIHf{jfj-r}0`ijngREyqr$_FBO6klOl5MR0g;s z<+`CrIVS+Ynlp;WE>1ZW)kUOZ0TW`(%Bg@5Uj+^`lcule#)-9}X_of;eQ#GRdVuel zG1&B0q4dZWh=V0Wjqp%3`cqOmH%}St^E}3Y`~)9u7>LfYd2>VkY-hcvKlsSX4Scr%^rEEfSHp8_{2=^+DYwhi_^uk4+JPw7Q| zj_*)Yu~y|OT*QSY5y)mnNGlXzo(P<7#dGUV-ar8mUu432b_(9JH_&T}1e23&!DRCc zvUy|q&oiMRSiM|bTH5AKsOUuLDhH{p*noi&)v@cB#qvAkSjNH#Dyr4;bwd}vxA35_ zCiJqhpMZRy6lV1eQ7i6cXPL7!>FzmGx7YFd#0lyH)CQC?*Bcwn4lotI5~O^M2Gj>rryXH*Ie0oPzdSOE2ra z>Y;q^5L{$`3LfC9QqWFQg_fL_>7;00eH`ob9K}PbitYF7WV)zN+abHO&ib-xW9o*8 z7F;CAfYHzH4krR3?wqvvCbz8C@k(6YA6#*{m+XyR2iQycIL8>=T6hqe*Lw>ZS#b=| z(oD#H{TPAwvD9D)vFG5&^0Yo~mgrqD-A*qanRO{oinFo$BNUf>SikTiTW@s%;8qhF z%p>Gj>WM+Wfdt6w5$j^vx)5|m4GIQ2WzC5muCrg z))Bme`1Ox@RCA1tgN5nrDCbX1)wIcv6*q*)=$7iH&Vm3J8;BQkjL}NHHds*LG zx%3^|7#pbIGs>V4*lolb|8Vge@kwjH+nr@2Pjt<)`4!Mh@}BfUPjDet3eT24q9OxwjbEnfRUG*&{q05VK6I`RU&-#`64R+WqO? z8GNO-krpc`cl9+f0opcMtN{~iuPisOD}Q%q(;+|kM%zgEB^G{G!JuZB5%RN0rWFeu zfBf=YkmAc-?M_8s9k0^R0idpn;#l8#z!SAJDB@W_oM9 zL;9$xy=%4zWoImal7Ynr|BmUVLb%^hz<|d^GJj0x(7KM}ep|oafq|IC5kdH5|6c#d zMV{fK;0cu)EaM`(f$Ktisp4=~dFaVy06=H;BnHalJc|RY8I)q${35aDyYmJhc*MFu zgEBM+8E2{g3$MckN$Iap`5LY%mF2tGvft~6r%nE*eJJDVLf8%(2I}uLS zocz>SdazIWbL!A<0^@9i2B37y!;Z-E^-~m`I!R~M9^rXS@V%zv_#KJ~d!n}9jHQU`eD}CN( z`=}d;`e&4*{Df7X?aG(^F6(oT6XfNht!x1^+s|C=xlj2_h+obipcRRttx(fiB1lMG z6!Gj|5csJeK#}ex>R0e97P(i;N49BczM}f^^eJB(T}`&R2h1HFD1%9cgruboPoBI$ zRy1z5)7rEi+07hgK_Dx8zA(8(nxDFJ1MSE5DWP%->MuY0clZ1$r_W)(U8eD;*q=kl z@$tmZCL=Z13mocUMWYw6<|!)T4KOW}CKy9=vRIzZje2+qGUb?HwT&nsGHJmB#4-~d z@fUnV*RANpL@|M#6#|XJY4l4_pH9v76VE{nMi9%HH-B&SQl)jo(o24inY|G0DF^7t zR-M)x$S^~eX-BD%^y-B`bTo3*G1ve@Lu2Hm0Q;d()}Zm|vA)fxAu14L52}2wI_<=b}iB0B{PQb2y*gR>xn_@UDSz)f}i=~M@y0c)-MEwhxfdRH~6 zK5n{betlByt|!Xfm5Wdm5(g9^T#~%gm!z+hyS3@Q=xkbS+G=)p!-kLcpDd*Z3gy5G z=rAmM8J3xNIvB2-4kmGf(aM>C?~gmT6C&(M&CRfYa&dAjYr(bhe;>7mdk*Bw>-Y_3 zW5k4kJXMl?#o%L2PcJijX z50~EohU76ypQ~18bFku~g+V!9Pb-Ro`{IR_cnMh&KA`d=t+IKQ!eL|OLG%Lj!vdye zs%0!}2!JH3zc+zfHWH|hA>}&2SA|-`RL8s64o-=79w){6VZA## zLGpt_=|0R5{eUEJ7Y;rLA1fh4IhxG_{1(UnCFP>c!BFdC9k8V;41T|F=Iz{SwkC2;li z830HXD1bx7m^%A?^Nb|(!w~r-#*$f#Y6xyfRvc$9sN9v;*ohBE3i=HkUdA~xqCmdU zVigR~jZ2iHl!jbsydwvzLWj1Q?3|T0?>xS938AFmry4A{!h=dsBU)n=`R;*IJpDKKrmIcfNfGXIstgK3NHj*#3OG$R%ZByCJS; zu0!zs_s(d!5x#CI;CirJ&3^86UAOp$Ld` z4?Ni4q51*(bc$^RPY?JkA;v2&t5+#u8*X@Pd;>rzY}dg%_sCXnwh+BE<`UC+snY9m zgz$`XZD9Nhubs!R%?6rHpnsW@RYP_jXANTywPPx(>3@kszvv~72&hFy7W}@bJs#7* z3~*MlK77iQpPoFspH1(ax>NYQ5X5IRxuBlvn0;KOp}@&(uK02K-kP7ZL-54`VKWT~ zfL1C2KEy7g&8z1dJZYF`21qIff=CjdusIaWvUazp$ngvckB#@6zSPm^qPhB)n95g} zQ6VaXKywGdln=jxGuH+K#lq9*P_PC_x)g<#qXH1iy3JzJ^`=K<=By0%e0ijF-jFc) zbelb2=d6$L#rmTZ=bz1Y3Rnj^uY+J1I@1jB;juCP1vg|tc18ws*1jVMhTFFw*73dh zCD4KJ#KO$OgwS-({1X)#`uTP=SDE($$>MaY+tqFi`LxOE4y<*63#~=LAy5k??m0fj z*`Jsny5Wq@PBD9u^64i|X)Z*R63r+o18|1>95lZ!&&e?^{xJcLUtz^za#j0S_2W-) z7`(9D48KH$2G^_aMPmYxo-+ZN9znup0mrxU0u3vAg#mY*+v6+NKCyHK*>iATKxVGz z-JCV}=$FZ%E-<+RgQM<^b-OM?>27m_SKxGca}WXJM=&zX)<6}Y<&b?JVYDa_9-?Bn z#;KQUepzW?iVCFhm{iBM4Xt*L)lP#a-M z@hys?dVrgk+|hO0?|V+(rQC#L1~DoFhdB?bKrwhvd84+mXZJ2~=mn$)|InDF6*N(6 zl#*+?Y4HW;Ry4dax?543Hj~L+GuTKQSYJSPlqdX;+^^4T4$n*wJ*oHeQ}3f3y&mU} zcbw1=lrKFF&!ESJOr$She4&4;>}xMiIDVo0)=HYc9TN|dC=sAEc^1GU>n{ZJpw##% zHFt{`NV<;78DcQuieg$~;TQQlv(R1h61G?9h`0+P{~YUS-vigSZ^||f^F5ew#u!D> zqA!H212K5d2(;5;T0>;7VAQg9`KV_b8Y_9vbF%#1M0XItEvwhlW)f zF-}hJ{+fj7aIhrTXba-9#VKztbZw-!1#nl}4Gfef7oHUh$?{VcD;HfX$v}0Fl2Ks& zIv|_l$GvEtWjI{<6s*exbj#kOG=Qap;R!Mpkz@x)gjEz%dP+N#nj16tlzogdFtZq- z4}7~E_?HY!i##6dF8M|et8%I0se3gY-?DpD$#zgyCa?jMZ>(N=(At5*;F;zM5Cd5E_Ut+Y_2=M*D})x1MFonsi$R4I0j`K7*%G4P3TcI0v5nSak>STu1n z$jRC?ftx3sX?wQX>EEI@BwL`RK$@~bC>eescEpM+OITOqICH9BG zZ3Tu=TEl9vIxcU4Pa?xS!ykV7g(_g4Tw91rM$(3$Op>llg)nZr^#Y9H!5;!#-Hq^7e*#DY=Nb&b9oN(iFYd-FQ5=r$_3~0ZE~BP>0k5!R+>O2VEiee-MSxuVa6*rle6bG5rn!Pe z(s?0GTOg$QH<_Pg)Gjv$X0b38r?hubV{xS8bmkl(RMG)UzkkCeC9uj`r!v3&S+sp# z_mp=KXLI?`bOt|M2zmj`u3qkJb;I2%AKlkyD|SDS4hRor!-3Wxaj3`}=0Mz2ZC*Ri z!?m#Eoxz6zxYI6Cj8oeL4RpnTWsURa2X=HRF^sQ`ZxDL`!SjEprCCoUqW@6zvE!&9 zD8X9Tep8z}-!OH2?sI{tK=CjL`o@R&r-#7Gb|}`@6h!5K2ZosJU0H1ivXoV}eqYIM zsapJ6)-OJ9bDLH+xIj*Bw>-%N2`to)AJkxJjcCmxEcqxz}oy3 z>TKhP*@`l{fdOQ|XZ$2D8FI?3=^AV+XluaP#`Vne|AL{+S4zs1wjTi_%+9Udz{ zG>8`|+Y^5(-#>$OS!mXff$F@eAZ_xEe}IVywr2`2PiUh+MBL$d#3eD^H%4$8S*?PL zjHC5`S)7Xg!QU0iZ9^H}M92iBZb*2?7eFTRC%60y?NmM2>;@(Va+-U!0M_5P2t#!M z&RC_tY3~<3#2+$_)6ioK$-x&f z-h=rbRQCaZnIs>F9WjiO8!E2Hq4LMbq!@`%^FKk(SvuL;%f^F}Y^DTrcVn^k(p;?B z)gb%O__Nk2Ez>l56va3`K-m%Na)fxs;8Vk{WdPixvLOb|x?9Z^9+;Nn$<-_6VeD#- zyxT=u2$q!uVCk0(vUiu4DDk?DddEeNcvZg^p`X|O6X~sf`NkH_uWr(%%V5$NMXoYYFwja&u&W$$zJTo!k z*~M_p>{LCjZ^?&|xHQyaPO5oQqgg%j4stBud0A@ffzg7O`}LpD0PY zrn_XaG09xvCaMKMJT9Q&u<{{K#c6rKUVwTpRJb&HeB=&n68<&A^}{^JBVjNkpWB_$ zA3I09Vu56bcf1TB>hlUE;&Gt0_pp3z*yoMo-eS)oaE&_U29*K5i5BoBzeL^BO-(<| zxeVs8Z}3bZ*`HHyBRB9B4+mnpCb*0E%J|l@5wl@O6lSFL+oyhjRM=$(ZcKgK92GrU zjJ>;r4?a>sW#k|mM}WzNHD%8HKLvSLu?bwphuCv{x4 z4&6XtzaIuAKd$pe1j;kk(gx-gJoG_LUm;e+tvy(_)Jll)F$uNB2T2_O1pWtP!5PR& zZQIfDT6|7SXnRSQi<;JHzLDvB5SKAbb;T`ZT{5YVsi?5T@G zo4C$K;UamzyW%P0R;|HM?KJuywVw2DbBa2$;%I#|7Z=l|FZI2oew!y~IJzo*FZ-kG zI)^lOL=3A|z26M{Q*H3XJ(g{t+P!d9@t{SrztFF8GtF|vY#P?UYBEmlfus^BD*?v+ zkI;b)s$oT`@-bm(CYu%)7ol!+iSY{cLRjk_{H-^=^lY$z;Wp+T%aI(j^!vg;S}L74 z=F*^a7v2%sEDmiOIiI7>Ps{zqo)m(<+Eg-_B9X6pyz!&D5N%H~|C6Pnt7#0ZFAC)e zdPuap-P-)yK2NKQ#t8dhDo%}5QksnzbMt)9MRP_9xH_|Y{dsIZ5ToD$0nKXp+*Ki% z0&nq`*7P(s-Ne=zdxBI3JK-cJ^1ALz!7xrm5YSa2X26A!0J=W}) zDNa_uLVra^MRN><@6)7*KprjlzEKg!mdA|H8bU#$gM7v zX%Je|xXI8@sg5VH6k>5FEqPdXGq2*?GS2_<-)Kf6wfTvN~H($j*s|~rbGEy zQ>A@rPR|zCji-OOHX^`H_(GG&@}mNBh=wp$o<-+iz-hvtY{CDPq>PB-%iZAO-yBH@ zlUvUTH)w{W7tQ5vt_!fz^F7qmg$Q~GBxOBF5;cAx)_}YwyiYfvu#V}_++xefFd2i< z2d_GBnX(kV@ifyP8Sh%uw25&8AY<3D zF7+2=!U^0_S1xuKEQ=)kfV%0{gwS` zJ06fyWok}mF-VO?QQIpFK{=c(f`u5_2byjOmBVlrx#wf7y>kt3l~eIDrpr3V)Pqxo z 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:EY+7vU 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 F`7bNtm;e9( literal 0 HcmV?d00001 diff --git a/tutorials/imgs/14_fluid_simulation.png b/tutorials/imgs/14_fluid_simulation.png new file mode 100644 index 0000000000000000000000000000000000000000..83f40919c708e6efa8065f5662d839a39c4bbd73 GIT binary patch literal 87424 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 J2eO>2aBDb`ZQ>bPse*Rh^pg;-#wsWiO4 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 Q1pfEVq!|-WOvo_)4<6M8<^TWy literal 0 HcmV?d00001 diff --git a/tutorials/imgs/MeshIntersection.png b/tutorials/imgs/MeshIntersection.png deleted file mode 100644 index b83120c8b00e385a7aad9fcf3b3f35dee6680b52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14038 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 z 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 diff --git a/tutorials/imgs/SceneIntersection.png b/tutorials/imgs/SceneIntersection.png deleted file mode 100644 index e93cc92f04039243326e916acd9e6bb82c4f8bb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12925 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 | Intersection using hiprtGeometry. | |[02_scene_intersection](./02_scene_intersection) | drawing | Intersection using hiprtScene. | |[03_custom_intersection](./03_custom_intersection) | drawing | Using a custom intersection function. | -|[04_shared_stack](./04_shared_stack) | drawing | Using shared stack for traversal which is essential to get a good performance. | -|[05_custom_bvh](./05_custom_bvh_import) | drawing | Loading a BVH a user provides. | -|[06_ambient_occlusion](./06_ambient_occlusion) | drawing | Ambient occlusion. | -|[07_motion_blur_srt](./07_motion_blur) | drawing | Rendering objects under motion using SRT components. | -|[08_motion_blur_matrix](./08_motion_blur) | drawing | Rendering objects under motion using Matrix. | -|[09_multi_custom_intersection](./09_multi_custom_intersection) | drawing | Multiple primitives with custom intersection. | -|[10_cutout](./10_cutout) | drawing | Alpha masking using the intersection filter. | -|[11_concurrent_scene_build](./11_concurrent_scene_build) | drawing | Build geometries using multiple streams concurrently. | +|[04_global_stack](./04_global_stack) | drawing | Global traversal stack for good performance. | +|[05_dynamic_stack](./05_dynamic_stack) | drawing | Dynamic traversal stack for balancing performance and memory requirements. | +|[06_custom_bvh](./06_custom_bvh_import) | drawing | Loading a BVH a user provides. | +|[07_ambient_occlusion](./07_ambient_occlusion) | drawing | Ambient occlusion. | +|[08_motion_blur_srt](./08_motion_blur) | drawing | Rendering objects under motion using SRT components. | +|[09_motion_blur_matrix](./09_motion_blur) | drawing | Rendering objects under motion using Matrix. | +|[10_multi_custom_intersection](./10_multi_custom_intersection) | drawing | Multiple primitives with custom intersection. | +|[11_cutout](./11_cutout) | drawing | Alpha masking using the intersection filter. | +|[12_concurrent_scene_build](./12_concurrent_scene_build) | drawing | Build geometries using multiple streams concurrently. | +|[13_batch_build](./13_batch_build) | drawing | Build small geometries concurrently in a single batch. | +|[14_fluid_simulation](./14_fluid_simulation) | drawing | A simple fluid simulation. | diff --git a/tutorials/scripts/test.bat b/tutorials/scripts/test.bat new file mode 100644 index 0000000..42e40ce --- /dev/null +++ b/tutorials/scripts/test.bat @@ -0,0 +1,15 @@ +..\dist\bin\Release\00_context_creation64.exe +..\dist\bin\Release\01_geom_intersection64.exe +..\dist\bin\Release\02_scene_intersection64.exe +..\dist\bin\Release\03_custom_intersection64.exe +..\dist\bin\Release\04_global_stack64.exe +..\dist\bin\Release\05_dynamic_stack64.exe +..\dist\bin\Release\06_custom_bvh_import64.exe +..\dist\bin\Release\07_ambient_occlusion64.exe +..\dist\bin\Release\08_motion_blur_srt64.exe +..\dist\bin\Release\09_motion_blur_matrix64.exe +..\dist\bin\Release\10_multi_custom_intersection64.exe +..\dist\bin\Release\11_cutout64.exe +..\dist\bin\Release\12_concurrent_scene_build64.exe +..\dist\bin\Release\13_batch_build64.exe +..\dist\bin\Release\14_fluid_simulation64.exe diff --git a/tutorials/scripts/test.sh b/tutorials/scripts/test.sh new file mode 100644 index 0000000..bc0a3db --- /dev/null +++ b/tutorials/scripts/test.sh @@ -0,0 +1,18 @@ +PWD_PATH=`pwd` +export LD_LIBRARY_PATH="$PWD_PATH/../../hiprt/linux64:${LD_LIBRARY_PATH}" + +../dist/bin/Release/00_context_creation64 +../dist/bin/Release/01_geom_intersection64 +../dist/bin/Release/02_scene_intersection64 +../dist/bin/Release/03_custom_intersection64 +../dist/bin/Release/04_global_stack64 +../dist/bin/Release/05_dynamic_stack64 +../dist/bin/Release/06_custom_bvh_import64 +../dist/bin/Release/07_ambient_occlusion64 +../dist/bin/Release/08_motion_blur_srt64 +../dist/bin/Release/09_motion_blur_matrix64 +../dist/bin/Release/10_multi_custom_intersection64 +../dist/bin/Release/11_cutout64 +../dist/bin/Release/12_concurrent_scene_build64 +../dist/bin/Release/13_batch_build64 +../dist/bin/Release/14_fluid_simulation64 From e7b0073214b2916147cabd06ece9f27069c8f4d4 Mon Sep 17 00:00:00 2001 From: Daniel Meister Date: Fri, 22 Sep 2023 11:00:12 +0900 Subject: [PATCH 2/2] Orochi update --- contrib/Orochi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/Orochi b/contrib/Orochi index 7006519..b209cc1 160000 --- a/contrib/Orochi +++ b/contrib/Orochi @@ -1 +1 @@ -Subproject commit 7006519426673969792fb5d07899d07a1a0d2381 +Subproject commit b209cc1a93b7922ab3863ef673addb3c0d1bcb76