mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-05-17 03:47:03 +02:00
bullshit global memory reads
This commit is contained in:
parent
e78ab8eeef
commit
5a10e95188
1 changed files with 9 additions and 12 deletions
|
|
@ -81,7 +81,6 @@ uint result_vector[ARRAY_NUM_ELEMENTS * 2];
|
||||||
|
|
||||||
int result_index = 0;
|
int result_index = 0;
|
||||||
uint result_vector_max_index;
|
uint result_vector_max_index;
|
||||||
bool result_limit_reached = false;
|
|
||||||
|
|
||||||
// EncodingData helpers
|
// EncodingData helpers
|
||||||
uint Encoding(EncodingData val) {
|
uint Encoding(EncodingData val) {
|
||||||
|
|
@ -117,12 +116,10 @@ EncodingData CreateEncodingData(uint encoding, uint num_bits, uint bit_val, uint
|
||||||
|
|
||||||
|
|
||||||
void ResultEmplaceBack(EncodingData val) {
|
void ResultEmplaceBack(EncodingData val) {
|
||||||
if (result_index >= result_vector_max_index) {
|
// A = result_index, B = result_vector_max_index
|
||||||
// Alert callers to avoid decoding more than needed by this phase
|
// A >= B -> A - B >= 0
|
||||||
result_limit_reached = true;
|
// A < B -> A - B < 0
|
||||||
return;
|
result_vector[min(32U, result_index)] = val.data; // 0 if not set
|
||||||
}
|
|
||||||
result_vector[result_index] = val.data;
|
|
||||||
++result_index;
|
++result_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -383,7 +380,7 @@ void DecodeIntegerSequence(uint max_range, uint num_values) {
|
||||||
EncodingData val = EncodingData(encoding_values[max_range]);
|
EncodingData val = EncodingData(encoding_values[max_range]);
|
||||||
const uint encoding = Encoding(val);
|
const uint encoding = Encoding(val);
|
||||||
const uint num_bits = NumBits(val);
|
const uint num_bits = NumBits(val);
|
||||||
for (uint vals_decoded = 0; vals_decoded < num_values && !result_limit_reached; ) {
|
for (uint vals_decoded = 0; vals_decoded < num_values && result_index < result_vector_max_index; ) {
|
||||||
switch (encoding) {
|
switch (encoding) {
|
||||||
case QUINT:
|
case QUINT:
|
||||||
DecodeQuintBlock(num_bits);
|
DecodeQuintBlock(num_bits);
|
||||||
|
|
@ -515,9 +512,10 @@ void DecodeColorValues(uvec4 modes, uint num_partitions, uint color_data_bits, o
|
||||||
}
|
}
|
||||||
|
|
||||||
ivec2 BitTransferSigned(int a, int b) {
|
ivec2 BitTransferSigned(int a, int b) {
|
||||||
ivec2 transferred;
|
ivec2 transferred = ivec2(
|
||||||
transferred.x = (a >> 1) & 0x3F;
|
(a >> 1) & 0x3F,
|
||||||
transferred.y = (b >> 1) | (a & 0x80);
|
(b >> 1) | (a & 0x80)
|
||||||
|
);
|
||||||
if ((transferred.x & 0x20) > 0) {
|
if ((transferred.x & 0x20) > 0) {
|
||||||
transferred.x -= 0x40;
|
transferred.x -= 0x40;
|
||||||
}
|
}
|
||||||
|
|
@ -999,7 +997,6 @@ void DecompressBlock(ivec3 coord) {
|
||||||
// Re-init vector variables for next decode phase
|
// Re-init vector variables for next decode phase
|
||||||
result_index = 0;
|
result_index = 0;
|
||||||
color_bitsread = 0;
|
color_bitsread = 0;
|
||||||
result_limit_reached = false;
|
|
||||||
|
|
||||||
// The limit for the Unquantize phase, avoids decoding more data than needed.
|
// The limit for the Unquantize phase, avoids decoding more data than needed.
|
||||||
result_vector_max_index = size_params.x * size_params.y;
|
result_vector_max_index = size_params.x * size_params.y;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue