diff options
Diffstat (limited to 'freedreno/freedreno_pipe.c')
| -rw-r--r-- | freedreno/freedreno_pipe.c | 23 | 
1 files changed, 22 insertions, 1 deletions
| diff --git a/freedreno/freedreno_pipe.c b/freedreno/freedreno_pipe.c index 1698c466..9f9f1c6e 100644 --- a/freedreno/freedreno_pipe.c +++ b/freedreno/freedreno_pipe.c @@ -199,8 +199,26 @@ void fd_pipe_add_submit(struct fd_pipe *pipe, struct fd_bo *bo)  	list_addtail(list, &pipe->submit_list);  } +/* prepare buffers on submit list before flush: */ +void fd_pipe_pre_submit(struct fd_pipe *pipe) +{ +	struct fd_bo *bo; + +	if (pipe->id == FD_PIPE_3D) +		return; + +	if (!pipe->p3d) +		pipe->p3d = fd_pipe_new(pipe->dev, FD_PIPE_3D); + +	LIST_FOR_EACH_ENTRY(bo, &pipe->submit_list, list[pipe->id]) { +		uint32_t timestamp = fd_bo_get_timestamp(bo); +		if (timestamp) +			fd_pipe_wait(pipe->p3d, timestamp); +	} +} +  /* process buffers on submit list after flush: */ -void fd_pipe_process_submit(struct fd_pipe *pipe, uint32_t timestamp) +void fd_pipe_post_submit(struct fd_pipe *pipe, uint32_t timestamp)  {  	struct fd_bo *bo, *tmp; @@ -209,6 +227,9 @@ void fd_pipe_process_submit(struct fd_pipe *pipe, uint32_t timestamp)  		list_del(list);  		bo->timestamp[pipe->id] = timestamp;  		list_addtail(list, &pipe->pending_list); + +		if (pipe->id == FD_PIPE_3D) +			fb_bo_set_timestamp(bo, timestamp);  	}  	if (!fd_pipe_timestamp(pipe, ×tamp)) | 
