#include "stdafx.h" #include "RSXThread.h" RSXTexture::RSXTexture() : m_bias(0) , m_remap(0xE4) , m_min_filter(1) , m_mag_filter(2) { m_index = 0; } RSXTexture::RSXTexture(u8 index) : m_bias(0) , m_remap(0xE4) , m_min_filter(1) , m_mag_filter(2) { m_index = index; } void RSXTexture::Init() { // Offset methodRegisters[NV4097_SET_TEXTURE_OFFSET + (m_index*4)] = 0; // Format methodRegisters[NV4097_SET_TEXTURE_FORMAT + (m_index*4)] = 0; // Address methodRegisters[NV4097_SET_TEXTURE_ADDRESS + (m_index*4)] = ((/*wraps*/1) | ((/*anisoBias*/0) << 4) | ((/*wrapt*/1) << 8) | ((/*unsignedRemap*/0) << 12) | ((/*wrapr*/2) << 16) | ((/*gamma*/0) << 20) |((/*signedRemap*/0) << 24) | ((/*zfunc*/0) << 28)); // Control0 methodRegisters[NV4097_SET_TEXTURE_CONTROL0 + (m_index*4)] = (((/*alphakill*/0) << 2) | (/*maxaniso*/0) << 4) | ((/*maxlod*/0xc00) << 7) | ((/*minlod*/0) << 19) | ((/*enable*/0) << 31); // Image Rect methodRegisters[NV4097_SET_TEXTURE_IMAGE_RECT + (m_index*4)] = (/*height*/1) | ((/*width*/1) << 16); } u32 RSXTexture::GetOffset() const { return methodRegisters[NV4097_SET_TEXTURE_OFFSET + (m_index*4)]; } u8 RSXTexture::GetLocation() const { return (methodRegisters[NV4097_SET_TEXTURE_FORMAT + (m_index*4)] & 0x3) - 1; } bool RSXTexture::isCubemap() const { return ((methodRegisters[NV4097_SET_TEXTURE_FORMAT + (m_index*4)] >> 2) & 0x1); } u8 RSXTexture::GetBorderType() const { return ((methodRegisters[NV4097_SET_TEXTURE_FORMAT + (m_index*4)] >> 3) & 0x1); } u8 RSXTexture::GetDimension() const { return ((methodRegisters[NV4097_SET_TEXTURE_FORMAT + (m_index*4)] >> 4) & 0xf); } u8 RSXTexture::GetFormat() const { return ((methodRegisters[NV4097_SET_TEXTURE_FORMAT + (m_index*4)] >> 8) & 0xff); } u16 RSXTexture::Getmipmap() const { return ((methodRegisters[NV4097_SET_TEXTURE_FORMAT + (m_index*4)] >> 16) & 0xffff); } u8 RSXTexture::GetWrapS() const { return ((methodRegisters[NV4097_SET_TEXTURE_ADDRESS + (m_index*4)]) & 0xf); } u8 RSXTexture::GetWrapT() const { return ((methodRegisters[NV4097_SET_TEXTURE_ADDRESS + (m_index*4)] >> 8) & 0xf); } u8 RSXTexture::GetWrapR() const { return ((methodRegisters[NV4097_SET_TEXTURE_ADDRESS + (m_index*4)] >> 16) & 0xf); } u8 RSXTexture::GetUnsignedRemap() const { return ((methodRegisters[NV4097_SET_TEXTURE_ADDRESS + (m_index*4)] >> 12) & 0xf); } u8 RSXTexture::GetZfunc() const { return ((methodRegisters[NV4097_SET_TEXTURE_ADDRESS + (m_index*4)] >> 28) & 0xf); } u8 RSXTexture::GetGamma() const { return ((methodRegisters[NV4097_SET_TEXTURE_ADDRESS + (m_index*4)] >> 20) & 0xf); } u8 RSXTexture::GetAnisoBias() const { return ((methodRegisters[NV4097_SET_TEXTURE_ADDRESS + (m_index*4)] >> 4) & 0xf); } u8 RSXTexture::GetSignedRemap() const { return ((methodRegisters[NV4097_SET_TEXTURE_ADDRESS + (m_index*4)] >> 24) & 0xf); } bool RSXTexture::IsEnabled() const { return ((methodRegisters[NV4097_SET_TEXTURE_CONTROL0 + (m_index*4)] >> 31) & 0x1); } u16 RSXTexture::GetMinLOD() const { return ((methodRegisters[NV4097_SET_TEXTURE_CONTROL0 + (m_index*4)] >> 19) & 0xfff); } u16 RSXTexture::GetMaxLOD() const { return ((methodRegisters[NV4097_SET_TEXTURE_CONTROL0 + (m_index*4)] >> 7) & 0xfff); } u8 RSXTexture::GetMaxAniso() const { return ((methodRegisters[NV4097_SET_TEXTURE_CONTROL0 + (m_index*4)] >> 4) & 0x7); } bool RSXTexture::IsAlphaKillEnabled() const { return ((methodRegisters[NV4097_SET_TEXTURE_CONTROL0 + (m_index*4)] >> 2) & 0x1); } u16 RSXTexture::GetWidth() const { return ((methodRegisters[NV4097_SET_TEXTURE_IMAGE_RECT + (m_index*4)] >> 16) & 0xffff); } u16 RSXTexture::GetHeight() const { return ((methodRegisters[NV4097_SET_TEXTURE_IMAGE_RECT + (m_index*4)]) & 0xffff); } void RSXTexture::SetControl0(const bool enable, const u16 minlod, const u16 maxlod, const u8 maxaniso) { } void RSXTexture::SetControl1(u32 remap) { m_remap = remap; } void RSXTexture::SetControl3(u16 depth, u32 pitch) { m_depth = depth; m_pitch = pitch; } void RSXTexture::SetFilter(u16 bias, u8 min, u8 mag, u8 conv, u8 a_signed, u8 r_signed, u8 g_signed, u8 b_signed) { m_bias = bias; m_min_filter = min; m_mag_filter = mag; m_conv = conv; m_a_signed = a_signed; m_r_signed = r_signed; m_g_signed = g_signed; m_b_signed = b_signed; }