src/ngfx/porting/metal/MTLGraphicsCore.h

Namespaces

Name
ngfx

Defines

Name
DEFINE_PIXELFORMATS(s, t0, t1)
DEFINE_VERTEXFORMATS(t0, t1)

Macro Documentation

define DEFINE_PIXELFORMATS

#define DEFINE_PIXELFORMATS(
    s,
    t0,
    t1
)
  PIXELFORMAT_R##s##_##t0 = MTLPixelFormatR##s##t1,                            \
  PIXELFORMAT_RG##s##_##t0 = MTLPixelFormatRG##s##t1,                          \
  PIXELFORMAT_RGBA##s##_##t0 = MTLPixelFormatRGBA##s##t1

define DEFINE_VERTEXFORMATS

#define DEFINE_VERTEXFORMATS(
    t0,
    t1
)
  VERTEXFORMAT_##t0 = MTLVertexFormat##t1,                                     \
  VERTEXFORMAT_##t0##2 = MTLVertexFormat##t1##2,                               \
  VERTEXFORMAT_##t0##3 = MTLVertexFormat##t1##3,                               \
  VERTEXFORMAT_##t0##4 = MTLVertexFormat##t1##4

Source code

/*
 * Copyright 2020 GoPro Inc.
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
#pragma once
#include "ngfx/porting/metal/MTLGraphicsCoreDefines.h"

namespace ngfx {
enum PrimitiveTopology {
  PRIMITIVE_TOPOLOGY_POINT_LIST = MTLPrimitiveTypePoint,
  PRIMITIVE_TOPOLOGY_LINE_LIST = MTLPrimitiveTypeLine,
  PRIMITIVE_TOPOLOGY_LINE_STRIP = MTLPrimitiveTypeLineStrip,
  PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = MTLPrimitiveTypeTriangle,
  PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = MTLPrimitiveTypeTriangleStrip
};
enum PolygonMode {
  POLYGON_MODE_FILL = MTLTriangleFillModeFill,
  POLYGON_MODE_LINE = MTLTriangleFillModeLines,
};
enum BlendFactor {
  BLEND_FACTOR_ZERO = MTLBlendFactorZero,
  BLEND_FACTOR_ONE = MTLBlendFactorOne,
  BLEND_FACTOR_SRC_COLOR = MTLBlendFactorSourceColor,
  BLEND_FACTOR_ONE_MINUS_SRC_COLOR = MTLBlendFactorOneMinusSourceColor,
  BLEND_FACTOR_DST_COLOR = MTLBlendFactorDestinationColor,
  BLEND_FACTOR_ONE_MINUS_DST_COLOR = MTLBlendFactorOneMinusDestinationColor,
  BLEND_FACTOR_SRC_ALPHA = MTLBlendFactorSourceAlpha,
  BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = MTLBlendFactorOneMinusSourceAlpha,
  BLEND_FACTOR_DST_ALPHA = MTLBlendFactorDestinationAlpha,
  BLEND_FACTOR_ONE_MINUS_DST_ALPHA = MTLBlendFactorOneMinusDestinationAlpha,
  BLEND_FACTOR_CONSTANT_COLOR = MTLBlendFactorBlendColor,
  BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = MTLBlendFactorOneMinusBlendColor,
  BLEND_FACTOR_CONSTANT_ALPHA = MTLBlendFactorBlendAlpha,
  BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = MTLBlendFactorOneMinusBlendAlpha,
  BLEND_FACTOR_SRC_ALPHA_SATURATE = MTLBlendFactorSourceAlphaSaturated
};
enum BlendOp {
  BLEND_OP_ADD = MTLBlendOperationAdd,
  BLEND_OP_SUBTRACT = MTLBlendOperationSubtract,
  BLEND_OP_REVERSE_SUBTRACT = MTLBlendOperationReverseSubtract,
  BLEND_OP_MIN = MTLBlendOperationMin,
  BLEND_OP_MAX = MTLBlendOperationMax
};
enum BufferUsageFlagBits {
  BUFFER_USAGE_TRANSFER_SRC_BIT,
  BUFFER_USAGE_TRANSFER_DST_BIT,
  BUFFER_USAGE_UNIFORM_BUFFER_BIT,
  BUFFER_USAGE_STORAGE_BUFFER_BIT,
  BUFFER_USAGE_VERTEX_BUFFER_BIT,
  BUFFER_USAGE_INDEX_BUFFER_BIT
};
enum ColorComponentFlagBits {
  COLOR_COMPONENT_R_BIT = MTLColorWriteMaskRed,
  COLOR_COMPONENT_G_BIT = MTLColorWriteMaskGreen,
  COLOR_COMPONENT_B_BIT = MTLColorWriteMaskBlue,
  COLOR_COMPONENT_A_BIT = MTLColorWriteMaskAlpha
};
enum CommandBufferLevel {
  COMMAND_BUFFER_LEVEL_PRIMARY,
  COMMAND_BUFFER_LEVEL_SECONDARY
};
enum CullModeFlags {
  CULL_MODE_NONE = MTLCullModeNone,
  CULL_MODE_FRONT_BIT = MTLCullModeFront,
  CULL_MODE_BACK_BIT = MTLCullModeBack
};
enum FenceCreateFlagBits {
  FENCE_CREATE_SIGNALED_BIT,
};
enum FrontFace {
  FRONT_FACE_COUNTER_CLOCKWISE = MTLWindingCounterClockwise,
  FRONT_FACE_CLOCKWISE = MTLWindingClockwise
};
enum ImageUsageFlagBits {
  IMAGE_USAGE_TRANSFER_SRC_BIT = 1,
  IMAGE_USAGE_TRANSFER_DST_BIT = 2,
  IMAGE_USAGE_SAMPLED_BIT = 4,
  IMAGE_USAGE_STORAGE_BIT = 8,
  IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 16,
  IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 32,
  IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 64,
  IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 128,
};
enum PipelineStageFlagBits { PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT };
enum ShaderStageFlagBits {
  SHADER_STAGE_VERTEX_BIT = 1,
  SHADER_STAGE_TESSELLATION_CONTROL_BIT = 2,
  SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 4,
  SHADER_STAGE_GEOMETRY_BIT = 8,
  SHADER_STAGE_FRAGMENT_BIT = 16,
  SHADER_STAGE_COMPUTE_BIT = 32,
  SHADER_STAGE_ALL_GRAPHICS = 31,
  SHADER_STAGE_ALL
};
enum TextureType {
  TEXTURE_TYPE_2D = MTLTextureType2D,
  TEXTURE_TYPE_3D = MTLTextureType3D,
  TEXTURE_TYPE_CUBE = MTLTextureTypeCube,
  TEXTURE_TYPE_2D_ARRAY = MTLTextureType2DArray
};

#define DEFINE_PIXELFORMATS(s, t0, t1)                                         \
  PIXELFORMAT_R##s##_##t0 = MTLPixelFormatR##s##t1,                            \
  PIXELFORMAT_RG##s##_##t0 = MTLPixelFormatRG##s##t1,                          \
  PIXELFORMAT_RGBA##s##_##t0 = MTLPixelFormatRGBA##s##t1

enum PixelFormat {
  PIXELFORMAT_UNDEFINED = MTLPixelFormatInvalid,
  DEFINE_PIXELFORMATS(8, UNORM, Unorm),
  DEFINE_PIXELFORMATS(16, UINT, Uint),
  DEFINE_PIXELFORMATS(16, SFLOAT, Float),
  DEFINE_PIXELFORMATS(32, UINT, Uint),
  DEFINE_PIXELFORMATS(32, SFLOAT, Float),
  PIXELFORMAT_BGRA8_UNORM = MTLPixelFormatBGRA8Unorm,
  PIXELFORMAT_D16_UNORM = MTLPixelFormatDepth16Unorm,
  PIXELFORMAT_D24_UNORM = MTLPixelFormatDepth24Unorm_Stencil8,
  PIXELFORMAT_D24_UNORM_S8 = MTLPixelFormatDepth24Unorm_Stencil8
};

enum IndexFormat {
  INDEXFORMAT_UINT16 = MTLIndexTypeUInt16,
  INDEXFORMAT_UINT32 = MTLIndexTypeUInt32
};

#define DEFINE_VERTEXFORMATS(t0, t1)                                           \
  VERTEXFORMAT_##t0 = MTLVertexFormat##t1,                                     \
  VERTEXFORMAT_##t0##2 = MTLVertexFormat##t1##2,                               \
  VERTEXFORMAT_##t0##3 = MTLVertexFormat##t1##3,                               \
  VERTEXFORMAT_##t0##4 = MTLVertexFormat##t1##4

enum VertexFormat { DEFINE_VERTEXFORMATS(FLOAT, Float) };

enum DescriptorType {
  DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
  DESCRIPTOR_TYPE_STORAGE_IMAGE,
  DESCRIPTOR_TYPE_UNIFORM_BUFFER,
  DESCRIPTOR_TYPE_STORAGE_BUFFER
};
enum VertexInputRate { VERTEX_INPUT_RATE_VERTEX, VERTEX_INPUT_RATE_INSTANCE };

enum FilterMode { FILTER_NEAREST, FILTER_LINEAR };

enum ImageLayout {
  IMAGE_LAYOUT_UNDEFINED,
  IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
  IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
  IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
  IMAGE_LAYOUT_GENERAL,
  IMAGE_LAYOUT_PRESENT_SRC
};
} // namespace ngfx

Updated on 3 April 2021 at 20:21:51 PDT