suyu/src/video_core/texture_cache/types.h

149 lines
2.8 KiB
C++
Raw Normal View History

// Copyright 2019 yuzu Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
#pragma once
#include "common/common_funcs.h"
#include "common/common_types.h"
#include "video_core/texture_cache/slot_vector.h"
namespace VideoCommon {
constexpr size_t NUM_RT = 8;
constexpr size_t MAX_MIP_LEVELS = 14;
constexpr SlotId CORRUPT_ID{0xfffffffe};
using ImageId = SlotId;
using ImageMapId = SlotId;
using ImageViewId = SlotId;
using ImageAllocId = SlotId;
using SamplerId = SlotId;
using FramebufferId = SlotId;
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,
};
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