Full support for translation and compilation of shaders in Metal, using GPUShaderCreateInfo. Includes render pipeline state creation and management, enabling all standard GPU viewport rendering features in Metal. Authored by Apple: Michael Parkin-White, Marco Giordano Ref T96261 Reviewed By: fclem Maniphest Tasks: T96261 Differential Revision: https://developer.blender.org/D15563
49 lines
1.4 KiB
C++
49 lines
1.4 KiB
C++
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
/** \file
|
|
* \ingroup gpu
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
namespace blender {
|
|
namespace gpu {
|
|
|
|
/*** Derived from: https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf ***/
|
|
/** Upper Bound/Fixed Limits **/
|
|
|
|
#define MTL_MAX_TEXTURE_SLOTS 128
|
|
#define MTL_MAX_SAMPLER_SLOTS MTL_MAX_TEXTURE_SLOTS
|
|
/* Max limit without using bindless for samplers. */
|
|
#define MTL_MAX_DEFAULT_SAMPLERS 16
|
|
#define MTL_MAX_UNIFORM_BUFFER_BINDINGS 31
|
|
#define MTL_MAX_VERTEX_INPUT_ATTRIBUTES 31
|
|
#define MTL_MAX_UNIFORMS_PER_BLOCK 64
|
|
|
|
/* Context-specific limits -- populated in 'MTLBackend::platform_init' */
|
|
struct MTLCapabilities {
|
|
|
|
/* Variable Limits & feature sets. */
|
|
int max_color_render_targets = 4; /* Minimum = 4 */
|
|
int buffer_alignment_for_textures = 256; /* Upper bound = 256 bytes */
|
|
int minimum_buffer_offset_alignment = 256; /* Upper bound = 256 bytes */
|
|
|
|
/* Capabilities */
|
|
bool supports_vertex_amplification = false;
|
|
bool supports_texture_swizzle = true;
|
|
bool supports_cubemaps = true;
|
|
bool supports_layered_rendering = true;
|
|
bool supports_memory_barriers = false;
|
|
bool supports_sampler_border_color = false;
|
|
bool supports_argument_buffers_tier2 = false;
|
|
|
|
/* GPU Family */
|
|
bool supports_family_mac1 = false;
|
|
bool supports_family_mac2 = false;
|
|
bool supports_family_mac_catalyst1 = false;
|
|
bool supports_family_mac_catalyst2 = false;
|
|
};
|
|
|
|
} // namespace gpu
|
|
} // namespace blender
|