src/ngfx/porting/d3d/D3DGraphicsCore.h

Namespaces

Name
ngfx

Defines

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

Macro Documentation

define NOMINMAX

#define NOMINMAX 

define DEFINE_PIXELFORMATS

#define DEFINE_PIXELFORMATS(
    s,
    t0,
    t1
)
  PIXELFORMAT_R##s##_##t0 = DXGI_FORMAT_R##s##_##t1,                           \
  PIXELFORMAT_RG##s##_##t0 = DXGI_FORMAT_R##s##G##s##_##t1,                    \
  PIXELFORMAT_RGBA##s##_##t0 = DXGI_FORMAT_R##s##G##s##B##s##A##s##_##t1

define DEFINE_VERTEXFORMATS

#define DEFINE_VERTEXFORMATS(
    s,
    t0,
    t1
)
  VERTEXFORMAT_##t0 = DXGI_FORMAT_R##s##_##t1,                                 \
  VERTEXFORMAT_##t0##2 = DXGI_FORMAT_R##s##G##s##_##t1,                        \
  VERTEXFORMAT_##t0##3 = DXGI_FORMAT_R##s##G##s##B##s##_##t1,                  \
  VERTEXFORMAT_##t0##4 = DXGI_FORMAT_R##s##G##s##B##s##A##s##_##t1

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
#define NOMINMAX
#include <d3d12.h>

namespace ngfx {
enum PrimitiveTopology {
  PRIMITIVE_TOPOLOGY_POINT_LIST = D3D_PRIMITIVE_TOPOLOGY_POINTLIST,
  PRIMITIVE_TOPOLOGY_LINE_LIST = D3D_PRIMITIVE_TOPOLOGY_LINELIST,
  PRIMITIVE_TOPOLOGY_LINE_STRIP = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP,
  PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST,
  PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP
};
enum PolygonMode {
  POLYGON_MODE_FILL = D3D12_FILL_MODE_SOLID,
  POLYGON_MODE_LINE = D3D12_FILL_MODE_WIREFRAME
};
enum BlendFactor {
  BLEND_FACTOR_ZERO = D3D12_BLEND_ZERO,
  BLEND_FACTOR_ONE = D3D12_BLEND_ONE,
  BLEND_FACTOR_SRC_COLOR = D3D12_BLEND_SRC_COLOR,
  BLEND_FACTOR_ONE_MINUS_SRC_COLOR = D3D12_BLEND_INV_SRC_COLOR,
  BLEND_FACTOR_DST_COLOR = D3D12_BLEND_DEST_COLOR,
  BLEND_FACTOR_ONE_MINUS_DST_COLOR = D3D12_BLEND_INV_DEST_COLOR,
  BLEND_FACTOR_SRC_ALPHA = D3D12_BLEND_SRC_ALPHA,
  BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = D3D12_BLEND_INV_SRC_ALPHA,
  BLEND_FACTOR_DST_ALPHA = D3D12_BLEND_DEST_ALPHA,
  BLEND_FACTOR_ONE_MINUS_DST_ALPHA = D3D12_BLEND_INV_DEST_ALPHA,
  BLEND_FACTOR_CONSTANT_COLOR = D3D12_BLEND_BLEND_FACTOR,
  BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = D3D12_BLEND_INV_BLEND_FACTOR
};
enum BufferUsageFlagBits {
  BUFFER_USAGE_TRANSFER_SRC_BIT = 1,
  BUFFER_USAGE_TRANSFER_DST_BIT = 2,
  BUFFER_USAGE_UNIFORM_BUFFER_BIT = 4,
  BUFFER_USAGE_STORAGE_BUFFER_BIT = 8,
  BUFFER_USAGE_VERTEX_BUFFER_BIT = 16,
  BUFFER_USAGE_INDEX_BUFFER_BIT = 32
};
enum BlendOp {
  BLEND_OP_ADD = D3D12_BLEND_OP_ADD,
  BLEND_OP_SUBTRACT = D3D12_BLEND_OP_SUBTRACT,
  BLEND_OP_REVERSE_SUBTRACT = D3D12_BLEND_OP_REV_SUBTRACT,
  BLEND_OP_MIN = D3D12_BLEND_OP_MIN,
  BLEND_OP_MAX = D3D12_BLEND_OP_MAX
};
enum ColorComponentFlagBits {
  COLOR_COMPONENT_R_BIT = D3D12_COLOR_WRITE_ENABLE_RED,
  COLOR_COMPONENT_G_BIT = D3D12_COLOR_WRITE_ENABLE_GREEN,
  COLOR_COMPONENT_B_BIT = D3D12_COLOR_WRITE_ENABLE_BLUE,
  COLOR_COMPONENT_A_BIT = D3D12_COLOR_WRITE_ENABLE_ALPHA
};
enum CommandBufferLevel {
  COMMAND_BUFFER_LEVEL_PRIMARY = D3D12_COMMAND_LIST_TYPE_DIRECT,
  COMMAND_BUFFER_LEVEL_SECONDARY = D3D12_COMMAND_LIST_TYPE_BUNDLE
};
enum CullModeFlags {
  CULL_MODE_NONE = D3D12_CULL_MODE_NONE,
  CULL_MODE_FRONT_BIT = D3D12_CULL_MODE_FRONT,
  CULL_MODE_BACK_BIT = D3D12_CULL_MODE_BACK
};
enum FrontFace { FRONT_FACE_COUNTER_CLOCKWISE, FRONT_FACE_CLOCKWISE };
enum TextureType {
  TEXTURE_TYPE_2D = D3D12_SRV_DIMENSION_TEXTURE2D,
  TEXTURE_TYPE_3D = D3D12_SRV_DIMENSION_TEXTURE3D,
  TEXTURE_TYPE_CUBE = D3D12_SRV_DIMENSION_TEXTURECUBE,
  TEXTURE_TYPE_2D_ARRAY = D3D12_SRV_DIMENSION_TEXTURE2DARRAY
};
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 = 64,
  SHADER_STAGE_ALL = 0xFF
};
#define DEFINE_PIXELFORMATS(s, t0, t1)                                         \
  PIXELFORMAT_R##s##_##t0 = DXGI_FORMAT_R##s##_##t1,                           \
  PIXELFORMAT_RG##s##_##t0 = DXGI_FORMAT_R##s##G##s##_##t1,                    \
  PIXELFORMAT_RGBA##s##_##t0 = DXGI_FORMAT_R##s##G##s##B##s##A##s##_##t1

enum PixelFormat {
  PIXELFORMAT_UNDEFINED = DXGI_FORMAT_UNKNOWN,
  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 = DXGI_FORMAT_B8G8R8A8_UNORM,
  PIXELFORMAT_D16_UNORM = DXGI_FORMAT_D16_UNORM,
  PIXELFORMAT_D24_UNORM = DXGI_FORMAT_D24_UNORM_S8_UINT,
  PIXELFORMAT_D24_UNORM_S8 = DXGI_FORMAT_D24_UNORM_S8_UINT
};

enum IndexFormat {
  INDEXFORMAT_UINT16 = DXGI_FORMAT_R16_UINT,
  INDEXFORMAT_UINT32 = DXGI_FORMAT_R32_UINT
};

#define DEFINE_VERTEXFORMATS(s, t0, t1)                                        \
  VERTEXFORMAT_##t0 = DXGI_FORMAT_R##s##_##t1,                                 \
  VERTEXFORMAT_##t0##2 = DXGI_FORMAT_R##s##G##s##_##t1,                        \
  VERTEXFORMAT_##t0##3 = DXGI_FORMAT_R##s##G##s##B##s##_##t1,                  \
  VERTEXFORMAT_##t0##4 = DXGI_FORMAT_R##s##G##s##B##s##A##s##_##t1

enum VertexFormat { DEFINE_VERTEXFORMATS(32, 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 = D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA,
  VERTEX_INPUT_RATE_INSTANCE = D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA
};

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