|
|
|
@ -80,6 +80,56 @@ struct TICEntry { |
|
|
|
}; |
|
|
|
static_assert(sizeof(TICEntry) == 0x20, "TICEntry has wrong size"); |
|
|
|
|
|
|
|
enum class WrapMode : u32 { |
|
|
|
Wrap = 0, |
|
|
|
Mirror = 1, |
|
|
|
ClampToEdge = 2, |
|
|
|
Border = 3, |
|
|
|
ClampOGL = 4, |
|
|
|
MirrorOnceClampToEdge = 5, |
|
|
|
MirrorOnceBorder = 6, |
|
|
|
MirrorOnceClampOGL = 7, |
|
|
|
}; |
|
|
|
|
|
|
|
enum class TextureFilter : u32 { |
|
|
|
Nearest = 1, |
|
|
|
Linear = 2, |
|
|
|
}; |
|
|
|
|
|
|
|
enum class TextureMipmapFilter : u32 { |
|
|
|
None = 1, |
|
|
|
Nearest = 2, |
|
|
|
Linear = 3, |
|
|
|
}; |
|
|
|
|
|
|
|
struct TSCEntry { |
|
|
|
union { |
|
|
|
BitField<0, 3, WrapMode> wrap_u; |
|
|
|
BitField<3, 3, WrapMode> wrap_v; |
|
|
|
BitField<6, 3, WrapMode> wrap_p; |
|
|
|
BitField<9, 1, u32> depth_compare_enabled; |
|
|
|
BitField<10, 3, u32> depth_compare_func; |
|
|
|
}; |
|
|
|
union { |
|
|
|
BitField<0, 2, TextureFilter> mag_filter; |
|
|
|
BitField<4, 2, TextureFilter> min_filter; |
|
|
|
BitField<6, 2, TextureMipmapFilter> mip_filter; |
|
|
|
}; |
|
|
|
INSERT_PADDING_BYTES(8); |
|
|
|
u32 border_color_r; |
|
|
|
u32 border_color_g; |
|
|
|
u32 border_color_b; |
|
|
|
u32 border_color_a; |
|
|
|
}; |
|
|
|
static_assert(sizeof(TSCEntry) == 0x20, "TSCEntry has wrong size"); |
|
|
|
|
|
|
|
struct FullTextureInfo { |
|
|
|
u32 index; |
|
|
|
TICEntry tic; |
|
|
|
TSCEntry tsc; |
|
|
|
bool enabled; |
|
|
|
}; |
|
|
|
|
|
|
|
/// Returns the number of bytes per pixel of the input texture format. |
|
|
|
u32 BytesPerPixel(TextureFormat format); |
|
|
|
|
|
|
|
|