- Fixed OpenGL renderer LoadVertexArray & DrawArray.

- Improved SPU SCs.
- Renamed mem_ptr_t -> mem_list_ptr_t, mem_struct_ptr_t -> mem_ptr_t.
This commit is contained in:
DH
2013-11-19 23:10:23 +02:00
parent 5373747210
commit 9d5b13839b
24 changed files with 424 additions and 322 deletions
+44 -47
View File
@@ -1,10 +1,48 @@
#pragma once
#pragma warning(disable: 4739)
template<typename T>
template<typename T, int size = sizeof(T)> struct se_t;
template<typename T> struct se_t<T, 1> { static __forceinline void func(T& dst, const T src) { (u8&)dst = (u8&)src; } };
template<typename T> struct se_t<T, 2> { static __forceinline void func(T& dst, const T src) { (u16&)dst = _byteswap_ushort((u16&)src); } };
template<typename T> struct se_t<T, 4> { static __forceinline void func(T& dst, const T src) { (u32&)dst = _byteswap_ulong((u32&)src); } };
template<typename T> struct se_t<T, 8> { static __forceinline void func(T& dst, const T src) { (u64&)dst = _byteswap_uint64((u64&)src); } };
template<typename T, __int64 _value, int size = sizeof(T)> struct const_se_t;;
template<typename T, __int64 _value> struct const_se_t<T, _value, 1>
{
static const T value = (T)_value;
};
template<typename T, __int64 _value> struct const_se_t<T, _value, 2>
{
static const T value = ((_value >> 8) & 0xff) | ((_value << 8) & 0xff00);
};
template<typename T, __int64 _value> struct const_se_t<T, _value, 4>
{
static const T value =
((_value >> 24) & 0x000000ff) |
((_value >> 8) & 0x0000ff00) |
((_value << 8) & 0x00ff0000) |
((_value << 24) & 0xff000000);
};
template<typename T, __int64 _value> struct const_se_t<T, _value, 8>
{
static const T value =
((_value >> 56) & 0x00000000000000ff) |
((_value >> 40) & 0x000000000000ff00) |
((_value >> 24) & 0x0000000000ff0000) |
((_value >> 8) & 0x00000000ff000000) |
((_value << 8) & 0x000000ff00000000) |
((_value << 24) & 0x0000ff0000000000) |
((_value << 40) & 0x00ff000000000000) |
((_value << 56) & 0xff00000000000000);
};
template<typename T, int size=sizeof(T)>
class be_t
{
static_assert(sizeof(T) == 1 || sizeof(T) == 2 || sizeof(T) == 4 || sizeof(T) == 8, "Bad be_t type");
static_assert(size == 1 || size == 2 || size == 4 || size == 8, "Bad be_t type");
T m_data;
public:
@@ -32,28 +70,7 @@ public:
{
T res;
switch(sizeof(T))
{
case 1:
(u8&)res = (u8&)m_data;
break;
case 2:
(u16&)res = _byteswap_ushort((u16&)m_data);
break;
case 4:
(u32&)res = _byteswap_ulong((u32&)m_data);
break;
case 8:
(u64&)res = _byteswap_uint64((u64&)m_data);
break;
default:
assert(0);
break;
}
se_t<T>::func(res, m_data);
return res;
}
@@ -65,27 +82,7 @@ public:
void FromLE(const T& value)
{
switch(sizeof(T))
{
case 1:
(u8&)m_data = (u8&)value;
return;
case 2:
(u16&)m_data = _byteswap_ushort((u16&)value);
return;
case 4:
(u32&)m_data = _byteswap_ulong((u32&)value);
return;
case 8:
(u64&)m_data = _byteswap_uint64((u64&)value);
return;
}
assert(0);
m_data = value;
se_t<T>::func(m_data, value);
}
//template<typename T1>
@@ -151,4 +148,4 @@ public:
template<typename T1> bool operator < (const be_t<T1>& right) const { return (T1)ToLE() < right.ToLE(); }
template<typename T1> bool operator >= (const be_t<T1>& right) const { return (T1)ToLE() >= right.ToLE(); }
template<typename T1> bool operator <= (const be_t<T1>& right) const { return (T1)ToLE() <= right.ToLE(); }
};
};