mirror of
https://github.com/RPCSX/rpcsx.git
synced 2025-12-31 22:00:10 +01:00
178 lines
4.2 KiB
C++
178 lines
4.2 KiB
C++
#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;
|
|
} |