2020-12-30 06:25:23 +01:00
|
|
|
// 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;
|
2021-06-12 15:52:27 +02:00
|
|
|
using ImageMapId = SlotId;
|
2020-12-30 06:25:23 +01:00
|
|
|
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;
|
|
|
|
};
|
|
|
|
|
2021-05-08 04:14:21 +02:00
|
|
|
struct Region2D {
|
|
|
|
constexpr auto operator<=>(const Region2D&) const noexcept = default;
|
|
|
|
|
|
|
|
Offset2D start;
|
|
|
|
Offset2D end;
|
|
|
|
};
|
|
|
|
|
2020-12-30 06:25:23 +01:00
|
|
|
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 {
|
2021-07-04 18:08:49 +02:00
|
|
|
u64 src_offset;
|
|
|
|
u64 dst_offset;
|
2020-12-30 06:25:23 +01:00
|
|
|
size_t size;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct SwizzleParameters {
|
|
|
|
Extent3D num_tiles;
|
|
|
|
Extent3D block;
|
|
|
|
size_t buffer_offset;
|
|
|
|
s32 level;
|
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace VideoCommon
|