bullshit global memory reads

This commit is contained in:
lizzie
2026-01-29 20:46:16 +00:00
committed by crueter
parent e78ab8eeef
commit 5a10e95188

View File

@@ -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;