GlobalMemory.glsl 622 B

123456789101112131415161718
  1. ivec2 Helper_GetStorageBuffer(uint aLow, uint aHigh)
  2. {
  3. uint64_t address = packUint2x32(uvec2(aLow, aHigh));
  4. int i;
  5. for (i = 0; i < 16; i++)
  6. {
  7. int offset = 0x40 + i * 4;
  8. uint baseLow = fp_c0_data[offset];
  9. uint baseHigh = fp_c0_data[offset + 1];
  10. uint size = fp_c0_data[offset + 2];
  11. uint64_t baseAddr = packUint2x32(uvec2(baseLow, baseHigh));
  12. if (address >= baseAddr && address < baseAddr + packUint2x32(uvec2(size, 0)))
  13. {
  14. return ivec2(i, int(unpackUint2x32(address - (baseAddr & ~63ul)).x) >> 2);
  15. }
  16. }
  17. return ivec2(0);
  18. }