upscale.comp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. #version 450
  2. layout (push_constant) uniform parameter
  3. {
  4. uint ne; uint d_offset;
  5. uint nb00; uint nb01; uint nb02; uint nb03;
  6. uint ne10; uint ne11; uint ne12; uint ne13;
  7. float sf0; float sf1; float sf2; float sf3;
  8. } p;
  9. #include "types.comp"
  10. layout(local_size_x = 512, local_size_y = 1, local_size_z = 1) in;
  11. layout (binding = 0) readonly buffer A {A_TYPE data_a[];};
  12. layout (binding = 1) writeonly buffer D {D_TYPE data_d[];};
  13. void main() {
  14. const uint idx = gl_GlobalInvocationID.z * 262144 + gl_GlobalInvocationID.y * 512 + gl_GlobalInvocationID.x;
  15. if (idx >= p.ne) {
  16. return;
  17. }
  18. const uint i10 = idx % p.ne10;
  19. const uint i11 = (idx / p.ne10) % p.ne11;
  20. const uint i12 = (idx / (p.ne10 * p.ne11)) % p.ne12;
  21. const uint i13 = (idx / (p.ne10 * p.ne11 * p.ne12)) % p.ne13;
  22. const uint i00 = uint(i10 / p.sf0);
  23. const uint i01 = uint(i11 / p.sf1);
  24. const uint i02 = uint(i12 / p.sf2);
  25. const uint i03 = uint(i13 / p.sf3);
  26. data_d[p.d_offset + idx] = D_TYPE(data_a[i03 * p.nb03 + i02 * p.nb02 + i01 * p.nb01 + i00 * p.nb00]);
  27. }