From 10684e205a4e7780d97a7d2ebe7f0f1582baa0de Mon Sep 17 00:00:00 2001 From: fincs Date: Wed, 29 Aug 2018 00:51:24 +0200 Subject: [PATCH] nvidia/fence.h: sketching on NvFence/NvMultiFence {not implemented} --- nx/include/switch/nvidia/fence.h | 17 +++++++++++++---- nx/source/nvidia/gpu/gpfifo.c | 11 +++-------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/nx/include/switch/nvidia/fence.h b/nx/include/switch/nvidia/fence.h index 8a525783..5748084d 100644 --- a/nx/include/switch/nvidia/fence.h +++ b/nx/include/switch/nvidia/fence.h @@ -1,9 +1,18 @@ #pragma once +#include "ioctl.h" + +typedef nvioctl_fence NvFence; typedef struct { - nvioctl_fence fence; -} NvFence; + u32 num_fences; + NvFence fences[4]; +} NvMultiFence; -static inline void nvfenceCreate(NvFence* f, nvioctl_fence* fence) { - f->fence = *fence; +Result nvFenceWait(NvFence* f, s32 timeout_ms); + +static inline void nvMultiFenceCreate(NvMultiFence* mf, const NvFence* fence) { + mf->num_fences = 1; + mf->fences[0] = *fence; } + +Result nvMultiFenceWait(NvMultiFence* mf, s32 timeout_ms); diff --git a/nx/source/nvidia/gpu/gpfifo.c b/nx/source/nvidia/gpu/gpfifo.c index 83c1ecb1..c6fe25c8 100644 --- a/nx/source/nvidia/gpu/gpfifo.c +++ b/nx/source/nvidia/gpu/gpfifo.c @@ -36,7 +36,6 @@ Result nvGpfifoSubmit(NvGpfifo* f, NvCmdList* cmd_list, NvFence* fence_out) { Result rc; nvioctl_gpfifo_entry ent; - nvioctl_fence fence; u64 a = nvCmdListGetGpuAddr(cmd_list) | (nvCmdListGetListSize(cmd_list) << 42); @@ -44,15 +43,11 @@ Result nvGpfifoSubmit(NvGpfifo* f, NvCmdList* cmd_list, NvFence* fence_out) ent.desc32[0] = a; ent.desc32[1] = a >> 32; - fence.id = 0; - fence.value = 1; + fence_out->id = -1; + fence_out->value = 0; rc = nvioctlChannel_SubmitGpfifo( - f->parent->fd, &ent, 1, /*0x104*/0x104/*flags*/, &fence); - - if (R_SUCCEEDED(rc)) { - nvfenceCreate(fence_out, &fence); - } + f->parent->fd, &ent, 1, /*0x104*/0x104/*flags*/, fence_out); cmd_list->num_cmds = 0;