mirror of
https://github.com/hedge-dev/UnleashedRecomp.git
synced 2025-10-30 07:11:05 +00:00
Specialization constants, reverse Z and async PSO implementation. (#9)
* Specialization constant implementation for Vulkan. * Implement DXIL library linking. * Implement proper reverse Z & fix motion blur flicker. * Mirage API mapping. * Initial work for async PSO. * Further async PSO work. * Set pipeline names. * Handle special layers writing depth. * Handle bones in shadow pipeline. * Fix additive mode setting wrong pipeline field. * Pass models to compilation threads through shared pointers. * Safety improvements. * Allow DXIL linking to happen in parallel. * Display more debug information. * Queue unique models for compilation immediately. * Put async PSO debug printing behind a macro. * Kick off terrain models to pipeline compilation thread the moment they are made. * Hook a different function to do waiting in. * Fix pipelines getting dropped. * Account for ConstTexCoord. * Fix async PSO accounting for alpha to coverage even when MSAA is off. * Remove "has bone" specialization constant. * Sky shader compilation & more debugging helpers. * Assign names to shaders during loading. * Fix string symbol definitions. * Print description of recently compiled render thread pipelines. * Switch to an enum library that doesn't murder IntelliSense. * Precompile pipelines for object icons. * Skip fur pipelines. * Skip printing info for pipelines compiled during loading. * Precompile pipelines for Sonic's mouth, motion blur, and forced transparent objects. * Precompile planar reflection shaders. * Precompile sparkle shaders in loading screens. * Precompile fur shader. * Refactor model traversing to enqueue every single compilation to worker threads. * Dynamically create pipeline threads depending on hardware concurrency. * Fix MSAA depth resolve not accounting for reverse Z. * Integrate smol-v. * Implement PSO caching. * Update ShaderRecomp & remove unused function.
This commit is contained in:
parent
349f07cf77
commit
d36aa26bac
45 changed files with 2959 additions and 162 deletions
|
|
@ -79,6 +79,8 @@ set(SWA_UI_CXX_SOURCES
|
|||
"ui/window.cpp"
|
||||
)
|
||||
|
||||
set(SMOLV_SOURCE_DIR "${SWA_THIRDPARTY_ROOT}/ShaderRecomp/thirdparty/smol-v/source")
|
||||
|
||||
set(SWA_CXX_SOURCES
|
||||
"app.cpp"
|
||||
"main.cpp"
|
||||
|
|
@ -93,6 +95,8 @@ set(SWA_CXX_SOURCES
|
|||
${SWA_HID_CXX_SOURCES}
|
||||
${SWA_PATCHES_CXX_SOURCES}
|
||||
${SWA_UI_CXX_SOURCES}
|
||||
|
||||
"${SMOLV_SOURCE_DIR}/smolv.cpp"
|
||||
)
|
||||
|
||||
if (WIN32)
|
||||
|
|
@ -122,6 +126,7 @@ find_package(zstd CONFIG REQUIRED)
|
|||
find_package(Stb REQUIRED)
|
||||
find_package(unofficial-concurrentqueue REQUIRED)
|
||||
find_package(imgui CONFIG REQUIRED)
|
||||
find_package(magic_enum CONFIG REQUIRED)
|
||||
|
||||
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/D3D12)
|
||||
add_custom_command(TARGET UnleashedRecomp POST_BUILD
|
||||
|
|
@ -130,10 +135,13 @@ add_custom_command(TARGET UnleashedRecomp POST_BUILD
|
|||
COMMAND_EXPAND_LISTS
|
||||
)
|
||||
|
||||
file(COPY ${PACKAGE_PREFIX_DIR}/bin/dxil.dll DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
target_link_libraries(UnleashedRecomp PRIVATE
|
||||
Microsoft::DirectX-Headers
|
||||
Microsoft::DirectX-Guids
|
||||
Microsoft::DirectX12-Agility
|
||||
Microsoft::DirectXShaderCompiler
|
||||
comctl32
|
||||
dxgi
|
||||
Vulkan::Headers
|
||||
|
|
@ -154,6 +162,7 @@ target_link_libraries(UnleashedRecomp PRIVATE
|
|||
unofficial::concurrentqueue::concurrentqueue
|
||||
Synchronization
|
||||
imgui::imgui
|
||||
magic_enum::magic_enum
|
||||
)
|
||||
|
||||
target_include_directories(UnleashedRecomp PRIVATE
|
||||
|
|
@ -161,6 +170,7 @@ target_include_directories(UnleashedRecomp PRIVATE
|
|||
${CMAKE_CURRENT_SOURCE_DIR}/api
|
||||
${SWA_THIRDPARTY_ROOT}/ddspp
|
||||
${Stb_INCLUDE_DIR}
|
||||
${SMOLV_SOURCE_DIR}
|
||||
)
|
||||
|
||||
target_precompile_headers(UnleashedRecomp PUBLIC ${SWA_PRECOMPILED_HEADERS})
|
||||
|
|
|
|||
378
UnleashedRecomp/api/Hedgehog/Base/Container/hhMap.h
Normal file
378
UnleashedRecomp/api/Hedgehog/Base/Container/hhMap.h
Normal file
|
|
@ -0,0 +1,378 @@
|
|||
#pragma once
|
||||
|
||||
#include <Hedgehog/Base/System/hhAllocator.h>
|
||||
|
||||
namespace hh
|
||||
{
|
||||
template<
|
||||
class Key,
|
||||
class T,
|
||||
class Compare = std::less<Key>,
|
||||
class Allocator = Hedgehog::Base::TAllocator<std::pair<const Key, T>>>
|
||||
class map
|
||||
{
|
||||
protected:
|
||||
enum EColor
|
||||
{
|
||||
eColor_Red,
|
||||
eColor_Black
|
||||
};
|
||||
|
||||
struct SNode
|
||||
{
|
||||
using allocator_type = typename std::allocator_traits<Allocator>::template rebind_alloc<SNode>;
|
||||
|
||||
xpointer<SNode> pLeft;
|
||||
xpointer<SNode> pParent;
|
||||
xpointer<SNode> pRight;
|
||||
std::pair<const Key, T> Value;
|
||||
uint8_t Color;
|
||||
bool IsNil;
|
||||
};
|
||||
|
||||
Compare m_Comp;
|
||||
typename SNode::allocator_type m_Alloc;
|
||||
xpointer<SNode> m_pHead;
|
||||
be<uint32_t> m_Count;
|
||||
|
||||
struct SFindResult
|
||||
{
|
||||
SNode* pParent;
|
||||
bool IsRight;
|
||||
SNode* pBound;
|
||||
};
|
||||
|
||||
bool LowerBoundDuplicate(const SNode* pBound, const Key& in_rKey) const
|
||||
{
|
||||
return !pBound->IsNil && !m_Comp(in_rKey, pBound->Value.first);
|
||||
}
|
||||
|
||||
SFindResult FindLowerBound(const Key& in_rKey) const
|
||||
{
|
||||
SFindResult result{ m_pHead->pParent, true, m_pHead };
|
||||
SNode* pNode = result.pParent;
|
||||
|
||||
while (!pNode->IsNil)
|
||||
{
|
||||
result.pParent = pNode;
|
||||
if (m_Comp(pNode->Value.first, in_rKey))
|
||||
{
|
||||
result.IsRight = true;
|
||||
pNode = pNode->pRight;
|
||||
}
|
||||
else
|
||||
{
|
||||
result.IsRight = false;
|
||||
result.pBound = pNode;
|
||||
pNode = pNode->pLeft;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
SNode* Find(const Key& in_rKey) const
|
||||
{
|
||||
const SFindResult result = FindLowerBound(in_rKey);
|
||||
return LowerBoundDuplicate(result.pBound, in_rKey) ? result.pBound : m_pHead.get();
|
||||
}
|
||||
|
||||
static SNode* Max(SNode* pNode)
|
||||
{
|
||||
while (!pNode->pRight->IsNil)
|
||||
pNode = pNode->pRight;
|
||||
|
||||
return pNode;
|
||||
}
|
||||
|
||||
static SNode* Min(SNode* pNode)
|
||||
{
|
||||
while (!pNode->pLeft->IsNil)
|
||||
pNode = pNode->pLeft;
|
||||
|
||||
return pNode;
|
||||
}
|
||||
|
||||
public:
|
||||
using key_type = Key;
|
||||
using mapped_type = T;
|
||||
using value_type = std::pair<const Key, T>;
|
||||
using size_type = std::size_t;
|
||||
using difference_type = std::ptrdiff_t;
|
||||
using key_compare = Compare;
|
||||
using allocator_type = Allocator;
|
||||
using reference = value_type&;
|
||||
using const_reference = const value_type&;
|
||||
using pointer = typename std::allocator_traits<Allocator>::pointer;
|
||||
using const_pointer = typename std::allocator_traits<Allocator>::const_pointer;
|
||||
|
||||
class iterator
|
||||
{
|
||||
public:
|
||||
using iterator_category = std::bidirectional_iterator_tag;
|
||||
using value_type = std::pair<const Key, T>;
|
||||
using difference_type = std::ptrdiff_t;
|
||||
using pointer = value_type*;
|
||||
using reference = value_type&;
|
||||
|
||||
iterator(const std::nullptr_t&) = delete;
|
||||
iterator(SNode* pNode) : m_pNode(pNode) {}
|
||||
|
||||
reference operator*() const { return m_pNode->Value; }
|
||||
pointer operator->() const { return &m_pNode->Value; }
|
||||
|
||||
iterator& operator++()
|
||||
{
|
||||
if (m_pNode->pRight->IsNil)
|
||||
{
|
||||
SNode* pNode;
|
||||
while (!(pNode = m_pNode->pParent)->IsNil && m_pNode == pNode->pRight)
|
||||
m_pNode = pNode;
|
||||
|
||||
m_pNode = pNode;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pNode = map::Min(m_pNode->pRight);
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
iterator operator++(int)
|
||||
{
|
||||
iterator temp(*this);
|
||||
++(*this);
|
||||
return temp;
|
||||
}
|
||||
|
||||
iterator& operator--()
|
||||
{
|
||||
if (m_pNode->IsNil)
|
||||
{
|
||||
m_pNode = m_pNode->pRight;
|
||||
}
|
||||
else if (m_pNode->pLeft->IsNil)
|
||||
{
|
||||
SNode* pNode;
|
||||
while (!(pNode = m_pNode->pParent)->IsNil && m_pNode == pNode->pLeft)
|
||||
m_pNode = pNode;
|
||||
|
||||
if (!m_pNode->IsNil)
|
||||
m_pNode = pNode;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pNode = map::Max(m_pNode->pLeft);
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
iterator operator--(int)
|
||||
{
|
||||
iterator temp(*this);
|
||||
--(*this);
|
||||
return temp;
|
||||
}
|
||||
|
||||
bool operator==(const iterator& rhs) const { return m_pNode == rhs.m_pNode; }
|
||||
bool operator!=(const iterator& rhs) const { return !(*this == rhs); }
|
||||
|
||||
private:
|
||||
SNode* m_pNode;
|
||||
friend class iterator;
|
||||
friend class map;
|
||||
};
|
||||
|
||||
class const_iterator
|
||||
{
|
||||
public:
|
||||
using iterator_category = std::bidirectional_iterator_tag;
|
||||
using value_type = std::pair<const Key, T>;
|
||||
using difference_type = std::ptrdiff_t;
|
||||
using pointer = const value_type*;
|
||||
using reference = const value_type&;
|
||||
|
||||
const_iterator(const std::nullptr_t&) = delete;
|
||||
const_iterator(SNode* pNode) : m_pNode(pNode) {}
|
||||
const_iterator(const iterator& iterator) : m_pNode(iterator.m_pNode) {}
|
||||
|
||||
reference operator*() const { return m_pNode->Value; }
|
||||
pointer operator->() const { return &m_pNode->Value; }
|
||||
|
||||
const_iterator& operator++()
|
||||
{
|
||||
if (m_pNode->pRight->IsNil)
|
||||
{
|
||||
SNode* pNode;
|
||||
while (!(pNode = m_pNode->pParent)->IsNil && m_pNode == pNode->pRight)
|
||||
m_pNode = pNode;
|
||||
|
||||
m_pNode = pNode;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pNode = map::Min(m_pNode->pRight);
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
const_iterator operator++(int)
|
||||
{
|
||||
const_iterator temp(*this);
|
||||
++(*this);
|
||||
return temp;
|
||||
}
|
||||
|
||||
const_iterator& operator--()
|
||||
{
|
||||
if (m_pNode->IsNil)
|
||||
{
|
||||
m_pNode = m_pNode->pRight;
|
||||
}
|
||||
else if (m_pNode->pLeft->IsNil)
|
||||
{
|
||||
SNode* pNode;
|
||||
while (!(pNode = m_pNode->pParent)->IsNil && m_pNode == pNode->pLeft)
|
||||
m_pNode = pNode;
|
||||
|
||||
if (!m_pNode->IsNil)
|
||||
m_pNode = pNode;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pNode = map::Max(m_pNode->pLeft);
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
const_iterator operator--(int)
|
||||
{
|
||||
const_iterator temp(*this);
|
||||
--(*this);
|
||||
return temp;
|
||||
}
|
||||
|
||||
bool operator==(const const_iterator& rhs) const { return m_pNode == rhs.m_pNode; }
|
||||
bool operator!=(const const_iterator& rhs) const { return !(*this == rhs); }
|
||||
|
||||
private:
|
||||
SNode* m_pNode;
|
||||
friend class map;
|
||||
};
|
||||
|
||||
using reverse_iterator = std::reverse_iterator<iterator>;
|
||||
using const_reverse_iterator = std::reverse_iterator<const_iterator>;
|
||||
|
||||
public:
|
||||
allocator_type get_allocator() const
|
||||
{
|
||||
return m_Alloc;
|
||||
}
|
||||
|
||||
T& at(const Key& key)
|
||||
{
|
||||
return Find(key)->Value.second;
|
||||
}
|
||||
|
||||
const T& at(const Key& key) const
|
||||
{
|
||||
return Find(key)->Value.second;
|
||||
}
|
||||
|
||||
iterator begin()
|
||||
{
|
||||
return iterator(m_pHead->pLeft);
|
||||
}
|
||||
|
||||
const_iterator begin() const
|
||||
{
|
||||
return const_iterator(m_pHead->pLeft);
|
||||
}
|
||||
|
||||
const_iterator cbegin() const
|
||||
{
|
||||
return const_iterator(m_pHead->pLeft);
|
||||
}
|
||||
|
||||
iterator end()
|
||||
{
|
||||
return iterator(m_pHead);
|
||||
}
|
||||
|
||||
const_iterator end() const
|
||||
{
|
||||
return const_iterator(m_pHead);
|
||||
}
|
||||
|
||||
const_iterator cend() const
|
||||
{
|
||||
return const_iterator(m_pHead);
|
||||
}
|
||||
|
||||
reverse_iterator rbegin()
|
||||
{
|
||||
return reverse_iterator(end());
|
||||
}
|
||||
|
||||
const_reverse_iterator rbegin() const
|
||||
{
|
||||
return const_reverse_iterator(end());
|
||||
}
|
||||
|
||||
const_reverse_iterator crbegin() const
|
||||
{
|
||||
return const_reverse_iterator(cend());
|
||||
}
|
||||
|
||||
reverse_iterator rend()
|
||||
{
|
||||
return reverse_iterator(begin());
|
||||
}
|
||||
|
||||
const_reverse_iterator rend() const
|
||||
{
|
||||
return const_reverse_iterator(begin());
|
||||
}
|
||||
|
||||
const_reverse_iterator crend() const
|
||||
{
|
||||
return const_reverse_iterator(cbegin());
|
||||
}
|
||||
|
||||
bool empty() const
|
||||
{
|
||||
return m_Count == 0;
|
||||
}
|
||||
|
||||
size_type size() const
|
||||
{
|
||||
return m_Count;
|
||||
}
|
||||
|
||||
size_type max_size() const
|
||||
{
|
||||
return ~0u;
|
||||
}
|
||||
|
||||
size_type count(const Key& key) const
|
||||
{
|
||||
return LowerBoundDuplicate(FindLowerBound(key).pBound, key) ? 1u : 0u;
|
||||
}
|
||||
|
||||
iterator find(const Key& key)
|
||||
{
|
||||
return iterator(Find(key));
|
||||
}
|
||||
|
||||
const_iterator find(const Key& key) const
|
||||
{
|
||||
return const_iterator(Find(key));
|
||||
}
|
||||
};
|
||||
|
||||
static_assert(sizeof(map<int, int>) == 0xC);
|
||||
}
|
||||
255
UnleashedRecomp/api/Hedgehog/Base/Container/hhVector.h
Normal file
255
UnleashedRecomp/api/Hedgehog/Base/Container/hhVector.h
Normal file
|
|
@ -0,0 +1,255 @@
|
|||
#pragma once
|
||||
|
||||
#include <Hedgehog/Base/System/hhAllocator.h>
|
||||
|
||||
namespace hh
|
||||
{
|
||||
template<typename T, typename Allocator = Hedgehog::Base::TAllocator<T>>
|
||||
class vector
|
||||
{
|
||||
protected:
|
||||
Allocator m_Alloc;
|
||||
xpointer<T> m_pFirst;
|
||||
xpointer<T> m_pLast;
|
||||
xpointer<T> m_pEnd;
|
||||
|
||||
public:
|
||||
using value_type = T;
|
||||
using allocator_type = Allocator;
|
||||
using size_type = std::size_t;
|
||||
using difference_type = std::ptrdiff_t;
|
||||
using reference = value_type&;
|
||||
using const_reference = const value_type&;
|
||||
using pointer = typename std::allocator_traits<Allocator>::pointer;
|
||||
using const_pointer = typename std::allocator_traits<Allocator>::const_pointer;
|
||||
|
||||
class iterator
|
||||
{
|
||||
public:
|
||||
using iterator_category = std::random_access_iterator_tag;
|
||||
using value_type = T;
|
||||
using difference_type = std::ptrdiff_t;
|
||||
using pointer = T*;
|
||||
using reference = T&;
|
||||
|
||||
iterator() : m_pPtr(nullptr) {}
|
||||
iterator(T* p) : m_pPtr(p) {}
|
||||
|
||||
reference operator*() const { return *m_pPtr; }
|
||||
pointer operator->() const { return m_pPtr; }
|
||||
|
||||
iterator& operator++() { ++m_pPtr; return *this; }
|
||||
iterator operator++(int) { iterator tmp = *this; ++(*this); return tmp; }
|
||||
|
||||
iterator& operator--() { --m_pPtr; return *this; }
|
||||
iterator operator--(int) { iterator tmp = *this; --(*this); return tmp; }
|
||||
|
||||
iterator& operator+=(difference_type n) { m_pPtr += n; return *this; }
|
||||
iterator operator+(difference_type n) const { iterator tmp = *this; return tmp += n; }
|
||||
friend iterator operator+(difference_type n, iterator it) { return it + n; }
|
||||
|
||||
iterator& operator-=(difference_type n) { return *this += -n; }
|
||||
iterator operator-(difference_type n) const { iterator tmp = *this; return tmp -= n; }
|
||||
difference_type operator-(const iterator& other) const { return m_pPtr - other.m_pPtr; }
|
||||
|
||||
reference operator[](difference_type n) const { return *(*this + n); }
|
||||
|
||||
bool operator==(const iterator& other) const { return m_pPtr == other.m_pPtr; }
|
||||
bool operator!=(const iterator& other) const { return !(*this == other); }
|
||||
bool operator<(const iterator& other) const { return m_pPtr < other.m_pPtr; }
|
||||
bool operator<=(const iterator& other) const { return !(other < *this); }
|
||||
bool operator>(const iterator& other) const { return other < *this; }
|
||||
bool operator>=(const iterator& other) const { return !(*this < other); }
|
||||
|
||||
private:
|
||||
T* m_pPtr;
|
||||
|
||||
friend class vector;
|
||||
friend class const_iterator;
|
||||
};
|
||||
|
||||
class const_iterator
|
||||
{
|
||||
public:
|
||||
using iterator_category = std::random_access_iterator_tag;
|
||||
using value_type = T;
|
||||
using difference_type = std::ptrdiff_t;
|
||||
using pointer = const T*;
|
||||
using reference = const T&;
|
||||
|
||||
const_iterator() : m_pPtr(nullptr) {}
|
||||
const_iterator(T* p) : m_pPtr(p) {}
|
||||
const_iterator(const iterator& other) : m_pPtr(other.m_pPtr) {}
|
||||
|
||||
reference operator*() const { return *m_pPtr; }
|
||||
pointer operator->() const { return m_pPtr; }
|
||||
|
||||
const_iterator& operator++() { ++m_pPtr; return *this; }
|
||||
const_iterator operator++(int) { const_iterator tmp = *this; ++(*this); return tmp; }
|
||||
|
||||
const_iterator& operator--() { --m_pPtr; return *this; }
|
||||
const_iterator operator--(int) { const_iterator tmp = *this; --(*this); return tmp; }
|
||||
|
||||
const_iterator& operator+=(difference_type n) { m_pPtr += n; return *this; }
|
||||
const_iterator operator+(difference_type n) const { const_iterator tmp = *this; return tmp += n; }
|
||||
friend const_iterator operator+(difference_type n, const_iterator it) { return it + n; }
|
||||
|
||||
const_iterator& operator-=(difference_type n) { return *this += -n; }
|
||||
const_iterator operator-(difference_type n) const { const_iterator tmp = *this; return tmp -= n; }
|
||||
difference_type operator-(const const_iterator& other) const { return m_pPtr - other.m_pPtr; }
|
||||
|
||||
reference operator[](difference_type n) const { return *(*this + n); }
|
||||
|
||||
bool operator==(const const_iterator& other) const { return m_pPtr == other.m_pPtr; }
|
||||
bool operator!=(const const_iterator& other) const { return !(*this == other); }
|
||||
bool operator<(const const_iterator& other) const { return m_pPtr < other.m_pPtr; }
|
||||
bool operator<=(const const_iterator& other) const { return !(other < *this); }
|
||||
bool operator>(const const_iterator& other) const { return other < *this; }
|
||||
bool operator>=(const const_iterator& other) const { return !(*this < other); }
|
||||
|
||||
private:
|
||||
T* m_pPtr;
|
||||
friend class vector;
|
||||
};
|
||||
|
||||
using reverse_iterator = std::reverse_iterator<iterator>;
|
||||
using const_reverse_iterator = std::reverse_iterator<const_iterator>;
|
||||
|
||||
allocator_type get_allocator() const
|
||||
{
|
||||
return m_Alloc;
|
||||
}
|
||||
|
||||
reference at(size_type pos)
|
||||
{
|
||||
return m_pFirst[pos];
|
||||
}
|
||||
|
||||
const_reference at(size_type pos) const
|
||||
{
|
||||
return m_pFirst[pos];
|
||||
}
|
||||
|
||||
reference operator[](size_type pos)
|
||||
{
|
||||
return m_pFirst[pos];
|
||||
}
|
||||
|
||||
const_reference operator[](size_type pos) const
|
||||
{
|
||||
return m_pFirst[pos];
|
||||
}
|
||||
|
||||
reference front()
|
||||
{
|
||||
return m_pFirst[0];
|
||||
}
|
||||
|
||||
const_reference front() const
|
||||
{
|
||||
return m_pFirst[0];
|
||||
}
|
||||
|
||||
reference back()
|
||||
{
|
||||
return m_pLast[-1];
|
||||
}
|
||||
|
||||
const_reference back() const
|
||||
{
|
||||
return m_pLast[-1];
|
||||
}
|
||||
|
||||
T* data()
|
||||
{
|
||||
return m_pFirst;
|
||||
}
|
||||
|
||||
const T* data() const
|
||||
{
|
||||
return m_pFirst;
|
||||
}
|
||||
|
||||
iterator begin()
|
||||
{
|
||||
return iterator(m_pFirst);
|
||||
}
|
||||
|
||||
const_iterator begin() const
|
||||
{
|
||||
return const_iterator(m_pFirst);
|
||||
}
|
||||
|
||||
const_iterator cbegin() const
|
||||
{
|
||||
return const_iterator(m_pFirst);
|
||||
}
|
||||
|
||||
iterator end()
|
||||
{
|
||||
return iterator(m_pLast);
|
||||
}
|
||||
|
||||
const_iterator end() const
|
||||
{
|
||||
return const_iterator(m_pLast);
|
||||
}
|
||||
|
||||
const_iterator cend() const
|
||||
{
|
||||
return const_iterator(m_pLast);
|
||||
}
|
||||
|
||||
reverse_iterator rbegin()
|
||||
{
|
||||
return reverse_iterator(end());
|
||||
}
|
||||
|
||||
const_reverse_iterator rbegin() const
|
||||
{
|
||||
return const_reverse_iterator(end());
|
||||
}
|
||||
|
||||
const_reverse_iterator crbegin() const
|
||||
{
|
||||
return const_reverse_iterator(cend());
|
||||
}
|
||||
|
||||
reverse_iterator rend()
|
||||
{
|
||||
return reverse_iterator(begin());
|
||||
}
|
||||
|
||||
const_reverse_iterator rend() const
|
||||
{
|
||||
return const_reverse_iterator(begin());
|
||||
}
|
||||
|
||||
const_reverse_iterator crend() const
|
||||
{
|
||||
return const_reverse_iterator(cbegin());
|
||||
}
|
||||
|
||||
bool empty() const
|
||||
{
|
||||
return m_pFirst == m_pLast;
|
||||
}
|
||||
|
||||
size_type size() const
|
||||
{
|
||||
return m_pLast - m_pFirst;
|
||||
}
|
||||
|
||||
size_type max_size() const
|
||||
{
|
||||
return ~0u;
|
||||
}
|
||||
|
||||
size_type capacity() const
|
||||
{
|
||||
return m_pEnd - m_pFirst;
|
||||
}
|
||||
};
|
||||
|
||||
SWA_ASSERT_SIZEOF(vector<int>, 0x10);
|
||||
}
|
||||
27
UnleashedRecomp/api/Hedgehog/Base/System/hhSymbol.h
Normal file
27
UnleashedRecomp/api/Hedgehog/Base/System/hhSymbol.h
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
#pragma once
|
||||
|
||||
#include <SWA.inl>
|
||||
|
||||
namespace Hedgehog::Base
|
||||
{
|
||||
class CSharedString;
|
||||
|
||||
class CStringSymbol
|
||||
{
|
||||
public:
|
||||
be<uint32_t> m_Index;
|
||||
|
||||
CStringSymbol();
|
||||
CStringSymbol(const char* in_pName);
|
||||
CStringSymbol(const CSharedString& in_rName);
|
||||
|
||||
bool operator==(const CStringSymbol& in_rOther) const;
|
||||
bool operator!=(const CStringSymbol& in_rOther) const;
|
||||
bool operator<(const CStringSymbol& in_rOther) const;
|
||||
};
|
||||
|
||||
SWA_ASSERT_OFFSETOF(CStringSymbol, m_Index, 0);
|
||||
SWA_ASSERT_SIZEOF(CStringSymbol, 4);
|
||||
}
|
||||
|
||||
#include <Hedgehog/Base/System/hhSymbol.inl>
|
||||
31
UnleashedRecomp/api/Hedgehog/Base/System/hhSymbol.inl
Normal file
31
UnleashedRecomp/api/Hedgehog/Base/System/hhSymbol.inl
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
namespace Hedgehog::Base
|
||||
{
|
||||
inline CStringSymbol::CStringSymbol()
|
||||
{
|
||||
}
|
||||
|
||||
inline CStringSymbol::CStringSymbol(const char* in_pName)
|
||||
{
|
||||
GuestToHostFunction<void>(sub_82E014D8, this, in_pName);
|
||||
}
|
||||
|
||||
inline CStringSymbol::CStringSymbol(const CSharedString& in_rName)
|
||||
{
|
||||
GuestToHostFunction<void>(sub_82E013B0, this, &in_rName);
|
||||
}
|
||||
|
||||
inline bool CStringSymbol::operator==(const CStringSymbol& in_rOther) const
|
||||
{
|
||||
return m_Index == in_rOther.m_Index;
|
||||
}
|
||||
|
||||
inline bool CStringSymbol::operator!=(const CStringSymbol& in_rOther) const
|
||||
{
|
||||
return m_Index != in_rOther.m_Index;
|
||||
}
|
||||
|
||||
inline bool CStringSymbol::operator<(const CStringSymbol& in_rOther) const
|
||||
{
|
||||
return m_Index < in_rOther.m_Index;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
#include "SWA.inl"
|
||||
#include <SWA.inl>
|
||||
|
||||
namespace Hedgehog::Base
|
||||
{
|
||||
|
|
@ -41,4 +41,4 @@ namespace Hedgehog::Base
|
|||
};
|
||||
}
|
||||
|
||||
#include "Hedgehog/Base/Type/detail/hhStringHolder.inl"
|
||||
#include <Hedgehog/Base/Type/detail/hhStringHolder.inl>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#include "Hedgehog/Base/hhObject.h"
|
||||
#include <Hedgehog/Base/hhObject.h>
|
||||
#include <Hedgehog/Base/Type/hhSharedString.h>
|
||||
|
||||
namespace Hedgehog::Database
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ namespace Hedgehog::Database
|
|||
|
||||
inline bool CDatabaseData::CheckMadeAll()
|
||||
{
|
||||
return true;
|
||||
return GuestToHostFunction<bool>(m_pVftable->m_fpCheckMadeAll, this);
|
||||
}
|
||||
|
||||
inline bool CDatabaseData::IsMadeOne() const
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
#pragma once
|
||||
|
||||
#include <SWA.inl>
|
||||
|
||||
namespace Hedgehog::Mirage
|
||||
{
|
||||
class CRenderingInfrastructure;
|
||||
|
||||
class CVertexDeclarationPtr
|
||||
{
|
||||
public:
|
||||
xpointer<void> m_pD3DVertexDeclaration;
|
||||
xpointer<CRenderingInfrastructure> m_pRenderingInfrastructure;
|
||||
};
|
||||
|
||||
SWA_ASSERT_OFFSETOF(CVertexDeclarationPtr, m_pD3DVertexDeclaration, 0x0);
|
||||
SWA_ASSERT_OFFSETOF(CVertexDeclarationPtr, m_pRenderingInfrastructure, 0x4);
|
||||
SWA_ASSERT_SIZEOF(CVertexDeclarationPtr, 0x8);
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
#pragma once
|
||||
|
||||
#include <boost/smart_ptr/shared_ptr.h>
|
||||
|
||||
#include <Hedgehog/Base/Container/hhVector.h>
|
||||
#include <Hedgehog/Database/System/hhDatabaseData.h>
|
||||
|
||||
namespace Hedgehog::Mirage
|
||||
{
|
||||
class CMaterialData;
|
||||
class CTexsetData;
|
||||
class CShaderListData;
|
||||
class CParameterFloat4Element;
|
||||
class CParameterInt4Element;
|
||||
class CParameterBoolElement;
|
||||
|
||||
class CMaterialData : public Database::CDatabaseData
|
||||
{
|
||||
public:
|
||||
boost::shared_ptr<CShaderListData> m_spShaderListData;
|
||||
boost::shared_ptr<CTexsetData> m_spTexsetData;
|
||||
hh::vector<boost::shared_ptr<CParameterFloat4Element>> m_Float4Params;
|
||||
hh::vector<boost::shared_ptr<CParameterInt4Element>> m_Int4Params;
|
||||
hh::vector<boost::shared_ptr<CParameterBoolElement>> m_Bool4Params;
|
||||
uint8_t m_AlphaThreshold;
|
||||
bool m_DoubleSided;
|
||||
bool m_Additive;
|
||||
};
|
||||
|
||||
SWA_ASSERT_OFFSETOF(CMaterialData, m_spShaderListData, 0xC);
|
||||
SWA_ASSERT_OFFSETOF(CMaterialData, m_spTexsetData, 0x14);
|
||||
SWA_ASSERT_OFFSETOF(CMaterialData, m_Float4Params, 0x1C);
|
||||
SWA_ASSERT_OFFSETOF(CMaterialData, m_Int4Params, 0x2C);
|
||||
SWA_ASSERT_OFFSETOF(CMaterialData, m_Bool4Params, 0x3C);
|
||||
SWA_ASSERT_OFFSETOF(CMaterialData, m_AlphaThreshold, 0x4C);
|
||||
SWA_ASSERT_OFFSETOF(CMaterialData, m_DoubleSided, 0x4D);
|
||||
SWA_ASSERT_OFFSETOF(CMaterialData, m_Additive, 0x4E);
|
||||
SWA_ASSERT_SIZEOF(CMaterialData, 0x50);
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
#pragma once
|
||||
|
||||
#include <boost/smart_ptr/shared_ptr.h>
|
||||
|
||||
#include <Hedgehog/Base/Type/hhSharedString.h>
|
||||
#include <Hedgehog/Database/System/hhDatabaseData.h>
|
||||
#include <Hedgehog/MirageCore/Misc/hhVertexDeclarationPtr.h>
|
||||
|
||||
namespace Hedgehog::Mirage
|
||||
{
|
||||
class CMaterialData;
|
||||
|
||||
class CMeshData : public Database::CDatabaseData
|
||||
{
|
||||
public:
|
||||
be<uint32_t> m_IndexNum;
|
||||
be<uint32_t> m_VertexNum;
|
||||
be<uint32_t> m_VertexSize;
|
||||
be<uint32_t> m_NodeNum;
|
||||
xpointer<uint8_t> m_pNodeIndices;
|
||||
be<uint32_t> m_VertexOffset;
|
||||
be<uint32_t> m_IndexOffset;
|
||||
xpointer<void> m_pD3DIndexBuffer;
|
||||
xpointer<void> m_pD3DVertexBuffer;
|
||||
CVertexDeclarationPtr m_VertexDeclarationPtr;
|
||||
SWA_INSERT_PADDING(0x4);
|
||||
boost::shared_ptr<CMaterialData> m_spMaterial;
|
||||
SWA_INSERT_PADDING(0xC);
|
||||
};
|
||||
|
||||
SWA_ASSERT_OFFSETOF(CMeshData, m_IndexNum, 0xC);
|
||||
SWA_ASSERT_OFFSETOF(CMeshData, m_VertexNum, 0x10);
|
||||
SWA_ASSERT_OFFSETOF(CMeshData, m_VertexSize, 0x14);
|
||||
SWA_ASSERT_OFFSETOF(CMeshData, m_NodeNum, 0x18);
|
||||
SWA_ASSERT_OFFSETOF(CMeshData, m_pNodeIndices, 0x1C);
|
||||
SWA_ASSERT_OFFSETOF(CMeshData, m_VertexOffset, 0x20);
|
||||
SWA_ASSERT_OFFSETOF(CMeshData, m_IndexOffset, 0x24);
|
||||
SWA_ASSERT_OFFSETOF(CMeshData, m_pD3DIndexBuffer, 0x28);
|
||||
SWA_ASSERT_OFFSETOF(CMeshData, m_pD3DVertexBuffer, 0x2C);
|
||||
SWA_ASSERT_OFFSETOF(CMeshData, m_VertexDeclarationPtr, 0x30);
|
||||
SWA_ASSERT_OFFSETOF(CMeshData, m_spMaterial, 0x3C);
|
||||
SWA_ASSERT_SIZEOF(CMeshData, 0x50);
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
#pragma once
|
||||
|
||||
#include <Hedgehog/Base/Container/hhVector.h>
|
||||
#include <Hedgehog/Database/System/hhDatabaseData.h>
|
||||
|
||||
namespace Hedgehog::Mirage
|
||||
{
|
||||
class CNodeGroupModelData;
|
||||
class CMeshData;
|
||||
class CModelNodeData;
|
||||
class CMatrixData;
|
||||
class CAabbData;
|
||||
class CSphereData;
|
||||
class CMorphModelData;
|
||||
|
||||
class CModelData : public Database::CDatabaseData
|
||||
{
|
||||
public:
|
||||
be<uint32_t> m_NodeGroupModelNum;
|
||||
hh::vector<boost::shared_ptr<CNodeGroupModelData>> m_NodeGroupModels;
|
||||
hh::vector<boost::shared_ptr<CMeshData>> m_OpaqueMeshes;
|
||||
hh::vector<boost::shared_ptr<CMeshData>> m_TransparentMeshes;
|
||||
hh::vector<boost::shared_ptr<CMeshData>> m_PunchThroughMeshes;
|
||||
be<uint32_t> m_NodeNum;
|
||||
boost::shared_ptr<uint8_t[]> m_spNodeParentIndices;
|
||||
boost::shared_ptr<CModelNodeData[]> m_spNodes;
|
||||
boost::shared_ptr<CMatrixData[]> m_spNodeMatrices;
|
||||
boost::shared_ptr<CAabbData> m_spAabb;
|
||||
boost::shared_ptr<CSphereData> m_spSphere;
|
||||
hh::vector<boost::shared_ptr<CMorphModelData>> m_MorphModels;
|
||||
};
|
||||
|
||||
SWA_ASSERT_OFFSETOF(CModelData, m_NodeGroupModelNum, 0xC);
|
||||
SWA_ASSERT_OFFSETOF(CModelData, m_NodeGroupModels, 0x10);
|
||||
SWA_ASSERT_OFFSETOF(CModelData, m_OpaqueMeshes, 0x20);
|
||||
SWA_ASSERT_OFFSETOF(CModelData, m_TransparentMeshes, 0x30);
|
||||
SWA_ASSERT_OFFSETOF(CModelData, m_PunchThroughMeshes, 0x40);
|
||||
SWA_ASSERT_OFFSETOF(CModelData, m_NodeNum, 0x50);
|
||||
SWA_ASSERT_OFFSETOF(CModelData, m_spNodeParentIndices, 0x54);
|
||||
SWA_ASSERT_OFFSETOF(CModelData, m_spNodes, 0x5C);
|
||||
SWA_ASSERT_OFFSETOF(CModelData, m_spNodeMatrices, 0x64);
|
||||
SWA_ASSERT_OFFSETOF(CModelData, m_spAabb, 0x6C);
|
||||
SWA_ASSERT_OFFSETOF(CModelData, m_spSphere, 0x74);
|
||||
SWA_ASSERT_OFFSETOF(CModelData, m_MorphModels, 0x7C);
|
||||
SWA_ASSERT_SIZEOF(CModelData, 0x8C);
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
#pragma once
|
||||
|
||||
#include <Hedgehog/Base/Container/hhVector.h>
|
||||
#include <Hedgehog/Database/System/hhDatabaseData.h>
|
||||
|
||||
namespace Hedgehog::Mirage
|
||||
{
|
||||
class CMeshData;
|
||||
|
||||
class CNodeGroupModelData : public Database::CDatabaseData
|
||||
{
|
||||
public:
|
||||
hh::vector<boost::shared_ptr<CMeshData>> m_OpaqueMeshes;
|
||||
hh::vector<boost::shared_ptr<CMeshData>> m_TransparentMeshes;
|
||||
hh::vector<boost::shared_ptr<CMeshData>> m_PunchThroughMeshes;
|
||||
be<uint32_t> m_SpecialMeshGroupNum;
|
||||
boost::shared_ptr<be<uint32_t>> m_SpecialMeshGroupModes;
|
||||
hh::vector<hh::vector<boost::shared_ptr<CMeshData>>> m_SpecialMeshGroups;
|
||||
Base::CSharedString m_Name;
|
||||
};
|
||||
|
||||
SWA_ASSERT_OFFSETOF(CNodeGroupModelData, m_OpaqueMeshes, 0xC);
|
||||
SWA_ASSERT_OFFSETOF(CNodeGroupModelData, m_TransparentMeshes, 0x1C);
|
||||
SWA_ASSERT_OFFSETOF(CNodeGroupModelData, m_PunchThroughMeshes, 0x2C);
|
||||
SWA_ASSERT_OFFSETOF(CNodeGroupModelData, m_SpecialMeshGroupNum, 0x3C);
|
||||
SWA_ASSERT_OFFSETOF(CNodeGroupModelData, m_SpecialMeshGroupModes, 0x40);
|
||||
SWA_ASSERT_OFFSETOF(CNodeGroupModelData, m_SpecialMeshGroups, 0x48);
|
||||
SWA_ASSERT_OFFSETOF(CNodeGroupModelData, m_Name, 0x58);
|
||||
SWA_ASSERT_SIZEOF(CNodeGroupModelData, 0x5C);
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
#pragma once
|
||||
|
||||
#include <boost/smart_ptr/shared_ptr.h>
|
||||
|
||||
#include <Hedgehog/Database/System/hhDatabaseData.h>
|
||||
|
||||
namespace Hedgehog::Base
|
||||
{
|
||||
class CCriticalSectionD3D9;
|
||||
}
|
||||
|
||||
namespace Hedgehog::Mirage
|
||||
{
|
||||
class CRenderingInfrastructure;
|
||||
|
||||
class CPixelShaderCodeData : public Database::CDatabaseData
|
||||
{
|
||||
public:
|
||||
xpointer<void> m_pD3DPixelShader;
|
||||
xpointer<uint8_t> m_spFunction;
|
||||
boost::shared_ptr<Base::CCriticalSectionD3D9> m_spCriticalSection;
|
||||
xpointer<CRenderingInfrastructure> m_pRenderingInfrastructure;
|
||||
};
|
||||
|
||||
SWA_ASSERT_OFFSETOF(CPixelShaderCodeData, m_pD3DPixelShader, 0xC);
|
||||
SWA_ASSERT_OFFSETOF(CPixelShaderCodeData, m_spFunction, 0x10);
|
||||
SWA_ASSERT_OFFSETOF(CPixelShaderCodeData, m_spCriticalSection, 0x14);
|
||||
SWA_ASSERT_OFFSETOF(CPixelShaderCodeData, m_pRenderingInfrastructure, 0x1C);
|
||||
SWA_ASSERT_SIZEOF(CPixelShaderCodeData, 0x20);
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
#pragma once
|
||||
|
||||
#include <Hedgehog/Base/Container/hhVector.h>
|
||||
#include <Hedgehog/Database/System/hhDatabaseData.h>
|
||||
|
||||
namespace Hedgehog::Mirage
|
||||
{
|
||||
class CPixelShaderCodeData;
|
||||
class CPixelShaderParameterData;
|
||||
|
||||
class CPixelShaderData : public Hedgehog::Database::CDatabaseData
|
||||
{
|
||||
public:
|
||||
boost::shared_ptr<CPixelShaderCodeData> m_spCode;
|
||||
SWA_INSERT_PADDING(0x4);
|
||||
hh::vector<boost::shared_ptr<CPixelShaderParameterData>> m_ParameterList;
|
||||
};
|
||||
|
||||
SWA_ASSERT_OFFSETOF(CPixelShaderData, m_spCode, 0xC);
|
||||
SWA_ASSERT_OFFSETOF(CPixelShaderData, m_ParameterList, 0x18);
|
||||
SWA_ASSERT_SIZEOF(CPixelShaderData, 0x28);
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
#pragma once
|
||||
|
||||
#include <boost/smart_ptr/shared_ptr.h>
|
||||
|
||||
#include <Hedgehog/Base/Container/hhMap.h>
|
||||
#include <Hedgehog/Base/System/hhSymbol.h>
|
||||
#include <Hedgehog/Database/System/hhDatabaseData.h>
|
||||
|
||||
namespace Hedgehog::Mirage
|
||||
{
|
||||
class CVertexShaderData;
|
||||
class CPixelShaderData;
|
||||
|
||||
class CVertexShaderPermutationData
|
||||
{
|
||||
public:
|
||||
hh::map<be<uint32_t>, boost::shared_ptr<CVertexShaderData>> m_VertexShaders;
|
||||
be<uint32_t> m_SubPermutations;
|
||||
};
|
||||
|
||||
SWA_ASSERT_OFFSETOF(CVertexShaderPermutationData, m_VertexShaders, 0x0);
|
||||
SWA_ASSERT_OFFSETOF(CVertexShaderPermutationData, m_SubPermutations, 0xC);
|
||||
SWA_ASSERT_SIZEOF(CVertexShaderPermutationData, 0x10);
|
||||
|
||||
class CPixelShaderPermutationData
|
||||
{
|
||||
public:
|
||||
hh::map<Base::CStringSymbol, boost::shared_ptr<CVertexShaderPermutationData>> m_VertexShaderPermutations;
|
||||
hh::map<be<uint32_t>, boost::shared_ptr<CPixelShaderData>> m_PixelShaders;
|
||||
be<uint32_t> m_SubPermutations;
|
||||
};
|
||||
|
||||
SWA_ASSERT_OFFSETOF(CPixelShaderPermutationData, m_VertexShaderPermutations, 0x0);
|
||||
SWA_ASSERT_OFFSETOF(CPixelShaderPermutationData, m_PixelShaders, 0xC);
|
||||
SWA_ASSERT_OFFSETOF(CPixelShaderPermutationData, m_SubPermutations, 0x18);
|
||||
SWA_ASSERT_SIZEOF(CPixelShaderPermutationData, 0x1C);
|
||||
|
||||
class CShaderListData : public Database::CDatabaseData
|
||||
{
|
||||
public:
|
||||
hh::map<Base::CStringSymbol, CPixelShaderPermutationData> m_PixelShaderPermutations;
|
||||
};
|
||||
|
||||
SWA_ASSERT_OFFSETOF(CShaderListData, m_PixelShaderPermutations, 0xC);
|
||||
SWA_ASSERT_SIZEOF(CShaderListData, 0x18);
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
#pragma once
|
||||
|
||||
#include <Hedgehog/Base/Container/hhVector.h>
|
||||
#include <Hedgehog/Database/System/hhDatabaseData.h>
|
||||
|
||||
namespace Hedgehog::Mirage
|
||||
{
|
||||
class CSphereData;
|
||||
class CNodeGroupModelData;
|
||||
class CMeshData;
|
||||
|
||||
class CTerrainModelData : public Database::CDatabaseData
|
||||
{
|
||||
public:
|
||||
SWA_INSERT_PADDING(0x4);
|
||||
hh::vector<boost::shared_ptr<CNodeGroupModelData>> m_NodeGroupModels;
|
||||
hh::vector<boost::shared_ptr<CMeshData>> m_OpaqueMeshes;
|
||||
hh::vector<boost::shared_ptr<CMeshData>> m_TransparentMeshes;
|
||||
hh::vector<boost::shared_ptr<CMeshData>> m_PunchThroughMeshes;
|
||||
boost::shared_ptr<CSphereData> m_spSphere;
|
||||
};
|
||||
|
||||
SWA_ASSERT_OFFSETOF(CTerrainModelData, m_NodeGroupModels, 0x10);
|
||||
SWA_ASSERT_OFFSETOF(CTerrainModelData, m_OpaqueMeshes, 0x20);
|
||||
SWA_ASSERT_OFFSETOF(CTerrainModelData, m_TransparentMeshes, 0x30);
|
||||
SWA_ASSERT_OFFSETOF(CTerrainModelData, m_PunchThroughMeshes, 0x40);
|
||||
SWA_ASSERT_OFFSETOF(CTerrainModelData, m_spSphere, 0x50);
|
||||
SWA_ASSERT_SIZEOF(CTerrainModelData, 0x58);
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
#pragma once
|
||||
|
||||
#include <boost/smart_ptr/shared_ptr.h>
|
||||
|
||||
#include <Hedgehog/Base/Container/hhVector.h>
|
||||
#include <Hedgehog/Database/System/hhDatabaseData.h>
|
||||
|
||||
namespace Hedgehog::Mirage
|
||||
{
|
||||
class CTextureData;
|
||||
|
||||
class CTexsetData : public Database::CDatabaseData
|
||||
{
|
||||
public:
|
||||
hh::vector<boost::shared_ptr<CTextureData>> m_TextureList;
|
||||
hh::vector<Base::CSharedString> m_TextureNameList;
|
||||
bool m_ConstTexCoord;
|
||||
};
|
||||
|
||||
SWA_ASSERT_OFFSETOF(CTexsetData, m_TextureList, 0xC);
|
||||
SWA_ASSERT_OFFSETOF(CTexsetData, m_TextureNameList, 0x1C);
|
||||
SWA_ASSERT_OFFSETOF(CTexsetData, m_ConstTexCoord, 0x2C);
|
||||
SWA_ASSERT_SIZEOF(CTexsetData, 0x30);
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
#pragma once
|
||||
|
||||
#include <Hedgehog/Database/System/hhDatabaseData.h>
|
||||
|
||||
namespace Hedgehog::Mirage
|
||||
{
|
||||
class CTextureData : public Database::CDatabaseData
|
||||
{
|
||||
public:
|
||||
SWA_INSERT_PADDING(0x8);
|
||||
uint8_t m_TexcoordIndex;
|
||||
SWA_INSERT_PADDING(0x1B);
|
||||
};
|
||||
|
||||
SWA_ASSERT_OFFSETOF(CTextureData, m_TexcoordIndex, 0x14);
|
||||
SWA_ASSERT_SIZEOF(CTextureData, 0x30);
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
#pragma once
|
||||
|
||||
#include <boost/smart_ptr/shared_ptr.h>
|
||||
|
||||
#include <Hedgehog/Database/System/hhDatabaseData.h>
|
||||
|
||||
namespace Hedgehog::Base
|
||||
{
|
||||
class CCriticalSectionD3D9;
|
||||
}
|
||||
|
||||
namespace Hedgehog::Mirage
|
||||
{
|
||||
class CRenderingInfrastructure;
|
||||
|
||||
class CVertexShaderCodeData : public Database::CDatabaseData
|
||||
{
|
||||
public:
|
||||
xpointer<void> m_pD3DVertexShader;
|
||||
xpointer<uint8_t> m_spFunction;
|
||||
boost::shared_ptr<Base::CCriticalSectionD3D9> m_spCriticalSection;
|
||||
xpointer<CRenderingInfrastructure> m_pRenderingInfrastructure;
|
||||
};
|
||||
|
||||
SWA_ASSERT_OFFSETOF(CVertexShaderCodeData, m_pD3DVertexShader, 0xC);
|
||||
SWA_ASSERT_OFFSETOF(CVertexShaderCodeData, m_spFunction, 0x10);
|
||||
SWA_ASSERT_OFFSETOF(CVertexShaderCodeData, m_spCriticalSection, 0x14);
|
||||
SWA_ASSERT_OFFSETOF(CVertexShaderCodeData, m_pRenderingInfrastructure, 0x1C);
|
||||
SWA_ASSERT_SIZEOF(CVertexShaderCodeData, 0x20);
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
#pragma once
|
||||
|
||||
#include <Hedgehog/Base/Container/hhVector.h>
|
||||
#include <Hedgehog/Database/System/hhDatabaseData.h>
|
||||
|
||||
namespace Hedgehog::Mirage
|
||||
{
|
||||
class CVertexShaderCodeData;
|
||||
class CVertexShaderParameterData;
|
||||
|
||||
class CVertexShaderData : public Hedgehog::Database::CDatabaseData
|
||||
{
|
||||
public:
|
||||
boost::shared_ptr<CVertexShaderCodeData> m_spCode;
|
||||
SWA_INSERT_PADDING(0x4);
|
||||
hh::vector<boost::shared_ptr<CVertexShaderParameterData>> m_ParameterList;
|
||||
};
|
||||
|
||||
SWA_ASSERT_OFFSETOF(CVertexShaderData, m_spCode, 0xC);
|
||||
SWA_ASSERT_OFFSETOF(CVertexShaderData, m_ParameterList, 0x18);
|
||||
SWA_ASSERT_SIZEOF(CVertexShaderData, 0x28);
|
||||
}
|
||||
41
UnleashedRecomp/api/Hedgehog/Sparkle/hhParticleMaterial.h
vendored
Normal file
41
UnleashedRecomp/api/Hedgehog/Sparkle/hhParticleMaterial.h
vendored
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
#pragma once
|
||||
|
||||
#include <boost/smart_ptr/shared_ptr.h>
|
||||
|
||||
#include <Hedgehog/Base/Container/hhVector.h>
|
||||
#include <Hedgehog/Database/System/hhDatabaseData.h>
|
||||
|
||||
namespace Hedgehog::Mirage
|
||||
{
|
||||
class CShaderListData;
|
||||
}
|
||||
|
||||
namespace Hedgehog::Sparkle
|
||||
{
|
||||
class CParticleMaterial : public Hedgehog::Database::CDatabaseData
|
||||
{
|
||||
public:
|
||||
enum EBlendMode
|
||||
{
|
||||
eBlendMode_Zero,
|
||||
eBlendMode_Typical,
|
||||
eBlendMode_Add,
|
||||
eBlendMode_Subtract
|
||||
};
|
||||
|
||||
hh::vector<boost::anonymous_shared_ptr> m_spFieldC;
|
||||
boost::shared_ptr<Hedgehog::Mirage::CShaderListData> m_spDefaultShaderListData; // BillboardParticle_d[v]
|
||||
boost::shared_ptr<Hedgehog::Mirage::CShaderListData> m_spShaderListData;
|
||||
bool m_Field2C;
|
||||
be<uint32_t> m_BlendMode;
|
||||
be<uint32_t> m_AddressMode;
|
||||
Hedgehog::Base::CSharedString m_MaterialName;
|
||||
Hedgehog::Base::CSharedString m_TextureName;
|
||||
Hedgehog::Base::CSharedString m_DeflectionTextureName;
|
||||
Hedgehog::Base::CSharedString m_ShaderName;
|
||||
be<float> m_Field48;
|
||||
be<float> m_Field4C;
|
||||
};
|
||||
|
||||
SWA_ASSERT_SIZEOF(CParticleMaterial, 0x50);
|
||||
}
|
||||
|
|
@ -15,7 +15,10 @@
|
|||
#include "CSD/Manager/csdmSceneObserver.h"
|
||||
#include "CSD/Manager/csdmSubjectBase.h"
|
||||
#include "CSD/Platform/csdTexList.h"
|
||||
#include "Hedgehog/Base/Container/hhMap.h"
|
||||
#include "Hedgehog/Base/Container/hhVector.h"
|
||||
#include "Hedgehog/Base/System/hhAllocator.h"
|
||||
#include "Hedgehog/Base/System/hhSymbol.h"
|
||||
#include "Hedgehog/Base/Thread/hhHolder.h"
|
||||
#include "Hedgehog/Base/Thread/hhHolderBase.h"
|
||||
#include "Hedgehog/Base/Thread/hhSynchronizedObject.h"
|
||||
|
|
@ -25,7 +28,21 @@
|
|||
#include "Hedgehog/Base/hhObject.h"
|
||||
#include "Hedgehog/Database/System/hhDatabaseData.h"
|
||||
#include "Hedgehog/Math/Vector2.h"
|
||||
#include "Hedgehog/MirageCore/Misc/hhVertexDeclarationPtr.h"
|
||||
#include "Hedgehog/MirageCore/RenderData/hhMaterialData.h"
|
||||
#include "Hedgehog/MirageCore/RenderData/hhMeshData.h"
|
||||
#include "Hedgehog/MirageCore/RenderData/hhModelData.h"
|
||||
#include "Hedgehog/MirageCore/RenderData/hhNodeGroupModelData.h"
|
||||
#include "Hedgehog/MirageCore/RenderData/hhPixelShaderCodeData.h"
|
||||
#include "Hedgehog/MirageCore/RenderData/hhPixelShaderData.h"
|
||||
#include "Hedgehog/MirageCore/RenderData/hhShaderListData.h"
|
||||
#include "Hedgehog/MirageCore/RenderData/hhTerrainModelData.h"
|
||||
#include "Hedgehog/MirageCore/RenderData/hhTexsetData.h"
|
||||
#include "Hedgehog/MirageCore/RenderData/hhTextureData.h"
|
||||
#include "Hedgehog/MirageCore/RenderData/hhVertexShaderCodeData.h"
|
||||
#include "Hedgehog/MirageCore/RenderData/hhVertexShaderData.h"
|
||||
#include "Hedgehog/MirageCore/Renderable/hhRenderable.h"
|
||||
#include "Hedgehog/Sparkle/hhParticleMaterial.h"
|
||||
#include "Hedgehog/Universe/Engine/hhMessageActor.h"
|
||||
#include "Hedgehog/Universe/Engine/hhMessageProcess.h"
|
||||
#include "Hedgehog/Universe/Engine/hhUpdateInfo.h"
|
||||
|
|
|
|||
|
|
@ -69,7 +69,12 @@ namespace boost
|
|||
|
||||
uint32_t use_count() const
|
||||
{
|
||||
return use_count_;
|
||||
return std::byteswap(static_cast<uint32_t const volatile &>(use_count_.value));
|
||||
}
|
||||
|
||||
bool unique() const
|
||||
{
|
||||
return use_count() == 1;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -150,6 +155,16 @@ namespace boost
|
|||
return *this;
|
||||
}
|
||||
|
||||
shared_ptr& operator=(std::nullptr_t)
|
||||
{
|
||||
release();
|
||||
|
||||
px = NULL;
|
||||
pn = NULL;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
T* get() const { return px; }
|
||||
|
||||
detail::sp_dereference<T> operator*() const { assert(px); return *px; }
|
||||
|
|
@ -158,6 +173,7 @@ namespace boost
|
|||
explicit operator bool() const { return px != nullptr; }
|
||||
|
||||
size_t use_count() const { return pn ? pn->use_count() : 0; }
|
||||
bool unique() const { return !pn || pn->unique(); }
|
||||
};
|
||||
|
||||
using anonymous_shared_ptr = shared_ptr<void>;
|
||||
|
|
|
|||
65
UnleashedRecomp/gpu/cache/pipeline_state_cache.h
vendored
Normal file
65
UnleashedRecomp/gpu/cache/pipeline_state_cache.h
vendored
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
{ reinterpret_cast<GuestShader*>(0x135289E4F64C6EEA),reinterpret_cast<GuestShader*>(0x6B812461EA74928D),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x8,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x135289E4F64C6EEA),reinterpret_cast<GuestShader*>(0x7C6A695E4296FA3B),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x135289E4F64C6EEA),reinterpret_cast<GuestShader*>(0xC20BFEE4B086F5EF),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x8,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x1D29E1386144A506),reinterpret_cast<GuestShader*>(0x22CDDA5C6346A97),reinterpret_cast<GuestVertexDeclaration*>(0x5A2395E29F93DA3C),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_FAN,{ 32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 },
|
||||
{ reinterpret_cast<GuestShader*>(0x36DB3B40FA419EF6),reinterpret_cast<GuestShader*>(0x3BF885B6A8263F78),reinterpret_cast<GuestVertexDeclaration*>(0xFFFDDC62D86892F1),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_LIST,{ 32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 },
|
||||
{ reinterpret_cast<GuestShader*>(0x36DB3B40FA419EF6),reinterpret_cast<GuestShader*>(0x3BF885B6A8263F78),reinterpret_cast<GuestVertexDeclaration*>(0xFFFDDC62D86892F1),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 },
|
||||
{ reinterpret_cast<GuestShader*>(0x681C97662BFE9150),reinterpret_cast<GuestShader*>(0xDC635C4E7013864E),reinterpret_cast<GuestVertexDeclaration*>(0x6196BF64CB935CA5),false,true,false,RenderBlend::ONE,RenderBlend::ONE,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 },
|
||||
{ reinterpret_cast<GuestShader*>(0x681E682667303C76),reinterpret_cast<GuestShader*>(0x38771885AC644B5),reinterpret_cast<GuestVertexDeclaration*>(0xC64D046063DE2F63),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::ONE,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 },
|
||||
{ reinterpret_cast<GuestShader*>(0x681E682667303C76),reinterpret_cast<GuestShader*>(0x604349CBF72CCF8C),reinterpret_cast<GuestVertexDeclaration*>(0xC64D046063DE2F63),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::ONE,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 },
|
||||
{ reinterpret_cast<GuestShader*>(0x6DE86503F8AA38E2),reinterpret_cast<GuestShader*>(0x132D2F2079D74CB3),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x6DE86503F8AA38E2),reinterpret_cast<GuestShader*>(0x198E2B57B47DAF53),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16_FLOAT,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x6DE86503F8AA38E2),reinterpret_cast<GuestShader*>(0x3016DA5F348C87A7),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16_FLOAT,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x6DE86503F8AA38E2),reinterpret_cast<GuestShader*>(0x3016DA5F348C87A7),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x6DE86503F8AA38E2),reinterpret_cast<GuestShader*>(0x3016DA5F348C87A7),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x6DE86503F8AA38E2),reinterpret_cast<GuestShader*>(0x4294510C775F4EE8),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x6DE86503F8AA38E2),reinterpret_cast<GuestShader*>(0x48BE63A8F5F1C78A),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16_FLOAT,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x6DE86503F8AA38E2),reinterpret_cast<GuestShader*>(0x50700665A5F55DFE),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x6DE86503F8AA38E2),reinterpret_cast<GuestShader*>(0x605C1E349CC4CAAB),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x6DE86503F8AA38E2),reinterpret_cast<GuestShader*>(0x65325B9C7DA3DB04),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x6DE86503F8AA38E2),reinterpret_cast<GuestShader*>(0x67064E6EA39B439E),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x6DE86503F8AA38E2),reinterpret_cast<GuestShader*>(0x7D9F06B0E048B75D),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x6DE86503F8AA38E2),reinterpret_cast<GuestShader*>(0x891B8684FB17752B),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x6DE86503F8AA38E2),reinterpret_cast<GuestShader*>(0x9FA5AACB5B14A226),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x6DE86503F8AA38E2),reinterpret_cast<GuestShader*>(0xC47F2F91BA2A5D86),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x6DE86503F8AA38E2),reinterpret_cast<GuestShader*>(0xFB79F59782376846),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x720D6E5EDA78433B),reinterpret_cast<GuestShader*>(0x96EACBACDE1AAFAA),reinterpret_cast<GuestVertexDeclaration*>(0xA81F28FA43A9B511),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::ONE,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 },
|
||||
{ reinterpret_cast<GuestShader*>(0x7C34DB46DEEFB0C2),reinterpret_cast<GuestShader*>(0xDBD8B29544AC9277),reinterpret_cast<GuestVertexDeclaration*>(0xB22B7B7B968141C6),false,false,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x7CC3A0B01523741B),reinterpret_cast<GuestShader*>(0x315BB80DAE685834),reinterpret_cast<GuestVertexDeclaration*>(0xB22B7B7B968141C6),false,false,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x86FE3502D5EC24AA),reinterpret_cast<GuestShader*>(0x68FCC0B90EBC457B),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x86FE3502D5EC24AA),reinterpret_cast<GuestShader*>(0x94A71CC9B94E3101),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16_FLOAT,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x88F67387B88F932F),reinterpret_cast<GuestShader*>(0x49101E452DF2FE98),reinterpret_cast<GuestVertexDeclaration*>(0x84BACD816D86543C),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 },
|
||||
{ reinterpret_cast<GuestShader*>(0x8A459F1CE0E957D3),reinterpret_cast<GuestShader*>(0x5D7ACAE543747185),reinterpret_cast<GuestVertexDeclaration*>(0x84BACD816D86543C),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::ONE,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::D32_FLOAT,1,false,0x10 },
|
||||
{ reinterpret_cast<GuestShader*>(0x8E4BB23465BD909E),reinterpret_cast<GuestShader*>(0x0),reinterpret_cast<GuestVertexDeclaration*>(0xFFFDDC62D86892F1),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS_EQUAL,false,RenderBlendOperation::ADD,1,33554,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_LIST,{ 32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x8E4BB23465BD909E),reinterpret_cast<GuestShader*>(0x0),reinterpret_cast<GuestVertexDeclaration*>(0xFFFDDC62D86892F1),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS_EQUAL,false,RenderBlendOperation::ADD,1,33554,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x965929BAA69F0AE),reinterpret_cast<GuestShader*>(0x66578F29004F8FD0),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x965929BAA69F0AE),reinterpret_cast<GuestShader*>(0x6B9732B4CD7E7740),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x965929BAA69F0AE),reinterpret_cast<GuestShader*>(0x6C50210CBDA8A23A),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ONE,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x965929BAA69F0AE),reinterpret_cast<GuestShader*>(0x6C50210CBDA8A23A),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x965929BAA69F0AE),reinterpret_cast<GuestShader*>(0x6C50210CBDA8A23A),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16_FLOAT,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x965929BAA69F0AE),reinterpret_cast<GuestShader*>(0x6C50210CBDA8A23A),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x965929BAA69F0AE),reinterpret_cast<GuestShader*>(0x6C50210CBDA8A23A),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x965929BAA69F0AE),reinterpret_cast<GuestShader*>(0x6C50210CBDA8A23A),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x965929BAA69F0AE),reinterpret_cast<GuestShader*>(0x92940FDD115733E1),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x965929BAA69F0AE),reinterpret_cast<GuestShader*>(0xA305C47ED9FB58CF),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::ALWAYS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x965929BAA69F0AE),reinterpret_cast<GuestShader*>(0xD44C189D5067922E),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0x965929BAA69F0AE),reinterpret_cast<GuestShader*>(0xD736237D80908063),reinterpret_cast<GuestVertexDeclaration*>(0xD452411D3FB80A0D),false,false,false,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::LESS,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R8G8B8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0xA3CD49F172D99214),reinterpret_cast<GuestShader*>(0xD5EA32DB758EF0B8),reinterpret_cast<GuestVertexDeclaration*>(0x7F12180DC3A24B53),true,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 32,24,4,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x14 },
|
||||
{ reinterpret_cast<GuestShader*>(0xA3FD368C62079765),reinterpret_cast<GuestShader*>(0xE8E3FF65F2356201),reinterpret_cast<GuestVertexDeclaration*>(0xB22B7B7B968141C6),false,false,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0xA3FD368C62079765),reinterpret_cast<GuestShader*>(0xE8E3FF65F2356201),reinterpret_cast<GuestVertexDeclaration*>(0xB22B7B7B968141C6),false,false,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::LESS,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x0 },
|
||||
{ reinterpret_cast<GuestShader*>(0xA4CF0215A03D9571),reinterpret_cast<GuestShader*>(0xA3A659F1590CC180),reinterpret_cast<GuestVertexDeclaration*>(0x5A2395E29F93DA3C),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_FAN,{ 32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 },
|
||||
{ reinterpret_cast<GuestShader*>(0xB1086A4947A797DE),reinterpret_cast<GuestShader*>(0x996F5A774A646D92),reinterpret_cast<GuestVertexDeclaration*>(0x6FAE71C7134074A4),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x4 },
|
||||
{ reinterpret_cast<GuestShader*>(0xB1086A4947A797DE),reinterpret_cast<GuestShader*>(0x996F5A774A646D92),reinterpret_cast<GuestVertexDeclaration*>(0x6FAE71C7134074A4),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x4 },
|
||||
{ reinterpret_cast<GuestShader*>(0xB1086A4947A797DE),reinterpret_cast<GuestShader*>(0x996F5A774A646D92),reinterpret_cast<GuestVertexDeclaration*>(0x6FAE71C7134074A4),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::ONE,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x4 },
|
||||
{ reinterpret_cast<GuestShader*>(0xB1EA909C660122A7),reinterpret_cast<GuestShader*>(0xC96708D6F26CC6D9),reinterpret_cast<GuestVertexDeclaration*>(0x84BACD816D86543C),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 },
|
||||
{ reinterpret_cast<GuestShader*>(0xB4CAFC034A37C8A8),reinterpret_cast<GuestShader*>(0x31173204A896098A),reinterpret_cast<GuestVertexDeclaration*>(0x5A22D93C543DF925),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x4 },
|
||||
{ reinterpret_cast<GuestShader*>(0xB4CAFC034A37C8A8),reinterpret_cast<GuestShader*>(0x31173204A896098A),reinterpret_cast<GuestVertexDeclaration*>(0x5A22D93C543DF925),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x4 },
|
||||
{ reinterpret_cast<GuestShader*>(0xB4CAFC034A37C8A8),reinterpret_cast<GuestShader*>(0x31173204A896098A),reinterpret_cast<GuestVertexDeclaration*>(0x5A22D93C543DF925),false,true,false,RenderBlend::SRC_ALPHA,RenderBlend::ONE,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::B8G8R8A8_UNORM,RenderFormat::UNKNOWN,1,false,0x4 },
|
||||
{ reinterpret_cast<GuestShader*>(0xBBD01C46D72EDC37),reinterpret_cast<GuestShader*>(0x4E1399E5E0E40511),reinterpret_cast<GuestVertexDeclaration*>(0xE6B3B3D286909AB9),true,true,false,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,true,RenderBlendOperation::ADD,0,0,RenderBlend::SRC_ALPHA,RenderBlend::INV_SRC_ALPHA,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 32,24,4,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x10 },
|
||||
{ reinterpret_cast<GuestShader*>(0xBDA992649419F2DD),reinterpret_cast<GuestShader*>(0x5A4CFA9D29441E0),reinterpret_cast<GuestVertexDeclaration*>(0x25B8F9D92644DAE0),true,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,24,4,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x11 },
|
||||
{ reinterpret_cast<GuestShader*>(0xBDA992649419F2DD),reinterpret_cast<GuestShader*>(0x5A4CFA9D29441E0),reinterpret_cast<GuestVertexDeclaration*>(0x25B8F9D92644DAE0),true,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,24,4,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x15 },
|
||||
{ reinterpret_cast<GuestShader*>(0xCF28F33974EC44F6),reinterpret_cast<GuestShader*>(0xD5EA32DB758EF0B8),reinterpret_cast<GuestVertexDeclaration*>(0x7F12180DC3A24B53),true,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 32,24,4,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x14 },
|
||||
{ reinterpret_cast<GuestShader*>(0xD6EA5D49CB1F965C),reinterpret_cast<GuestShader*>(0x2FE1A3913EF3EE8A),reinterpret_cast<GuestVertexDeclaration*>(0x25B8F9D92644DAE0),true,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,24,4,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x15 },
|
||||
{ reinterpret_cast<GuestShader*>(0xD6EA5D49CB1F965C),reinterpret_cast<GuestShader*>(0x53EF4B071D1B59D3),reinterpret_cast<GuestVertexDeclaration*>(0x25B8F9D92644DAE0),true,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 44,24,4,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x15 },
|
||||
{ reinterpret_cast<GuestShader*>(0xD738D79626374EBE),reinterpret_cast<GuestShader*>(0xAAE40F54746EB116),reinterpret_cast<GuestVertexDeclaration*>(0xB7BBCC93738C9DE4),false,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::BACK,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0x0,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::UNKNOWN,RenderFormat::D32_FLOAT,1,false,0x11 },
|
||||
{ reinterpret_cast<GuestShader*>(0xFF5A2C4C81AA6FDF),reinterpret_cast<GuestShader*>(0xE105CB09EA634E60),reinterpret_cast<GuestVertexDeclaration*>(0x7F12180DC3A24B53),true,true,true,RenderBlend::ONE,RenderBlend::ZERO,RenderCullMode::NONE,RenderComparisonFunction::GREATER_EQUAL,false,RenderBlendOperation::ADD,0,0,RenderBlend::ONE,RenderBlend::ZERO,RenderBlendOperation::ADD,0xF,RenderPrimitiveTopology::TRIANGLE_STRIP,{ 32,24,4,0,0,0,0,0,0,0,0,0,0,0,0,0 },RenderFormat::R16G16B16A16_FLOAT,RenderFormat::D32_FLOAT,1,false,0x14 },
|
||||
14
UnleashedRecomp/gpu/cache/vertex_declaration_cache.h
vendored
Normal file
14
UnleashedRecomp/gpu/cache/vertex_declaration_cache.h
vendored
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
g_vertexElements_25B8F9D92644DAE0,
|
||||
g_vertexElements_5A22D93C543DF925,
|
||||
g_vertexElements_5A2395E29F93DA3C,
|
||||
g_vertexElements_6196BF64CB935CA5,
|
||||
g_vertexElements_6FAE71C7134074A4,
|
||||
g_vertexElements_7F12180DC3A24B53,
|
||||
g_vertexElements_84BACD816D86543C,
|
||||
g_vertexElements_A81F28FA43A9B511,
|
||||
g_vertexElements_B22B7B7B968141C6,
|
||||
g_vertexElements_B7BBCC93738C9DE4,
|
||||
g_vertexElements_C64D046063DE2F63,
|
||||
g_vertexElements_D452411D3FB80A0D,
|
||||
g_vertexElements_E6B3B3D286909AB9,
|
||||
g_vertexElements_FFFDDC62D86892F1,
|
||||
14
UnleashedRecomp/gpu/cache/vertex_element_cache.h
vendored
Normal file
14
UnleashedRecomp/gpu/cache/vertex_element_cache.h
vendored
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
static uint8_t g_vertexElements_25B8F9D92644DAE0[] = {0x0,0x0,0x0,0x0,0x0,0x2A,0x23,0xB9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x0,0x2A,0x21,0x90,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x2A,0x21,0x90,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x2A,0x21,0x90,0x0,0x7,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x2C,0x23,0x5F,0x0,0x5,0x0,0x0,0x0,0x0,0x0,0x1C,0x0,0x2C,0x23,0x5F,0x0,0x5,0x1,0x0,0x0,0x0,0x0,0x20,0x0,0x1A,0x20,0x86,0x0,0xA,0x0,0x0,0x0,0x0,0x0,0x24,0x0,0x1A,0x22,0x86,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x28,0x0,0x1A,0x20,0x86,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2A,0x23,0xB9,0x0,0x5,0x4,0x0,0x0,0x1,0x0,0xC,0x0,0x2C,0x21,0x59,0x0,0x5,0x5,0x0,0x0,0x1,0x0,0x10,0x0,0x2C,0x21,0x59,0x0,0x5,0x6,0x0,0x0,0x1,0x0,0x14,0x0,0x18,0x28,0x86,0x0,0xA,0x1,0x0,0x0,0x2,0x0,0x0,0x0,0x2C,0x82,0xA1,0x0,0x0,0x1,0x0,0x0,0xFF,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,};
|
||||
static uint8_t g_vertexElements_5A22D93C543DF925[] = {0x0,0x0,0x0,0x0,0x0,0x2C,0x23,0xA5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x18,0x28,0x86,0x0,0xA,0x0,0x0,0x0,0x0,0x0,0xC,0x0,0x2C,0x23,0xA5,0x0,0x5,0x0,0x0,0x0,0xFF,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,};
|
||||
static uint8_t g_vertexElements_5A2395E29F93DA3C[] = {0x0,0x0,0x0,0x0,0x0,0x2A,0x23,0xB9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x0,0x2A,0x23,0xB9,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x2C,0x23,0xA5,0x0,0x5,0x0,0x0,0x0,0xFF,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,};
|
||||
static uint8_t g_vertexElements_6196BF64CB935CA5[] = {0x0,0x0,0x0,0x0,0x0,0x2A,0x23,0xB9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x0,0x2C,0x23,0xA5,0x0,0x5,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x18,0x28,0x86,0x0,0xA,0x0,0x0,0x0,0xFF,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,};
|
||||
static uint8_t g_vertexElements_6FAE71C7134074A4[] = {0x0,0x0,0x0,0x0,0x0,0x2C,0x23,0xA5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x18,0x28,0x86,0x0,0xA,0x0,0x0,0x0,0xFF,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,};
|
||||
static uint8_t g_vertexElements_7F12180DC3A24B53[] = {0x0,0x0,0x0,0x0,0x0,0x2A,0x23,0xB9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x0,0x2A,0x23,0xB9,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x2C,0x23,0xA5,0x0,0x5,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2A,0x23,0xB9,0x0,0x5,0x1,0x0,0x0,0x1,0x0,0xC,0x0,0x1A,0x22,0x86,0x0,0x5,0x2,0x0,0x0,0x1,0x0,0x10,0x0,0x2C,0x21,0x59,0x0,0x5,0x3,0x0,0x0,0x1,0x0,0x14,0x0,0x18,0x28,0x86,0x0,0xA,0x1,0x0,0x0,0x2,0x0,0x0,0x0,0x2C,0x82,0xA1,0x0,0x0,0x1,0x0,0x0,0xFF,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,};
|
||||
static uint8_t g_vertexElements_84BACD816D86543C[] = {0x0,0x0,0x0,0x0,0x0,0x2A,0x23,0xB9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x0,0x2A,0x23,0xB9,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x2A,0x23,0xB9,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0x24,0x0,0x2A,0x23,0xB9,0x0,0x7,0x0,0x0,0x0,0x0,0x0,0x30,0x0,0x2C,0x23,0xA5,0x0,0x5,0x0,0x0,0x0,0x0,0x0,0x38,0x0,0x2C,0x23,0xA5,0x0,0x5,0x1,0x0,0x0,0x0,0x0,0x40,0x0,0x2C,0x23,0xA5,0x0,0x5,0x2,0x0,0x0,0x0,0x0,0x48,0x0,0x2C,0x23,0xA5,0x0,0x5,0x3,0x0,0x0,0x0,0x0,0x50,0x0,0x1A,0x23,0xA6,0x0,0xA,0x0,0x0,0x0,0x0,0x0,0x60,0x0,0x1A,0x23,0x86,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x64,0x0,0x1A,0x20,0x86,0x0,0x1,0x0,0x0,0x0,0xFF,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,};
|
||||
static uint8_t g_vertexElements_A81F28FA43A9B511[] = {0x0,0x0,0x0,0x0,0x0,0x2A,0x23,0xB9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x0,0x2A,0x23,0xB9,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x2C,0x23,0xA5,0x0,0x5,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x18,0x28,0x86,0x0,0xA,0x0,0x0,0x0,0xFF,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,};
|
||||
static uint8_t g_vertexElements_B22B7B7B968141C6[] = {0x0,0x0,0x0,0x0,0x0,0x1A,0x23,0xA6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x18,0x28,0x86,0x0,0xA,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x2C,0x23,0xA5,0x0,0x5,0x0,0x0,0x0,0xFF,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,};
|
||||
static uint8_t g_vertexElements_B7BBCC93738C9DE4[] = {0x0,0x0,0x0,0x0,0x0,0x2A,0x23,0xB9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x0,0x1A,0x22,0x86,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x1A,0x20,0x86,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x2A,0x21,0x90,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x2A,0x21,0x90,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0x1C,0x0,0x2A,0x21,0x90,0x0,0x7,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x2C,0x23,0x5F,0x0,0x5,0x0,0x0,0x0,0x0,0x0,0x24,0x0,0x1A,0x20,0x86,0x0,0xA,0x0,0x0,0x0,0xFF,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,};
|
||||
static uint8_t g_vertexElements_C64D046063DE2F63[] = {0x0,0x0,0x0,0x0,0x0,0x2A,0x23,0xB9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x0,0x1A,0x22,0x86,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x1A,0x20,0x86,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x2A,0x21,0x90,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x2A,0x21,0x90,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0x1C,0x0,0x2A,0x21,0x90,0x0,0x7,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x2C,0x23,0x5F,0x0,0x5,0x0,0x0,0x0,0x0,0x0,0x24,0x0,0x2C,0x23,0x5F,0x0,0x5,0x1,0x0,0x0,0x0,0x0,0x28,0x0,0x1A,0x20,0x86,0x0,0xA,0x0,0x0,0x0,0xFF,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,};
|
||||
static uint8_t g_vertexElements_D452411D3FB80A0D[] = {0x0,0x0,0x0,0x0,0x0,0x2A,0x23,0xB9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x0,0x2C,0x23,0xA5,0x0,0x5,0x0,0x0,0x0,0xFF,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,};
|
||||
static uint8_t g_vertexElements_E6B3B3D286909AB9[] = {0x0,0x0,0x0,0x0,0x0,0x2A,0x23,0xB9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x0,0x2A,0x23,0xB9,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x2C,0x23,0xA5,0x0,0x5,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2A,0x23,0xB9,0x0,0x5,0x1,0x0,0x0,0x1,0x0,0xC,0x0,0x1A,0x22,0x86,0x0,0x5,0x2,0x0,0x0,0x1,0x0,0x10,0x0,0x2C,0x83,0xA4,0x0,0x5,0x3,0x0,0x0,0x1,0x0,0x14,0x0,0x18,0x28,0x86,0x0,0xA,0x1,0x0,0x0,0x2,0x0,0x0,0x0,0x2C,0x82,0xA1,0x0,0x0,0x1,0x0,0x0,0xFF,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,};
|
||||
static uint8_t g_vertexElements_FFFDDC62D86892F1[] = {0x0,0x0,0x0,0x0,0x0,0x2A,0x23,0xB9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x0,0x2C,0x23,0xA5,0x0,0x5,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x2A,0x23,0xB9,0x0,0x3,0x0,0x0,0x0,0xFF,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0xC9,};
|
||||
|
|
@ -2672,6 +2672,10 @@ namespace RT64 {
|
|||
}
|
||||
}
|
||||
|
||||
void D3D12ComputePipeline::setName(const std::string& name) const {
|
||||
setObjectName(d3d, name);
|
||||
}
|
||||
|
||||
RenderPipelineProgram D3D12ComputePipeline::getProgram(const std::string &name) const {
|
||||
assert(false && "Compute pipelines can't retrieve shader programs.");
|
||||
return RenderPipelineProgram();
|
||||
|
|
@ -2791,6 +2795,10 @@ namespace RT64 {
|
|||
}
|
||||
}
|
||||
|
||||
void D3D12GraphicsPipeline::setName(const std::string& name) const {
|
||||
setObjectName(d3d, name);
|
||||
}
|
||||
|
||||
RenderPipelineProgram D3D12GraphicsPipeline::getProgram(const std::string &name) const {
|
||||
assert(false && "Graphics pipelines can't retrieve shader programs.");
|
||||
return RenderPipelineProgram();
|
||||
|
|
@ -3011,6 +3019,10 @@ namespace RT64 {
|
|||
}
|
||||
}
|
||||
|
||||
void D3D12RaytracingPipeline::setName(const std::string& name) const {
|
||||
setObjectName(stateObject, name);
|
||||
}
|
||||
|
||||
RenderPipelineProgram D3D12RaytracingPipeline::getProgram(const std::string &name) const {
|
||||
auto it = nameProgramMap.find(name);
|
||||
assert((it != nameProgramMap.end()) && "Program must exist in the PSO.");
|
||||
|
|
|
|||
|
|
@ -355,6 +355,7 @@ namespace RT64 {
|
|||
|
||||
D3D12ComputePipeline(D3D12Device *device, const RenderComputePipelineDesc &desc);
|
||||
~D3D12ComputePipeline() override;
|
||||
virtual void setName(const std::string& name) const override;
|
||||
virtual RenderPipelineProgram getProgram(const std::string &name) const override;
|
||||
};
|
||||
|
||||
|
|
@ -365,6 +366,7 @@ namespace RT64 {
|
|||
|
||||
D3D12GraphicsPipeline(D3D12Device *device, const RenderGraphicsPipelineDesc &desc);
|
||||
~D3D12GraphicsPipeline() override;
|
||||
virtual void setName(const std::string& name) const override;
|
||||
virtual RenderPipelineProgram getProgram(const std::string &name) const override;
|
||||
};
|
||||
|
||||
|
|
@ -377,6 +379,7 @@ namespace RT64 {
|
|||
|
||||
D3D12RaytracingPipeline(D3D12Device *device, const RenderRaytracingPipelineDesc &desc, const RenderPipeline *previousPipeline);
|
||||
~D3D12RaytracingPipeline() override;
|
||||
virtual void setName(const std::string& name) const override;
|
||||
virtual RenderPipelineProgram getProgram(const std::string &name) const override;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@ namespace RT64 {
|
|||
|
||||
struct RenderPipeline {
|
||||
virtual ~RenderPipeline() { }
|
||||
virtual void setName(const std::string& name) const = 0;
|
||||
virtual RenderPipelineProgram getProgram(const std::string &name) const = 0;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1316,6 +1316,10 @@ namespace RT64 {
|
|||
}
|
||||
}
|
||||
|
||||
void VulkanComputePipeline::setName(const std::string& name) const {
|
||||
setObjectName(device->vk, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, uint64_t(vk), name);
|
||||
}
|
||||
|
||||
RenderPipelineProgram VulkanComputePipeline::getProgram(const std::string &name) const {
|
||||
assert(false && "Compute pipelines can't retrieve shader programs.");
|
||||
return RenderPipelineProgram();
|
||||
|
|
@ -1552,6 +1556,10 @@ namespace RT64 {
|
|||
}
|
||||
}
|
||||
|
||||
void VulkanGraphicsPipeline::setName(const std::string& name) const {
|
||||
setObjectName(device->vk, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, uint64_t(vk), name);
|
||||
}
|
||||
|
||||
RenderPipelineProgram VulkanGraphicsPipeline::getProgram(const std::string &name) const {
|
||||
assert(false && "Graphics pipelines can't retrieve shader programs.");
|
||||
return RenderPipelineProgram();
|
||||
|
|
@ -1752,6 +1760,10 @@ namespace RT64 {
|
|||
}
|
||||
}
|
||||
|
||||
void VulkanRaytracingPipeline::setName(const std::string& name) const {
|
||||
setObjectName(device->vk, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, uint64_t(vk), name);
|
||||
}
|
||||
|
||||
RenderPipelineProgram VulkanRaytracingPipeline::getProgram(const std::string &name) const {
|
||||
auto it = nameProgramMap.find(name);
|
||||
assert((it != nameProgramMap.end()) && "Program must exist in the PSO.");
|
||||
|
|
|
|||
|
|
@ -158,6 +158,7 @@ namespace RT64 {
|
|||
|
||||
VulkanComputePipeline(VulkanDevice *device, const RenderComputePipelineDesc &desc);
|
||||
~VulkanComputePipeline() override;
|
||||
void setName(const std::string& name) const override;
|
||||
RenderPipelineProgram getProgram(const std::string &name) const override;
|
||||
};
|
||||
|
||||
|
|
@ -167,6 +168,7 @@ namespace RT64 {
|
|||
|
||||
VulkanGraphicsPipeline(VulkanDevice *device, const RenderGraphicsPipelineDesc &desc);
|
||||
~VulkanGraphicsPipeline() override;
|
||||
void setName(const std::string& name) const override;
|
||||
RenderPipelineProgram getProgram(const std::string &name) const override;
|
||||
static VkRenderPass createRenderPass(VulkanDevice *device, const VkFormat *renderTargetFormat, uint32_t renderTargetCount, VkFormat depthTargetFormat, VkSampleCountFlagBits sampleCount);
|
||||
};
|
||||
|
|
@ -179,6 +181,7 @@ namespace RT64 {
|
|||
|
||||
VulkanRaytracingPipeline(VulkanDevice *device, const RenderRaytracingPipelineDesc &desc, const RenderPipeline *previousPipeline);
|
||||
~VulkanRaytracingPipeline() override;
|
||||
void setName(const std::string& name) const override;
|
||||
RenderPipelineProgram getProgram(const std::string &name) const override;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#include "../../../thirdparty/ShaderRecomp/ShaderRecomp/shader_common.hlsli"
|
||||
#include "../../../thirdparty/ShaderRecomp/ShaderRecomp/shader_common.h"
|
||||
|
||||
#ifdef __spirv__
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
#include "../../../thirdparty/ShaderRecomp/ShaderRecomp/shader_common.hlsli"
|
||||
#include "../../../thirdparty/ShaderRecomp/ShaderRecomp/shader_common.h"
|
||||
|
||||
#ifdef __spirv__
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ float main(in float4 position : SV_Position) : SV_Depth
|
|||
float result = g_Texture2DMSDescriptorHeap[g_PushConstants.ResourceDescriptorIndex].Load(int2(position.xy), 0);
|
||||
|
||||
[unroll] for (int i = 1; i < SAMPLE_COUNT; i++)
|
||||
result = max(result, g_Texture2DMSDescriptorHeap[g_PushConstants.ResourceDescriptorIndex].Load(int2(position.xy), i));
|
||||
result = min(result, g_Texture2DMSDescriptorHeap[g_PushConstants.ResourceDescriptorIndex].Load(int2(position.xy), i));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,5 +1,8 @@
|
|||
#pragma once
|
||||
|
||||
//#define ASYNC_PSO_DEBUG
|
||||
#define PSO_CACHING
|
||||
|
||||
#include "rhi/rt64_render_interface.h"
|
||||
|
||||
#define D3DCLEAR_TARGET 0x1
|
||||
|
|
@ -78,6 +81,19 @@ struct GuestResource
|
|||
incrementedValue = std::byteswap(std::byteswap(originalValue) + 1);
|
||||
} while (InterlockedCompareExchange(reinterpret_cast<LONG*>(&refCount), incrementedValue, originalValue) != originalValue);
|
||||
}
|
||||
|
||||
void Release()
|
||||
{
|
||||
uint32_t originalValue, decrementedValue;
|
||||
do
|
||||
{
|
||||
originalValue = refCount.value;
|
||||
decrementedValue = std::byteswap(std::byteswap(originalValue) - 1);
|
||||
} while (InterlockedCompareExchange(reinterpret_cast<LONG*>(&refCount), decrementedValue, originalValue) != originalValue);
|
||||
|
||||
// Normally we are supposed to release here, so only use this
|
||||
// function when you know you won't be the one destructing it.
|
||||
}
|
||||
};
|
||||
|
||||
enum GuestFormat
|
||||
|
|
@ -226,27 +242,32 @@ struct GuestVertexElement
|
|||
uint8_t padding;
|
||||
};
|
||||
|
||||
enum InputLayoutFlags
|
||||
{
|
||||
INPUT_LAYOUT_FLAG_HAS_R11G11B10_NORMAL = 1 << 0,
|
||||
INPUT_LAYOUT_FLAG_HAS_BONE_WEIGHTS = 1 << 1
|
||||
};
|
||||
#define D3DDECL_END() { 255, 0, 0xFFFFFFFF, 0, 0, 0 }
|
||||
|
||||
struct GuestVertexDeclaration : GuestResource
|
||||
{
|
||||
XXH64_hash_t hash = 0;
|
||||
std::unique_ptr<RenderInputElement[]> inputElements;
|
||||
std::unique_ptr<GuestVertexElement[]> vertexElements;
|
||||
uint32_t inputElementCount = 0;
|
||||
uint32_t vertexElementCount = 0;
|
||||
uint32_t swappedTexcoords = 0;
|
||||
uint32_t inputLayoutFlags = 0;
|
||||
bool hasR11G11B10Normal = false;
|
||||
uint32_t indexVertexStream = 0;
|
||||
};
|
||||
|
||||
// VertexShader/PixelShader
|
||||
struct GuestShader : GuestResource
|
||||
{
|
||||
Mutex mutex;
|
||||
std::unique_ptr<RenderShader> shader;
|
||||
struct ShaderCacheEntry* shaderCacheEntry = nullptr;
|
||||
ankerl::unordered_dense::map<uint32_t, std::unique_ptr<RenderShader>> linkedShaders;
|
||||
std::vector<ComPtr<IDxcBlob>> shaderBlobs;
|
||||
ComPtr<IDxcBlobEncoding> libraryBlob;
|
||||
#ifdef ASYNC_PSO_DEBUG
|
||||
const char* name = "<unknown>";
|
||||
#endif
|
||||
};
|
||||
|
||||
struct GuestViewport
|
||||
|
|
|
|||
21
UnleashedRecomp/natvis.natvis
Normal file
21
UnleashedRecomp/natvis.natvis
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
|
||||
<Type Name="be<*>">
|
||||
<DisplayString>{get()}</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="Value">get()</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
<Type Name="xpointer<*>">
|
||||
<DisplayString>{get()}</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="Value">get()</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
<Type Name="boost::shared_ptr<*>">
|
||||
<DisplayString>{get()}</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="Value">get()</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
</AutoVisualizer>
|
||||
|
|
@ -3,6 +3,7 @@
|
|||
#define NOMINMAX
|
||||
|
||||
#include <windows.h>
|
||||
#include <dxcapi.h>
|
||||
#include <ShlObj_core.h>
|
||||
#include <algorithm>
|
||||
#include <mutex>
|
||||
|
|
@ -28,6 +29,11 @@
|
|||
#include <imgui_impl_sdl2.h>
|
||||
#include <o1heap.h>
|
||||
#include <cstddef>
|
||||
#include <wrl/client.h>
|
||||
#include <smolv.h>
|
||||
#include <print>
|
||||
|
||||
using Microsoft::WRL::ComPtr;
|
||||
|
||||
#include "framework.h"
|
||||
#include "mutex.h"
|
||||
|
|
|
|||
|
|
@ -10,6 +10,9 @@ int Window_OnSDLEvent(void*, SDL_Event* event)
|
|||
if (ImGui::GetIO().BackendPlatformUserData != nullptr)
|
||||
ImGui_ImplSDL2_ProcessEvent(event);
|
||||
|
||||
for (auto listener : Window::s_eventListeners)
|
||||
listener->OnSDLEvent(event);
|
||||
|
||||
switch (event->type)
|
||||
{
|
||||
case SDL_QUIT:
|
||||
|
|
@ -114,9 +117,6 @@ int Window_OnSDLEvent(void*, SDL_Event* event)
|
|||
}
|
||||
}
|
||||
|
||||
for (auto listener : Window::s_eventListeners)
|
||||
listener->OnSDLEvent(event);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ add_custom_command(
|
|||
)
|
||||
|
||||
set(SHADER_RECOMP_ROOT "${SWA_THIRDPARTY_ROOT}/ShaderRecomp/ShaderRecomp")
|
||||
set(SHADER_RECOMP_INCLUDE "${SHADER_RECOMP_ROOT}/shader_common.hlsli")
|
||||
set(SHADER_RECOMP_INCLUDE "${SHADER_RECOMP_ROOT}/shader_common.h")
|
||||
|
||||
target_compile_definitions(ShaderRecomp PRIVATE
|
||||
SHADER_RECOMP_INPUT=\"${CMAKE_CURRENT_SOURCE_DIR}/private\"
|
||||
|
|
|
|||
|
|
@ -422,3 +422,28 @@ registers = ["r7"]
|
|||
name = "LoadingScreenSpeedFixMidAsmHook"
|
||||
address = 0x824DAB60
|
||||
registers = ["r4"]
|
||||
|
||||
[[midasm_hook]]
|
||||
name = "MotionBlurPrevInvViewProjectionMidAsmHook"
|
||||
address = 0x82BA9E7C
|
||||
registers = ["r10"]
|
||||
|
||||
[[midasm_hook]]
|
||||
name = "GetDatabaseDataMidAsmHook"
|
||||
address = 0x82E38688 # Model
|
||||
registers = ["r1", "r31"]
|
||||
|
||||
[[midasm_hook]]
|
||||
name = "GetDatabaseDataMidAsmHook"
|
||||
address = 0x82E39650 # Terrain Model
|
||||
registers = ["r1", "r31"]
|
||||
|
||||
[[midasm_hook]]
|
||||
name = "GetDatabaseDataMidAsmHook"
|
||||
address = 0x827D614C # Particle Material Binary
|
||||
registers = ["r1", "r29"]
|
||||
|
||||
[[midasm_hook]]
|
||||
name = "GetDatabaseDataMidAsmHook"
|
||||
address = 0x827D6018 # Particle Material XML
|
||||
registers = ["r1", "r30"]
|
||||
|
|
|
|||
|
|
@ -7,7 +7,8 @@ struct ShaderCacheEntry
|
|||
const uint32_t dxilSize;
|
||||
const uint32_t spirvOffset;
|
||||
const uint32_t spirvSize;
|
||||
void* userData;
|
||||
const uint32_t specConstantsMask;
|
||||
struct GuestShader* guestShader;
|
||||
};
|
||||
|
||||
extern ShaderCacheEntry g_shaderCacheEntries[];
|
||||
|
|
|
|||
2
thirdparty/ShaderRecomp
vendored
2
thirdparty/ShaderRecomp
vendored
|
|
@ -1 +1 @@
|
|||
Subproject commit 30f598604767602e3afce56b947e99dba2b51211
|
||||
Subproject commit f936ed2212d8291439003eb0c0d8edc0ecafd24d
|
||||
|
|
@ -19,6 +19,7 @@
|
|||
{
|
||||
"name": "imgui",
|
||||
"features": [ "sdl2-binding" ]
|
||||
}
|
||||
},
|
||||
"magic-enum"
|
||||
]
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue