TextureInfo: PrepareResolve, Reorganize source, add better documentation

This commit is contained in:
Dr. Chat
2017-03-14 22:46:47 -05:00
parent 581875b339
commit 4a815e62cb
3 changed files with 119 additions and 85 deletions

View File

@@ -34,7 +34,7 @@ enum class TextureFormat : uint32_t {
k_8_8 = 10,
k_Cr_Y1_Cb_Y0 = 11,
k_Y1_Cr_Y0_Cb = 12,
// ? hole
k_Shadow = 13,
k_8_8_8_8_A = 14,
k_4_4_4_4 = 15,
k_10_11_11 = 16,
@@ -42,7 +42,7 @@ enum class TextureFormat : uint32_t {
k_DXT1 = 18,
k_DXT2_3 = 19,
k_DXT4_5 = 20,
// ? hole
k_DXV = 21,
k_24_8 = 22,
k_24_8_FLOAT = 23,
k_16 = 24,
@@ -233,20 +233,24 @@ struct TextureInfo {
union {
struct {
uint32_t logical_width;
uint32_t block_width;
uint32_t input_width;
uint32_t input_pitch;
uint32_t block_width; // # of horizontal blocks
uint32_t input_width; // pixel pitch
uint32_t input_pitch; // pitch in bytes
// DEPRECATED: Do not use.
uint32_t output_width;
uint32_t output_pitch;
} size_1d;
struct {
uint32_t logical_width;
uint32_t logical_height;
uint32_t block_width;
uint32_t block_height;
uint32_t input_width;
uint32_t input_height;
uint32_t input_pitch;
uint32_t block_width; // # of horizontal blocks
uint32_t block_height; // # of vertical blocks
uint32_t input_width; // pixel pitch
uint32_t input_height; // pixel height
uint32_t input_pitch; // pitch in bytes
// DEPRECATED: Do not use.
uint32_t output_width;
uint32_t output_height;
uint32_t output_pitch;
@@ -256,15 +260,17 @@ struct TextureInfo {
struct {
uint32_t logical_width;
uint32_t logical_height;
uint32_t block_width;
uint32_t block_height;
uint32_t input_width;
uint32_t input_height;
uint32_t input_pitch;
uint32_t block_width; // # of horizontal blocks
uint32_t block_height; // # of vertical blocks
uint32_t input_width; // pixel pitch
uint32_t input_height; // pixel height
uint32_t input_pitch; // pitch in bytes
uint32_t input_face_length; // pitch of face in bytes
// DEPRECATED: Do not use.
uint32_t output_width;
uint32_t output_height;
uint32_t output_pitch;
uint32_t input_face_length;
uint32_t output_face_length;
} size_cube;
};
@@ -272,6 +278,11 @@ struct TextureInfo {
static bool Prepare(const xenos::xe_gpu_texture_fetch_t& fetch,
TextureInfo* out_info);
static bool PrepareResolve(uint32_t physical_address,
TextureFormat texture_format, Endian endian,
uint32_t width, uint32_t height,
TextureInfo* out_info);
static bool GetPackedTileOffset(const TextureInfo& texture_info,
uint32_t* out_offset_x,
uint32_t* out_offset_y);
@@ -286,9 +297,10 @@ struct TextureInfo {
}
private:
void CalculateTextureSizes1D(const xenos::xe_gpu_texture_fetch_t& fetch);
void CalculateTextureSizes2D(const xenos::xe_gpu_texture_fetch_t& fetch);
void CalculateTextureSizesCube(const xenos::xe_gpu_texture_fetch_t& fetch);
void CalculateTextureSizes1D(uint32_t width);
void CalculateTextureSizes2D(uint32_t width, uint32_t height);
void CalculateTextureSizesCube(uint32_t width, uint32_t height,
uint32_t depth);
};
} // namespace gpu