mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-02-04 11:01:18 +01:00
bullshit global memory reads
This commit is contained in:
@@ -81,7 +81,6 @@ uint result_vector[ARRAY_NUM_ELEMENTS * 2];
|
||||
|
||||
int result_index = 0;
|
||||
uint result_vector_max_index;
|
||||
bool result_limit_reached = false;
|
||||
|
||||
// EncodingData helpers
|
||||
uint Encoding(EncodingData val) {
|
||||
@@ -117,12 +116,10 @@ EncodingData CreateEncodingData(uint encoding, uint num_bits, uint bit_val, uint
|
||||
|
||||
|
||||
void ResultEmplaceBack(EncodingData val) {
|
||||
if (result_index >= result_vector_max_index) {
|
||||
// Alert callers to avoid decoding more than needed by this phase
|
||||
result_limit_reached = true;
|
||||
return;
|
||||
}
|
||||
result_vector[result_index] = val.data;
|
||||
// A = result_index, B = result_vector_max_index
|
||||
// A >= B -> A - B >= 0
|
||||
// A < B -> A - B < 0
|
||||
result_vector[min(32U, result_index)] = val.data; // 0 if not set
|
||||
++result_index;
|
||||
}
|
||||
|
||||
@@ -383,7 +380,7 @@ void DecodeIntegerSequence(uint max_range, uint num_values) {
|
||||
EncodingData val = EncodingData(encoding_values[max_range]);
|
||||
const uint encoding = Encoding(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) {
|
||||
case QUINT:
|
||||
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 transferred;
|
||||
transferred.x = (a >> 1) & 0x3F;
|
||||
transferred.y = (b >> 1) | (a & 0x80);
|
||||
ivec2 transferred = ivec2(
|
||||
(a >> 1) & 0x3F,
|
||||
(b >> 1) | (a & 0x80)
|
||||
);
|
||||
if ((transferred.x & 0x20) > 0) {
|
||||
transferred.x -= 0x40;
|
||||
}
|
||||
@@ -999,7 +997,6 @@ void DecompressBlock(ivec3 coord) {
|
||||
// Re-init vector variables for next decode phase
|
||||
result_index = 0;
|
||||
color_bitsread = 0;
|
||||
result_limit_reached = false;
|
||||
|
||||
// The limit for the Unquantize phase, avoids decoding more data than needed.
|
||||
result_vector_max_index = size_params.x * size_params.y;
|
||||
|
||||
Reference in New Issue
Block a user