Blender V5.0
cycles/device/metal/util.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#pragma once
6
7#ifdef WITH_METAL
8
9# include <Metal/Metal.h>
10# include <string>
11
12# include "device/metal/device.h"
13# include "device/metal/kernel.h"
14# include "device/queue.h"
15
16# include "util/thread.h"
17
18# define metal_printf LOG_TRACE << string_printf
19
21
22enum AppleGPUArchitecture {
23 APPLE_M1,
24 APPLE_M2,
25 APPLE_M2_BIG,
26 APPLE_M3,
27 /* Keep APPLE_UNKNOWN at the end of this enum to ensure that unknown future architectures get
28 * the most recent defaults when using comparison operators. */
29 APPLE_UNKNOWN,
30};
31
32/* Contains static Metal helper functions. */
33struct MetalInfo {
34 static const vector<id<MTLDevice>> &get_usable_devices();
35 static int get_apple_gpu_core_count(id<MTLDevice> device);
36 static AppleGPUArchitecture get_apple_gpu_architecture(id<MTLDevice> device);
37 static int optimal_sort_partition_elements();
38 static string get_device_name(id<MTLDevice> device);
39};
40
41void metal_gpu_address_helper_init(id<MTLDevice> device);
42
43uint64_t metal_gpuAddress(id<MTLBuffer> buffer);
44uint64_t metal_gpuResourceID(id<MTLTexture> texture);
45uint64_t metal_gpuResourceID(id<MTLAccelerationStructure> accel_struct);
46uint64_t metal_gpuResourceID(id<MTLIntersectionFunctionTable> ift);
47
49
50#endif /* WITH_METAL */
unsigned long long int uint64_t
#define CCL_NAMESPACE_END
TEX_TEMPLATE DataVec texture(T, FltCoord, float=0.0f) RET