Browse Source

Fixed ASTC GPU shader

pull/3246/head
Forrest Keller 4 weeks ago
committed by crueter
parent
commit
bb70aac724
  1. 40
      src/video_core/host_shaders/astc_decoder.comp

40
src/video_core/host_shaders/astc_decoder.comp

@ -731,18 +731,46 @@ uint UnquantizeTexelWeight(EncodingData val) {
const uint bitlen = NumBits(val);
const uint bitval = BitValue(val);
// I probably added this wrong, brain empty atm
if (encoding == JUST_BITS) {
uint z = bitval;
uint x = bitlen;
switch (bitlen) {
case 1: return z * 64;
case 2: return uint(floor(float(z) * 21.5f));
case 3: return uint(floor(float(z) * 9.25f));
case 4: return uint(floor(float(z) * 4.125f));
case 5: return uint(floor(float(z) * 2.0625f));
default: return FastReplicateTo6(z, bitlen);
case 1:
return z * 64;
case 2:
case 3:
case 4:
case 5:
return uint(floor(0.5f + float(z) * 64.0f / float((1 << x) - 1)));
default:
return FastReplicateTo6(z, bitlen);
}
}
// Brain screaming at me that division is expensive, probably ultra wrong so have this here incase
/*if (encoding == JUST_BITS) {
uint z = bitval;
switch (bitlen) {
case 1: return z * 64;
case 2: // (z * 64 + 1) / 3
return ((z * 64 + 1) * 43691) >> 17;
case 3: // (z * 64 + 3) / 7
return ((z * 64 + 3) * 37449) >> 18;
case 4: // (z * 64 + 7) / 15
return ((z * 64 + 7) * 34953) >> 19;
case 5: // (z * 64 + 15) / 31
return ((z * 64 + 15) * 33826) >> 20;
default:
return FastReplicateTo6(z, bitlen);
}
}*/
const uint A = ReplicateBitTo7((bitval & 1));
uint B = 0, C = 0, D = 0;
uint result = 0;

Loading…
Cancel
Save