This change switches Cycles to an opensource HIP-RT library which
implements hardware ray-tracing. This library is now used on
both Windows and Linux. While there should be no noticeable changes
on Windows, on Linux this adds support for hardware ray-tracing on
AMD GPUs.
The majority of the change is typical platform code to add new
library to the dependency builder, and a change in the way how
ahead-of-time (AoT) kernels are compiled. There are changes in
Cycles itself, but they are rather straightforward: some APIs
changed in the opensource version of the library.
There are a couple of extra files which are needed for this to
work: hiprt02003_6.1_amd.hipfb and oro_compiled_kernels.hipfb.
There are some assumptions in the HIP-RT library about how they
are available. Currently they follow the same rule as AoT
kernels for oneAPI:
- On Windows they are next to blender.exe
- On Linux they are in the lib/ folder
Performance comparison on Ubuntu 22.04.5:
```
GPU: AMD Radeon PRO W7800
Driver: amdgpu-install_6.1.60103-1_all.deb
main hip-rt
attic 0.1414s 0.0932s
barbershop_interior 0.1563s 0.1258s
bistro 0.2134s 0.1597s
bmw27 0.0119s 0.0099s
classroom 0.1006s 0.0803s
fishy_cat 0.0248s 0.0178s
junkshop 0.0916s 0.0713s
koro 0.0589s 0.0720s
monster 0.0435s 0.0385s
pabellon 0.0543s 0.0391s
sponza 0.0223s 0.0180s
spring 0.1026s 1.5145s
victor 0.1901s 0.1239s
wdas_cloud 0.1153s 0.1125s
```
Co-authored-by: Brecht Van Lommel <brecht@blender.org>
Co-authored-by: Ray Molenkamp <github@lazydodo.com>
Co-authored-by: Sergey Sharybin <sergey@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/121050
57 lines
1.3 KiB
CMake
57 lines
1.3 KiB
CMake
# SPDX-FileCopyrightText: 2021 Blender Authors
|
|
#
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
# Find HIPRT SDK. This module defines:
|
|
# HIPRT_INCLUDE_DIR, path to HIPRT include directory
|
|
# HIPRT_FOUND, if SDK found
|
|
|
|
if(NOT (DEFINED HIPRT_ROOT_DIR))
|
|
set(HIPRT_ROOT_DIR "")
|
|
endif()
|
|
|
|
# If `HIPRT_ROOT_DIR` was defined in the environment, use it.
|
|
if(HIPRT_ROOT_DIR)
|
|
# Pass.
|
|
elseif(DEFINED ENV{HIPRT_ROOT_DIR})
|
|
set(HIPRT_ROOT_DIR $ENV{HIPRT_ROOT_DIR})
|
|
elseif(DEFINED ENV{HIP_PATH})
|
|
# Built-in environment variable from SDK.
|
|
set(HIPRT_ROOT_DIR $ENV{HIP_PATH})
|
|
endif()
|
|
|
|
set(_hiprt_SEARCH_DIRS
|
|
${HIPRT_ROOT_DIR}
|
|
/opt/lib/hiprt
|
|
)
|
|
|
|
find_path(HIPRT_INCLUDE_DIR
|
|
NAMES
|
|
hiprt/hiprt.h
|
|
HINTS
|
|
${_hiprt_SEARCH_DIRS}
|
|
PATH_SUFFIXES
|
|
include
|
|
)
|
|
|
|
set(HIPRT_VERSION)
|
|
|
|
if(HIPRT_INCLUDE_DIR)
|
|
file(STRINGS "${HIPRT_INCLUDE_DIR}/hiprt/hiprt.h" _hiprt_version
|
|
REGEX "^#define HIPRT_VERSION_STR[ \t]\".*\"$")
|
|
string(REGEX MATCHALL "[0-9]+[.0-9]+" HIPRT_VERSION ${_hiprt_version})
|
|
endif()
|
|
|
|
unset(_hiprt_version)
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
find_package_handle_standard_args(HIPRT
|
|
REQUIRED_VARS HIPRT_INCLUDE_DIR HIP_LINKER_EXECUTABLE
|
|
FAIL_MESSAGE "HIP-RT or one of its dependencies not found")
|
|
|
|
mark_as_advanced(
|
|
HIPRT_INCLUDE_DIR
|
|
)
|
|
|
|
unset(_hiprt_SEARCH_DIRS)
|