2022-12-06 21:37:34 +00:00
|
|
|
struct PTType
|
2022-10-23 00:28:28 +00:00
|
|
|
{
|
2022-12-06 21:37:34 +00:00
|
|
|
uint blockIndices[1 << 14];
|
|
|
|
uvec2 pointers[1 << 28];
|
|
|
|
};
|
2022-10-23 00:28:28 +00:00
|
|
|
|
2022-12-06 21:37:34 +00:00
|
|
|
uvec2 Helper_TranslateAddress(uvec2 address)
|
|
|
|
{
|
|
|
|
PTType* br = (PTType*)packPtr(s_page_table.xy);
|
2022-10-23 00:28:28 +00:00
|
|
|
|
2022-12-06 21:37:34 +00:00
|
|
|
uint l0 = (address.x >> 12) & 0x3fff;
|
|
|
|
uint l1 = ((address.x >> 26) & 0x3f) | ((address.y << 6) & 0x3fc0);
|
2022-10-23 00:28:28 +00:00
|
|
|
|
2022-12-06 21:37:34 +00:00
|
|
|
uvec2 hostAddress = br->pointers[br->blockIndices[l1] + l0];
|
2022-10-23 00:28:28 +00:00
|
|
|
|
2022-12-06 21:37:34 +00:00
|
|
|
hostAddress.x += (address.x & 0xfff);
|
2022-10-23 00:28:28 +00:00
|
|
|
|
2022-12-06 21:37:34 +00:00
|
|
|
return hostAddress;
|
2022-10-23 00:28:28 +00:00
|
|
|
}
|