yuzu-mainline/src/video_core/texture_cache/types.h

156 lines
3.0 KiB
C++

// SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "common/common_funcs.h"
#include "common/common_types.h"
#include "common/slot_vector.h"
namespace VideoCommon {
constexpr size_t NUM_RT = 8;
constexpr size_t MAX_MIP_LEVELS = 14;
constexpr Common::SlotId CORRUPT_ID{0xfffffffe};
using ImageId = Common::SlotId;
using ImageMapId = Common::SlotId;
using ImageViewId = Common::SlotId;
using ImageAllocId = Common::SlotId;
using SamplerId = Common::SlotId;
using FramebufferId = Common::SlotId;
/// Fake image ID for null image views
constexpr ImageId NULL_IMAGE_ID{0};
/// Image view ID for null descriptors
constexpr ImageViewId NULL_IMAGE_VIEW_ID{0};
/// Sampler ID for bugged sampler ids
constexpr SamplerId NULL_SAMPLER_ID{0};
enum class ImageType : u32 {
e1D,
e2D,
e3D,
Linear,
Buffer,
};
enum class ImageViewType : u32 {
e1D,
e2D,
Cube,
e3D,
e1DArray,
e2DArray,
CubeArray,
Rect,
Buffer,
};
constexpr size_t NUM_IMAGE_VIEW_TYPES = 9;
enum class RelaxedOptions : u32 {
Size = 1 << 0,
Format = 1 << 1,
Samples = 1 << 2,
ForceBrokenViews = 1 << 3,
};
DECLARE_ENUM_FLAG_OPERATORS(RelaxedOptions)
struct Offset2D {
constexpr auto operator<=>(const Offset2D&) const noexcept = default;
s32 x;
s32 y;
};
struct Offset3D {
constexpr auto operator<=>(const Offset3D&) const noexcept = default;
s32 x;
s32 y;
s32 z;
};
struct Region2D {
constexpr auto operator<=>(const Region2D&) const noexcept = default;
Offset2D start;
Offset2D end;
};
struct Extent2D {
constexpr auto operator<=>(const Extent2D&) const noexcept = default;
u32 width;
u32 height;
};
struct Extent3D {
constexpr auto operator<=>(const Extent3D&) const noexcept = default;
u32 width;
u32 height;
u32 depth;
};
struct SubresourceLayers {
s32 base_level = 0;
s32 base_layer = 0;
s32 num_layers = 1;
};
struct SubresourceBase {
constexpr auto operator<=>(const SubresourceBase&) const noexcept = default;
s32 level = 0;
s32 layer = 0;
};
struct SubresourceExtent {
constexpr auto operator<=>(const SubresourceExtent&) const noexcept = default;
s32 levels = 1;
s32 layers = 1;
};
struct SubresourceRange {
constexpr auto operator<=>(const SubresourceRange&) const noexcept = default;
SubresourceBase base;
SubresourceExtent extent;
};
struct ImageCopy {
SubresourceLayers src_subresource;
SubresourceLayers dst_subresource;
Offset3D src_offset;
Offset3D dst_offset;
Extent3D extent;
};
struct BufferImageCopy {
size_t buffer_offset;
size_t buffer_size;
u32 buffer_row_length;
u32 buffer_image_height;
SubresourceLayers image_subresource;
Offset3D image_offset;
Extent3D image_extent;
};
struct BufferCopy {
u64 src_offset;
u64 dst_offset;
size_t size;
};
struct SwizzleParameters {
Extent3D num_tiles;
Extent3D block;
size_t buffer_offset;
s32 level;
};
} // namespace VideoCommon