Blender V5.0
device/cuda/compat.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#pragma once
6
7#define __KERNEL_GPU__
8#define __KERNEL_CUDA__
9#define CCL_NAMESPACE_BEGIN
10#define CCL_NAMESPACE_END
11
12#ifndef ATTR_FALLTHROUGH
13# define ATTR_FALLTHROUGH
14#endif
15
16/* Manual definitions so we can compile without CUDA toolkit. */
17
18#ifdef __CUDACC_RTC__
19typedef unsigned int uint32_t;
20typedef unsigned long long uint64_t;
21#else
22# include <stdint.h>
23#endif
24
25#ifdef CYCLES_CUBIN_CC
26# define FLT_MIN 1.175494350822287507969e-38f
27# define FLT_MAX 340282346638528859811704183484516925440.0f
28# define FLT_EPSILON 1.192092896e-07F
29#endif
30
31/* Qualifiers */
32
33#define ccl_device __device__ __inline__
34#define ccl_device_extern extern "C" __device__
35#define ccl_device_inline __device__ __inline__
36#define ccl_device_forceinline __device__ __forceinline__
37#define ccl_device_noinline __device__ __noinline__
38#define ccl_device_noinline_cpu ccl_device
39#define ccl_device_inline_method ccl_device
40#define ccl_device_template_spec template<> ccl_device_inline
41#define ccl_global
42#define ccl_inline_constant __constant__
43#define ccl_device_constant __constant__ __device__
44#define ccl_static_constexpr static constexpr
45#define ccl_constant const
46#define ccl_gpu_shared __shared__
47#define ccl_private
48#define ccl_ray_data ccl_private
49#define ccl_may_alias
50#define ccl_restrict __restrict__
51#define ccl_align(n) __align__(n)
52#define ccl_optional_struct_init
53
54/* No assert supported for CUDA */
55
56#define kernel_assert(cond)
57
58/* GPU thread, block, grid size and index */
59
60#define ccl_gpu_thread_idx_x (threadIdx.x)
61#define ccl_gpu_block_dim_x (blockDim.x)
62#define ccl_gpu_block_idx_x (blockIdx.x)
63#define ccl_gpu_grid_dim_x (gridDim.x)
64#define ccl_gpu_warp_size (warpSize)
65#define ccl_gpu_thread_mask(thread_warp) uint(0xFFFFFFFF >> (ccl_gpu_warp_size - thread_warp))
66
67#define ccl_gpu_global_id_x() (ccl_gpu_block_idx_x * ccl_gpu_block_dim_x + ccl_gpu_thread_idx_x)
68#define ccl_gpu_global_size_x() (ccl_gpu_grid_dim_x * ccl_gpu_block_dim_x)
69
70/* GPU warp synchronization. */
71
72#define ccl_gpu_syncthreads() __syncthreads()
73#define ccl_gpu_ballot(predicate) __ballot_sync(0xFFFFFFFF, predicate)
74
75/* GPU texture objects */
76
77typedef unsigned long long CUtexObject;
79
80template<typename T>
82 const float x,
83 const float y)
84{
85 return tex2D<T>(texobj, x, y);
86}
87
88/* Use fast math functions */
89
90#define cosf(x) __cosf(((float)(x)))
91#define sinf(x) __sinf(((float)(x)))
92#define powf(x, y) __powf(((float)(x)), ((float)(y)))
93#define tanf(x) __tanf(((float)(x)))
94#define logf(x) __logf(((float)(x)))
95#define expf(x) __expf(((float)(x)))
96
97/* Half */
98
99typedef unsigned short half;
100
102{
103 half val;
104 asm("{ cvt.rn.f16.f32 %0, %1;}\n" : "=h"(val) : "f"(f));
105 return val;
106}
107
109{
110 float val;
111 asm("{ cvt.f32.f16 %0, %1;}\n" : "=f"(val) : "h"(h));
112 return val;
113}
114
115/* Types */
116
117#include "util/half.h"
118#include "util/types.h"
unsigned long long int uint64_t
Definition half.h:41
#define ccl_device_forceinline
ccl_device_forceinline T ccl_gpu_tex_object_read_2D(const ccl_gpu_tex_object_2D texobj, const float x, const float y)
ccl_device_forceinline float __half2float(const half h)
unsigned long long CUtexObject
CUtexObject ccl_gpu_tex_object_2D
#define __float2half(x)
#define T