code wiki / (root) / nx_gpu_capture_store_lib.nx

nx_gpu_capture_store_lib.nx source

↩ module page · 44 lines · 2515 B

1// Validated GPU capture -> immutable append-only row, composing existing capture retry/CAS storage. 2import "nx_gpu_capture_lib.nx" 3import "nx_world_capture_meta.nx" 4import "nx_capture_append_lib.nx" 5import "nx_base64.nx" 6const GCS_VALIDATION_BASE: i64=-300 7const GCS_BAD_META: i64=-201 8const GCS_BODY_LIMIT: i64=-202 9const GCS_WORK_BYTES: i64=256 10// Row: id + seven normalized metadata columns + NXGT1 + base64(exact validated body). 11// Positive result=new row, zero=identical retry; negative preserves existing capture history. 12func gcs_append(prefix: *u8,query: *u8,qn: i64,body: *u8,bn: i64,max_body: i64,max_rows: i64) -> i64 { 13 if bn<0 || max_body<0 || bn>max_body { return GCS_BODY_LIMIT } 14 // Bound output-size arithmetic independently of a caller's policy. 15 if bn>(9223372036854775807-WCM_OUT_CAP-CA_HASH_BYTES-32)/4 { return GCS_BODY_LIMIT } 16 let work: *i64=sys_mmap(GCS_WORK_BYTES) as *i64 17 let checked: i64=gtc_validate(body,bn,max_rows,work) 18 if checked<0 { sys_munmap(work as *u8,GCS_WORK_BYTES); return GCS_VALIDATION_BASE+checked } 19 let meta: *u8=sys_mmap(WCM_OUT_CAP) 20 let mn: i64=wcm_parse(query,qn,work,meta,WCM_OUT_CAP) 21 var valid: i64=1 22 if mn<0 { valid=0 } else { 23 if wcm_equal(query,work[8],work[9],"webgpu" as *u8)==0 { valid=0 } 24 if wcm_equal(query,work[10],work[11],"gpu-pass" as *u8)==0 { valid=0 } 25 } 26 if valid==0 { sys_munmap(meta,WCM_OUT_CAP); sys_munmap(work as *u8,GCS_WORK_BYTES); return GCS_BAD_META } 27 let raw: *u8=sys_mmap(32) 28 let hashes: *u8=sys_mmap((CA_HASH_BYTES+1)*2) 29 let fp: *u8=((hashes as i64)+CA_HASH_BYTES+1) as *u8 30 var identity_end: i64=0; var separators: i64=0 31 while identity_end<mn { if meta[identity_end]==9 as u8 { separators=separators+1; if separators==2 { break } }; identity_end=identity_end+1 } 32 ca_fingerprint(work as *Sha256,raw,hashes,"nishi.gpu.capture.id.v1\n" as *u8,meta,identity_end,meta,0) 33 ca_fingerprint(work as *Sha256,raw,fp,"nishi.gpu.capture.payload.v1\n" as *u8,meta,mn,body,bn) 34 let rowcap: i64=CA_HASH_BYTES+1+mn+1+6+((bn+2)/3)*4+1 35 let row: *u8=sys_mmap(rowcap) 36 var o: i64=ss_cat(row,0,hashes); row[o]=9 as u8; o=o+1 37 var i: i64=0; while i<mn { row[o]=meta[i]; o=o+1; i=i+1 } 38 row[o]=9 as u8; o=o+1; o=ss_cat(row,o,"NXGT1\t" as *u8) 39 o=o+b64_encode(body,bn,((row as i64)+o) as *u8); row[o]=10 as u8; o=o+1 40 let result: i64=ca_append_once(prefix,hashes,fp,row,o) 41 sys_munmap(row,rowcap); sys_munmap(hashes,(CA_HASH_BYTES+1)*2); sys_munmap(raw,32) 42 sys_munmap(meta,WCM_OUT_CAP); sys_munmap(work as *u8,GCS_WORK_BYTES) 43 return result 44}