Blender V4.3
metal/context_begin.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2021-2022 Blender Foundation
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5// clang-format off
6
7#ifdef WITH_NANOVDB
8# include "kernel/util/nanovdb.h"
9#endif
10
11/* Open the Metal kernel context class
12 * Necessary to access resource bindings */
13class MetalKernelContext {
14 public:
15 constant KernelParamsMetal &launch_params_metal;
16 constant MetalAncillaries *metal_ancillaries;
17
18 MetalKernelContext(constant KernelParamsMetal &_launch_params_metal, constant MetalAncillaries * _metal_ancillaries)
19 : launch_params_metal(_launch_params_metal), metal_ancillaries(_metal_ancillaries)
20 {}
21
22 MetalKernelContext(constant KernelParamsMetal &_launch_params_metal)
23 : launch_params_metal(_launch_params_metal)
24 {}
25
26 /* texture fetch adapter functions */
29
30 template<typename T>
31 inline __attribute__((__always_inline__))
32 T ccl_gpu_tex_object_read_2D(ccl_gpu_tex_object_2D tex, float x, float y) const {
34 return 0;
35 }
36 template<typename T>
37 inline __attribute__((__always_inline__))
38 T ccl_gpu_tex_object_read_3D(ccl_gpu_tex_object_3D tex, float x, float y, float z) const {
40 return 0;
41 }
42
43 // texture2d
44 template<>
45 inline __attribute__((__always_inline__))
47 const uint tid(tex);
48 const uint sid(tex >> 32);
49 return metal_ancillaries->textures_2d[tid].tex.sample(metal_samplers[sid], float2(x, y));
50 }
51 template<>
52 inline __attribute__((__always_inline__))
53 float ccl_gpu_tex_object_read_2D(ccl_gpu_tex_object_2D tex, float x, float y) const {
54 const uint tid(tex);
55 const uint sid(tex >> 32);
56 return metal_ancillaries->textures_2d[tid].tex.sample(metal_samplers[sid], float2(x, y)).x;
57 }
58
59 // texture3d
60 template<>
61 inline __attribute__((__always_inline__))
62 float4 ccl_gpu_tex_object_read_3D(ccl_gpu_tex_object_3D tex, float x, float y, float z) const {
63 const uint tid(tex);
64 const uint sid(tex >> 32);
65 return metal_ancillaries->textures_3d[tid].tex.sample(metal_samplers[sid], float3(x, y, z));
66 }
67 template<>
68 inline __attribute__((__always_inline__))
69 float ccl_gpu_tex_object_read_3D(ccl_gpu_tex_object_3D tex, float x, float y, float z) const {
70 const uint tid(tex);
71 const uint sid(tex >> 32);
72 return metal_ancillaries->textures_3d[tid].tex.sample(metal_samplers[sid], float3(x, y, z)).x;
73 }
75
76 // clang-format on
unsigned int uint
SIMD_FORCE_INLINE const btScalar & z() const
Return the z value.
Definition btQuadWord.h:117
static __attribute__((constructor)) void cpu_check()
Definition cpu_check.cc:94
#define kernel_assert(cond)
ccl_device_forceinline T ccl_gpu_tex_object_read_2D(const ccl_gpu_tex_object_2D texobj, const float x, const float y)
CUtexObject ccl_gpu_tex_object_3D
ccl_device_forceinline T ccl_gpu_tex_object_read_3D(const ccl_gpu_tex_object_3D texobj, const float x, const float y, const float z)
CUtexObject ccl_gpu_tex_object_2D
constant constexpr array< sampler, SamplerCount > metal_samplers
VecBase< float, 4 > float4
unsigned __int64 uint64_t
Definition stdint.h:90