mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-12-06 07:12:28 +01:00
vk: Fix fragment constants indexing
This commit is contained in:
parent
33e4b11509
commit
aa119e1413
|
|
@ -232,12 +232,29 @@ std::string FragmentProgramDecompiler::AddCond()
|
||||||
|
|
||||||
std::string FragmentProgramDecompiler::AddConst()
|
std::string FragmentProgramDecompiler::AddConst()
|
||||||
{
|
{
|
||||||
|
const u32 constant_id = m_size + (4 * sizeof(u32));
|
||||||
|
int index = -1, ctr = 0;
|
||||||
|
|
||||||
|
// Have we seen this constant before?
|
||||||
|
for (auto it = properties.constant_offsets.rbegin(); it != properties.constant_offsets.rend(); ++it, ++ctr)
|
||||||
|
{
|
||||||
|
if (*it == constant_id)
|
||||||
|
{
|
||||||
|
index = ctr;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index == -1)
|
||||||
|
{
|
||||||
|
index = static_cast<int>(properties.constant_offsets.size());
|
||||||
|
properties.constant_offsets.push_back(constant_id);
|
||||||
|
}
|
||||||
|
|
||||||
// Skip next instruction, its just a literal
|
// Skip next instruction, its just a literal
|
||||||
m_offset = 2 * 4 * sizeof(u32);
|
m_offset = 2 * 4 * sizeof(u32);
|
||||||
|
|
||||||
// Return the next offset index
|
// Return the next offset index
|
||||||
const u32 index = ::size32(properties.constant_offsets);
|
|
||||||
properties.constant_offsets.push_back(m_size + 4 * 4);
|
|
||||||
return "_fetch_constant(" + std::to_string(index) + ")";
|
return "_fetch_constant(" + std::to_string(index) + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2185,6 +2185,7 @@ void VKGSRender::upload_transform_constants(const rsx::io_buffer& buffer)
|
||||||
|
|
||||||
void VKGSRender::update_vertex_env(u32 id, const vk::vertex_upload_info& vertex_info)
|
void VKGSRender::update_vertex_env(u32 id, const vk::vertex_upload_info& vertex_info)
|
||||||
{
|
{
|
||||||
|
#pragma pack(push, 1)
|
||||||
struct rsx_vs_prog_push_constants_block_t
|
struct rsx_vs_prog_push_constants_block_t
|
||||||
{
|
{
|
||||||
u32 xform_constants_offset;
|
u32 xform_constants_offset;
|
||||||
|
|
@ -2205,6 +2206,7 @@ void VKGSRender::update_vertex_env(u32 id, const vk::vertex_upload_info& vertex_
|
||||||
u32 reserved;
|
u32 reserved;
|
||||||
s32 attrib_data[1];
|
s32 attrib_data[1];
|
||||||
};
|
};
|
||||||
|
#pragma pack(pop)
|
||||||
|
|
||||||
// Actual allocation must have been done previously
|
// Actual allocation must have been done previously
|
||||||
const u32 vs_constant_id_offset = static_cast<u32>(m_xform_constants_dynamic_offset) / 16u;
|
const u32 vs_constant_id_offset = static_cast<u32>(m_xform_constants_dynamic_offset) / 16u;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue