| 212 | def _submit(self, dev:NVDevice): self._submit_to_gpfifo(dev, dev.dma_gpfifo) |
| 213 | |
| 214 | class NVVideoQueue(NVCommandQueue): |
| 215 | def decode_hevc_chunk(self, pic_desc:HCQBuffer, in_buf:HCQBuffer, out_buf:HCQBuffer, out_buf_pos:int, hist_bufs:list[HCQBuffer], hist_pos:list[int], |
| 216 | chroma_off:int, coloc_buf:HCQBuffer, filter_buf:HCQBuffer, intra_top_off:int, intra_unk_off:int|None, status_buf:HCQBuffer): |
| 217 | self.nvm(4, nv_gpu.NVC9B0_SET_APPLICATION_ID, nv_gpu.NVC9B0_SET_APPLICATION_ID_ID_HEVC) |
| 218 | self.nvm(4, nv_gpu.NVC9B0_SET_CONTROL_PARAMS, nv_flags("NVC9B0_SET_CONTROL_PARAMS", codec_type="hevc", testrun_env="prod_run", gptimer_on=1, |
| 219 | err_conceal_on=1, mbtimer_on=1, event_trace_logging_on=1)) |
| 220 | self.nvm(4, nv_gpu.NVC9B0_SET_DRV_PIC_SETUP_OFFSET, pic_desc.va_addr >> 8) |
| 221 | self.nvm(4, nv_gpu.NVC9B0_SET_IN_BUF_BASE_OFFSET, in_buf.va_addr >> 8) |
| 222 | for pos, buf in zip(hist_pos + [out_buf_pos], hist_bufs + [out_buf]): |
| 223 | self.nvm(4, nv_gpu.NVC9B0_SET_PICTURE_LUMA_OFFSET0 + pos*4, buf.va_addr >> 8) |
| 224 | self.nvm(4, nv_gpu.NVC9B0_SET_PICTURE_CHROMA_OFFSET0 + pos*4, buf.offset(chroma_off).va_addr >> 8) |
| 225 | self.nvm(4, nv_gpu.NVC9B0_SET_COLOC_DATA_OFFSET, coloc_buf.va_addr >> 8) |
| 226 | self.nvm(4, nv_gpu.NVC9B0_SET_NVDEC_STATUS_OFFSET, status_buf.va_addr >> 8) |
| 227 | self.nvm(4, nv_gpu.NVC9B0_HEVC_SET_TILE_SIZES_OFFSET, pic_desc.offset(0x200).va_addr >> 8) |
| 228 | self.nvm(4, nv_gpu.NVC9B0_HEVC_SET_FILTER_BUFFER_OFFSET, filter_buf.va_addr >> 8) |
| 229 | self.nvm(4, nv_gpu.NVC9B0_SET_INTRA_TOP_BUF_OFFSET, (filter_buf.va_addr + intra_top_off) >> 8) |
| 230 | if intra_unk_off is not None: self.nvm(4, 0x4dc, (filter_buf.va_addr + intra_unk_off) >> 8) |
| 231 | self.nvm(4, nv_gpu.NVC9B0_EXECUTE, 0) |
| 232 | return self |
| 233 | |
| 234 | def signal(self, signal:HCQSignal, value:sint=0): |
| 235 | self.nvm(4, nv_gpu.NVC9B0_SEMAPHORE_A, *data64(signal.value_addr), value) |
| 236 | self.nvm(4, nv_gpu.NVC9B0_SEMAPHORE_D, nv_flags("NVC9B0_SEMAPHORE_D", structure_size="four", payload_size="64bit")) |
| 237 | return self |
| 238 | |
| 239 | def _submit(self, dev:NVDevice): self._submit_to_gpfifo(dev, dev.vid_gpfifo) |
| 240 | |
| 241 | class NVArgsState(CLikeArgsState): |
| 242 | def __init__(self, buf:HCQBuffer, prg:NVProgram, bufs:tuple[HCQBuffer, ...], vals:tuple[int, ...]=()): |
no outgoing calls
no test coverage detected
searching dependent graphs…