diff options
author | Marek Olšák <[email protected]> | 2017-09-02 00:31:58 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2017-09-11 16:29:52 +0200 |
commit | 3824ca76108076350f22489a0d73486549ef0168 (patch) | |
tree | 4542d9a3d28ab15dfa863b9f63999b8c6cf3536b /src/gallium/winsys/amdgpu | |
parent | 8843bf6dfd4bcca7bcb6dfa64cd959ba7bdb0931 (diff) |
radeonsi: implement pipe_context::fence_server_sync
This will be more useful once we have sync_file support.
Reviewed-by: Nicolai Hähnle <[email protected]>
Diffstat (limited to 'src/gallium/winsys/amdgpu')
-rw-r--r-- | src/gallium/winsys/amdgpu/drm/amdgpu_cs.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c index ca6021cc02c..1d7ea347bc2 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c @@ -936,6 +936,21 @@ static bool is_noop_fence_dependency(struct amdgpu_cs *acs, return amdgpu_fence_wait((void *)fence, 0, false); } +static void amdgpu_cs_add_fence_dependency(struct radeon_winsys_cs *rws, + struct pipe_fence_handle *pfence) +{ + struct amdgpu_cs *acs = amdgpu_cs(rws); + struct amdgpu_cs_context *cs = acs->csc; + struct amdgpu_fence *fence = (struct amdgpu_fence*)pfence; + + if (is_noop_fence_dependency(acs, fence)) + return; + + unsigned idx = add_fence_dependency_entry(cs); + amdgpu_fence_reference(&cs->fence_dependencies[idx], + (struct pipe_fence_handle*)fence); +} + static void amdgpu_add_bo_fence_dependencies(struct amdgpu_cs *acs, struct amdgpu_cs_buffer *buffer) { @@ -1397,6 +1412,7 @@ void amdgpu_cs_init_functions(struct amdgpu_winsys *ws) ws->base.cs_get_next_fence = amdgpu_cs_get_next_fence; ws->base.cs_is_buffer_referenced = amdgpu_bo_is_referenced; ws->base.cs_sync_flush = amdgpu_cs_sync_flush; + ws->base.cs_add_fence_dependency = amdgpu_cs_add_fence_dependency; ws->base.fence_wait = amdgpu_fence_wait_rel_timeout; ws->base.fence_reference = amdgpu_fence_reference; } |