summaryrefslogtreecommitdiff
path: root/freedreno/freedreno_pipe.c
diff options
context:
space:
mode:
authorRob Clark <robclark@freedesktop.org>2017-08-23 17:08:39 -0400
committerRob Clark <robclark@freedesktop.org>2017-11-04 17:23:20 -0400
commit7064b2eae9c136162e5c7f25571d63f71d066887 (patch)
tree6c5a1c056465be9af38b1bce6904999d839288f0 /freedreno/freedreno_pipe.c
parent62e0767b816cb52b35226d439090ef580bd60b01 (diff)
downloaddrm-7064b2eae9c136162e5c7f25571d63f71d066887.tar.gz
freedreno: submit-queue context priority
With a new-enough kernel to support prioritized submit-queues, we can expose priority level support to mesa. Open a submit queue associated with the fd_pipe and pass it's id back to SUBMIT ioctl. Signed-off-by: Rob Clark <robclark@freedesktop.org>
Diffstat (limited to 'freedreno/freedreno_pipe.c')
-rw-r--r--freedreno/freedreno_pipe.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/freedreno/freedreno_pipe.c b/freedreno/freedreno_pipe.c
index e69cb28c..1540474b 100644
--- a/freedreno/freedreno_pipe.c
+++ b/freedreno/freedreno_pipe.c
@@ -33,8 +33,12 @@
#include "freedreno_drmif.h"
#include "freedreno_priv.h"
+/**
+ * priority of zero is highest priority, and higher numeric values are
+ * lower priorities
+ */
struct fd_pipe *
-fd_pipe_new(struct fd_device *dev, enum fd_pipe_id id)
+fd_pipe_new2(struct fd_device *dev, enum fd_pipe_id id, uint32_t prio)
{
struct fd_pipe *pipe;
uint64_t val;
@@ -44,7 +48,12 @@ fd_pipe_new(struct fd_device *dev, enum fd_pipe_id id)
return NULL;
}
- pipe = dev->funcs->pipe_new(dev, id);
+ if ((prio != 1) && (fd_device_version(dev) < FD_VERSION_SUBMIT_QUEUES)) {
+ ERROR_MSG("invalid priority!");
+ return NULL;
+ }
+
+ pipe = dev->funcs->pipe_new(dev, id, prio);
if (!pipe) {
ERROR_MSG("allocation failed");
return NULL;
@@ -59,6 +68,12 @@ fd_pipe_new(struct fd_device *dev, enum fd_pipe_id id)
return pipe;
}
+struct fd_pipe *
+fd_pipe_new(struct fd_device *dev, enum fd_pipe_id id)
+{
+ return fd_pipe_new2(dev, id, 1);
+}
+
void fd_pipe_del(struct fd_pipe *pipe)
{
pipe->funcs->destroy(pipe);