summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/drivers/virgl/virgl_context.c2
-rw-r--r--src/gallium/drivers/virgl/virgl_winsys.h6
-rw-r--r--src/gallium/winsys/virgl/drm/virgl_drm_winsys.c13
-rw-r--r--src/gallium/winsys/virgl/drm/virgl_drm_winsys.h2
-rw-r--r--src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c4
5 files changed, 21 insertions, 6 deletions
diff --git a/src/gallium/drivers/virgl/virgl_context.c b/src/gallium/drivers/virgl/virgl_context.c
index a4d4ab704eb..afc9fe883f7 100644
--- a/src/gallium/drivers/virgl/virgl_context.c
+++ b/src/gallium/drivers/virgl/virgl_context.c
@@ -1242,7 +1242,7 @@ struct pipe_context *virgl_context_create(struct pipe_screen *pscreen,
vctx = CALLOC_STRUCT(virgl_context);
const char *host_debug_flagstring;
- vctx->cbuf = rs->vws->cmd_buf_create(rs->vws);
+ vctx->cbuf = rs->vws->cmd_buf_create(rs->vws, VIRGL_MAX_CMDBUF_DWORDS);
if (!vctx->cbuf) {
FREE(vctx);
return NULL;
diff --git a/src/gallium/drivers/virgl/virgl_winsys.h b/src/gallium/drivers/virgl/virgl_winsys.h
index 96726b409d9..face3f0243f 100644
--- a/src/gallium/drivers/virgl/virgl_winsys.h
+++ b/src/gallium/drivers/virgl/virgl_winsys.h
@@ -31,7 +31,8 @@ struct pipe_fence_handle;
struct winsys_handle;
struct virgl_hw_res;
-#define VIRGL_MAX_CMDBUF_DWORDS (64 * 1024)
+#define VIRGL_MAX_TBUF_DWORDS 1024
+#define VIRGL_MAX_CMDBUF_DWORDS ((64 * 1024) + VIRGL_MAX_TBUF_DWORDS)
struct virgl_drm_caps {
union virgl_caps caps;
@@ -47,6 +48,7 @@ struct virgl_cmd_buf {
struct virgl_winsys {
unsigned pci_id;
int supports_fences; /* In/Out fences are supported */
+ int supports_encoded_transfers; /* Encoded transfers are supported */
void (*destroy)(struct virgl_winsys *vws);
@@ -82,7 +84,7 @@ struct virgl_winsys {
uint32_t stride,
struct winsys_handle *whandle);
- struct virgl_cmd_buf *(*cmd_buf_create)(struct virgl_winsys *ws);
+ struct virgl_cmd_buf *(*cmd_buf_create)(struct virgl_winsys *ws, uint32_t size);
void (*cmd_buf_destroy)(struct virgl_cmd_buf *buf);
void (*emit_res)(struct virgl_winsys *vws, struct virgl_cmd_buf *buf, struct virgl_hw_res *res, boolean write_buffer);
diff --git a/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c b/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c
index 26de8c702df..7759c87f9cf 100644
--- a/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c
+++ b/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c
@@ -564,7 +564,8 @@ static void virgl_drm_resource_wait(struct virgl_winsys *qws,
goto again;
}
-static struct virgl_cmd_buf *virgl_drm_cmd_buf_create(struct virgl_winsys *qws)
+static struct virgl_cmd_buf *virgl_drm_cmd_buf_create(struct virgl_winsys *qws,
+ uint32_t size)
{
struct virgl_drm_cmd_buf *cbuf;
@@ -587,6 +588,14 @@ static struct virgl_cmd_buf *virgl_drm_cmd_buf_create(struct virgl_winsys *qws)
return NULL;
}
+ cbuf->buf = CALLOC(size, sizeof(uint32_t));
+ if (!cbuf->buf) {
+ FREE(cbuf->res_hlist);
+ FREE(cbuf->res_bo);
+ FREE(cbuf);
+ return NULL;
+ }
+
cbuf->base.buf = cbuf->buf;
cbuf->base.in_fence_fd = -1;
return &cbuf->base;
@@ -598,6 +607,7 @@ static void virgl_drm_cmd_buf_destroy(struct virgl_cmd_buf *_cbuf)
FREE(cbuf->res_hlist);
FREE(cbuf->res_bo);
+ FREE(cbuf->buf);
FREE(cbuf);
}
@@ -930,6 +940,7 @@ virgl_drm_winsys_create(int drmFD)
qdws->base.fence_server_sync = virgl_fence_server_sync;
qdws->base.fence_get_fd = virgl_fence_get_fd;
qdws->base.supports_fences = drm_version >= VIRGL_DRM_VERSION_FENCE_FD;
+ qdws->base.supports_encoded_transfers = 1;
qdws->base.get_caps = virgl_drm_get_caps;
diff --git a/src/gallium/winsys/virgl/drm/virgl_drm_winsys.h b/src/gallium/winsys/virgl/drm/virgl_drm_winsys.h
index 659c2d77568..51fad9cf372 100644
--- a/src/gallium/winsys/virgl/drm/virgl_drm_winsys.h
+++ b/src/gallium/winsys/virgl/drm/virgl_drm_winsys.h
@@ -71,7 +71,7 @@ struct virgl_drm_winsys
struct virgl_drm_cmd_buf {
struct virgl_cmd_buf base;
- uint32_t buf[VIRGL_MAX_CMDBUF_DWORDS];
+ uint32_t *buf;
unsigned nres;
unsigned cres;
diff --git a/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c b/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c
index 5422b29e55a..479a98fe499 100644
--- a/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c
+++ b/src/gallium/winsys/virgl/vtest/virgl_vtest_winsys.c
@@ -411,7 +411,8 @@ alloc:
return res;
}
-static struct virgl_cmd_buf *virgl_vtest_cmd_buf_create(struct virgl_winsys *vws)
+static struct virgl_cmd_buf *virgl_vtest_cmd_buf_create(struct virgl_winsys *vws,
+ uint32_t size)
{
struct virgl_vtest_cmd_buf *cbuf;
@@ -700,6 +701,7 @@ virgl_vtest_winsys_wrap(struct sw_winsys *sws)
vtws->base.fence_wait = virgl_fence_wait;
vtws->base.fence_reference = virgl_fence_reference;
vtws->base.supports_fences = 0;
+ vtws->base.supports_encoded_transfers = 0;
vtws->base.flush_frontbuffer = virgl_vtest_flush_frontbuffer;