mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-10-27 16:02:37 +00:00
109 lines
6.1 KiB
C++
109 lines
6.1 KiB
C++
#ifndef EMULATOR_INCLUDE_EMULATOR_GRAPHICS_TILE_H_
|
|
#define EMULATOR_INCLUDE_EMULATOR_GRAPHICS_TILE_H_
|
|
|
|
#include "common/abi.h"
|
|
#include "common/common.h"
|
|
|
|
namespace Libs::Graphics {
|
|
|
|
enum class TileMode {
|
|
VideoOutLinear,
|
|
VideoOutTiled,
|
|
TextureLinear,
|
|
TextureTiled,
|
|
// RenderTextureLinear,
|
|
// RenderTextureTiled,
|
|
};
|
|
|
|
struct TileSizeAlign {
|
|
uint32_t size = 0;
|
|
uint32_t align = 0;
|
|
};
|
|
|
|
struct TileSizeOffset {
|
|
uint32_t size = 0;
|
|
uint32_t offset = 0;
|
|
uint32_t src_size = 0;
|
|
uint32_t src_offset = 0;
|
|
uint32_t x = 0;
|
|
uint32_t y = 0;
|
|
};
|
|
|
|
struct TilePaddedSize {
|
|
uint32_t width = 0;
|
|
uint32_t height = 0;
|
|
};
|
|
|
|
void TileInit();
|
|
void TileConvertTiledToLinear(void* dst, const void* src, TileMode mode, uint32_t width,
|
|
uint32_t height);
|
|
void TileConvertTiledToLinearRenderTarget(void* dst, const void* src, uint32_t width,
|
|
uint32_t height, uint32_t pitch,
|
|
uint32_t bytes_per_element, uint64_t size,
|
|
uint64_t src_size = 0, uint32_t src_x = 0,
|
|
uint32_t src_y = 0);
|
|
void TileConvertLinearToTiledRenderTarget(void* dst, const void* src, uint32_t width,
|
|
uint32_t height, uint32_t pitch,
|
|
uint32_t bytes_per_element, uint64_t size,
|
|
uint64_t dst_size = 0, uint32_t dst_x = 0,
|
|
uint32_t dst_y = 0);
|
|
void TileConvertTiledToLinearStandard64KB(void* dst, const void* src, uint32_t format,
|
|
uint32_t width, uint32_t height, uint32_t pitch,
|
|
uint64_t size, uint64_t src_size = 0, uint32_t src_x = 0,
|
|
uint32_t src_y = 0);
|
|
void TileConvertTiledToLinearStandard64KB32(void* dst, const void* src, uint32_t width,
|
|
uint32_t height, uint32_t pitch, uint64_t size,
|
|
uint64_t src_size = 0, uint32_t src_x = 0,
|
|
uint32_t src_y = 0);
|
|
void TileConvertLinearToTiledStandard64KB32(void* dst, const void* src, uint32_t width,
|
|
uint32_t height, uint32_t pitch, uint64_t size);
|
|
void TileConvertTiledToLinearStandard64KB16(void* dst, const void* src, uint32_t width,
|
|
uint32_t height, uint32_t pitch, uint64_t size,
|
|
uint64_t src_size = 0, uint32_t src_x = 0,
|
|
uint32_t src_y = 0);
|
|
void TileConvertTiledToLinearDepth(void* dst, const void* src, uint32_t format, uint32_t width,
|
|
uint32_t height, uint32_t pitch, uint64_t size);
|
|
void TileConvertLinearToTiledDepth(void* dst, const void* src, uint32_t format, uint32_t width,
|
|
uint32_t height, uint32_t pitch, uint64_t size);
|
|
void TileConvertTiledToLinearStandard4KB(void* dst, const void* src, uint32_t format,
|
|
uint32_t width, uint32_t height, uint32_t pitch,
|
|
uint64_t dst_size, uint64_t src_size, uint32_t src_x = 0,
|
|
uint32_t src_y = 0);
|
|
void TileConvertTiledToLinearStandard256B(void* dst, const void* src, uint32_t format,
|
|
uint32_t width, uint32_t height, uint32_t pitch,
|
|
uint64_t dst_size, uint64_t src_size);
|
|
bool TileIsStandard256BTextureSupported(uint32_t format);
|
|
bool TileIsStandard4KBTextureSupported(uint32_t format);
|
|
bool TileIsStandard64KBTextureSupported(uint32_t format);
|
|
bool TileGetStandard4KBVolumeLayout(uint32_t format, uint32_t* bytes_per_element,
|
|
uint32_t* texels_per_element_wide,
|
|
uint32_t* texels_per_element_tall, uint32_t* block_width_log2,
|
|
uint32_t* block_height_log2, uint32_t* block_depth_log2);
|
|
|
|
bool TileGetDepthSize(uint32_t width, uint32_t height, uint32_t pitch, uint32_t z_format,
|
|
uint32_t stencil_format, bool htile, TileSizeAlign* stencil_size,
|
|
TileSizeAlign* htile_size, TileSizeAlign* depth_size);
|
|
uint32_t TileGetRenderTargetPitch(uint32_t width, uint32_t bytes_per_element);
|
|
bool TileGetRenderTargetSize(uint32_t width, uint32_t height, uint32_t pitch,
|
|
uint32_t bytes_per_element, TileSizeAlign* total_size);
|
|
bool TileGetRenderTargetMipLayout(uint32_t width, uint32_t height, uint32_t pitch,
|
|
uint32_t bytes_per_element, uint32_t levels,
|
|
TileSizeAlign* total_size, TileSizeOffset* level_sizes,
|
|
TilePaddedSize* padded_size);
|
|
void TileGetTextureSize(uint32_t format, uint32_t width, uint32_t height, uint32_t pitch,
|
|
uint32_t levels, uint32_t tile, TileSizeAlign* total_size,
|
|
TileSizeOffset* level_sizes, TilePaddedSize* padded_size);
|
|
void TileGetTextureTotalSize(uint32_t format, uint32_t width, uint32_t height, uint32_t depth,
|
|
uint32_t pitch, uint32_t levels, uint32_t tile, bool volume_texture,
|
|
TileSizeAlign* total_size);
|
|
uint32_t TileGetTexturePitch(uint32_t format, uint32_t width, uint32_t levels, uint32_t tile);
|
|
void TileConvertTiledToLinearStandard4KB3D(void* dst, const void* src, uint32_t format,
|
|
uint32_t width, uint32_t height, uint32_t depth,
|
|
uint32_t pitch, uint64_t dst_slice_stride,
|
|
uint64_t dst_size, uint64_t src_size,
|
|
bool clear_dst = true);
|
|
|
|
} // namespace Libs::Graphics
|
|
|
|
#endif /* EMULATOR_INCLUDE_EMULATOR_GRAPHICS_TILE_H_ */
|