diff options
author | Dave Airlie <airlied@redhat.com> | 2014-02-26 16:41:23 +1000 |
---|---|---|
committer | Dave Airlie <airlied@gmail.com> | 2014-02-27 09:19:11 +1000 |
commit | 9d70e46dc0c527d1e099437fa058dabb1f912fb0 (patch) | |
tree | 687dd505a5fa1041078de1ecd4333a9de776e3ba | |
parent | 4f2da1035dd55c288a34a5bb013ffdde584c2137 (diff) |
renderer: drop old qemu interface for now
-rw-r--r-- | src/gallium/renderer/Makefile.am | 2 | ||||
-rw-r--r-- | src/gallium/renderer/graw_qemu_lib_renderer.c | 301 | ||||
-rw-r--r-- | src/gallium/renderer/graw_virtio_lib_renderer.c | 7 | ||||
-rw-r--r-- | src/gallium/renderer/virglrenderer.h | 2 |
4 files changed, 4 insertions, 308 deletions
diff --git a/src/gallium/renderer/Makefile.am b/src/gallium/renderer/Makefile.am index c51db48bfec..0a64becd4b3 100644 --- a/src/gallium/renderer/Makefile.am +++ b/src/gallium/renderer/Makefile.am @@ -41,7 +41,7 @@ noinst_LTLIBRARIES = libgrend.la GM_LDFLAGS = -Wl,-Bsymbolic -version-number 0:1 -no-undefined -libvirglrenderer_la_SOURCES = graw_qemu_lib_renderer.c graw_virtio_lib_renderer.c +libvirglrenderer_la_SOURCES = graw_virtio_lib_renderer.c libvirglrenderer_ladir = $(libdir) libvirglrenderer_la_LIBADD = libgrend.la libvirglrenderer_la_LDFLAGS = $(GM_LDFLAGS) diff --git a/src/gallium/renderer/graw_qemu_lib_renderer.c b/src/gallium/renderer/graw_qemu_lib_renderer.c deleted file mode 100644 index 4d14f886cf3..00000000000 --- a/src/gallium/renderer/graw_qemu_lib_renderer.c +++ /dev/null @@ -1,301 +0,0 @@ -#include <stdio.h> -#include <time.h> - -#include <GL/glew.h> -#include <GL/gl.h> -#include <GL/glx.h> - -#include <sys/mman.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <errno.h> -#include <unistd.h> -#include <sys/socket.h> -#include <sys/un.h> -#include <sys/eventfd.h> -#include "send_scm.h" -#include "virgl_hw.h" -#include "pipe/p_state.h" -#include "util/u_format.h" -#include "util/u_math.h" -#include "graw_renderer.h" - -#include "virglrenderer.h" - -static Display *Dpy; -static GLXDrawable Draw; -static GLXContext ctx0; -static XVisualInfo *myvisual; -static void setup_glx_crap(void); - -static struct graw_renderer_callbacks *rcbs; - -static void *dev_cookie; -extern int localrender; - -static struct grend_if_cbs graw_cbs; - -static void graw_process_cmd(struct virgl_command *cmd, struct graw_iovec *iov, - unsigned int niovs); - -void graw_lib_renderer_init(void *cookie, struct graw_renderer_callbacks *cbs) -{ - dev_cookie = cookie; - rcbs = cbs; - localrender = 1; -} - -static void send_irq(uint32_t pd) -{ - rcbs->send_irq(dev_cookie, pd); -} - -void graw_process_vcmd(void *cmd, struct graw_iovec *iov, unsigned int niovs) -{ - struct virgl_command *qcmd = cmd; - - graw_process_cmd(qcmd, iov, niovs); - graw_renderer_check_fences(); -} - -static void virgl_cmd_create_resource(struct virgl_command *cmd, struct graw_iovec *iov, unsigned int niovs) -{ - struct graw_renderer_resource_create_args args; - struct graw_iovec *res_iovs; - uint32_t gsize = graw_iov_size(iov, niovs); - void *data; - int i; - - res_iovs = malloc(cmd->u.res_create.nr_sg_entries * sizeof(struct graw_iovec)); - - if (niovs > 1) { - data = malloc(gsize); - graw_iov_to_buf(iov, niovs, 0, data, gsize); - } else - data = (iov[0].iov_base); - - for (i = 0; i < cmd->u.res_create.nr_sg_entries; i++) { - struct virgl_iov_entry *ent = ((struct virgl_iov_entry *)data) + i; - - res_iovs[i].iov_len = ent->length; - rcbs->map_iov(&res_iovs[i], ent->addr); - } - - args.handle = cmd->u.res_create.handle; - args.target = cmd->u.res_create.target; - args.format = cmd->u.res_create.format; - args.bind = cmd->u.res_create.bind; - args.width = cmd->u.res_create.width; - args.height = cmd->u.res_create.height; - args.depth = cmd->u.res_create.depth; - args.array_size = cmd->u.res_create.array_size; - args.last_level = cmd->u.res_create.last_level; - args.nr_samples = cmd->u.res_create.nr_samples; - args.flags = cmd->u.res_create.flags; - graw_renderer_resource_create(&args, res_iovs, cmd->u.res_create.nr_sg_entries); - - if (niovs > 1) - free(data); -} - -static void graw_process_cmd(struct virgl_command *cmd, struct graw_iovec *iov, - unsigned int niovs) -{ - static int inited; - int fence_ctx_id = 0; - switch (cmd->type) { - case VIRGL_CMD_CREATE_CONTEXT: - graw_renderer_context_create(cmd->u.ctx.handle, cmd->u.ctx_create.nlen, - cmd->u.ctx_create.debug_name); - break; - case VIRGL_CMD_DESTROY_CONTEXT: - graw_renderer_context_destroy(cmd->u.ctx.handle); - break; - case VIRGL_CMD_CREATE_RESOURCE: - virgl_cmd_create_resource(cmd, iov, niovs); - break; - case VIRGL_CMD_SUBMIT: -// fprintf(stderr,"cmd submit %lx %d\n", cmd->u.cmd_submit.data, cmd->u.cmd_submit.size); - - { - graw_decode_block_iov(iov, niovs, cmd->u.cmd_submit.ctx_id, cmd->u.cmd_submit.phy_addr, cmd->u.cmd_submit.size / 4); - fence_ctx_id = cmd->u.cmd_submit.ctx_id; - } - - break; - case VIRGL_CMD_TRANSFER_GET: -// fprintf(stderr,"got transfer get %d\n", cmd->u.transfer_get.res_handle); - graw_renderer_transfer_send_iov(cmd->u.transfer_get.res_handle, - cmd->u.transfer_get.ctx_id, - cmd->u.transfer_get.level, - cmd->u.transfer_get.stride, - cmd->u.transfer_get.layer_stride, - (struct pipe_box *)&cmd->u.transfer_get.box, - cmd->u.transfer_get.data, iov, - niovs); - fence_ctx_id = cmd->u.transfer_get.ctx_id; - break; - case VIRGL_CMD_TRANSFER_PUT: - graw_renderer_transfer_write_iov(cmd->u.transfer_put.res_handle, - cmd->u.transfer_put.ctx_id, - cmd->u.transfer_put.level, - cmd->u.transfer_put.stride, - cmd->u.transfer_put.layer_stride, - (struct pipe_box *)&cmd->u.transfer_put.box, - cmd->u.transfer_put.data, iov, - niovs); - fence_ctx_id = cmd->u.transfer_put.ctx_id; - break; - - case VIRGL_CMD_SET_SCANOUT: - graw_renderer_set_scanout(cmd->u.set_scanout.res_handle, 0, - cmd->u.set_scanout.ctx_id, - (struct pipe_box *)&cmd->u.set_scanout.box); - (*rcbs->notify_state)(dev_cookie, 0, cmd->u.set_scanout.box.x ,cmd->u.set_scanout.box.y, - cmd->u.set_scanout.box.w, - cmd->u.set_scanout.box.h); - break; - case VIRGL_CMD_FLUSH_BUFFER: - graw_renderer_flush_buffer(cmd->u.flush_buffer.res_handle, - cmd->u.flush_buffer.ctx_id, - (struct pipe_box *)&cmd->u.flush_buffer.box); - break; - case VIRGL_CMD_RESOURCE_UNREF: - graw_renderer_resource_unref(cmd->u.res_unref.res_handle); - break; - case VIRGL_CMD_ATTACH_RES_CTX: - /* TODO add security */ - break; - case VIRGL_CMD_DETACH_RES_CTX: - /* TODO add security */ - break; - case VIRGL_CMD_GET_3D_CAPABILITIES: { - union virgl_caps caps; - if (!niovs) - return; - graw_renderer_fill_caps(cmd->u.get_cap.cap_set, - cmd->u.get_cap.cap_set_version, - &caps); - graw_iov_from_buf(iov, niovs, cmd->u.get_cap.offset, &caps, sizeof(union virgl_caps)); - } - break; - case VIRGL_CMD_TIMESTAMP_GET: { - GLint64 ts; - ts = graw_renderer_get_timestamp(); - break; - } - case 0xdeadbeef: - if (inited) { - graw_renderer_fini(); - - } - setup_glx_crap(); - graw_renderer_init(&graw_cbs); - inited = 1; - break; - } - - if (cmd->flags & VIRGL_COMMAND_EMIT_FENCE) - graw_renderer_create_fence(cmd->fence_id, fence_ctx_id); - -} - -void graw_transfer_write_return(void *data, uint32_t bytes, uint64_t offset, - struct graw_iovec *iov, int num_iovs) -{ - graw_iov_from_buf(iov, num_iovs, offset, data, bytes); -} - -void graw_transfer_write_tex_return(struct pipe_resource *res, - struct pipe_box *box, - uint32_t level, - uint32_t dst_stride, - uint64_t offset, - struct graw_iovec *iov, - int num_iovs, - void *myptr, int size, int invert) -{ - int elsize = util_format_get_blocksize(res->format); - int h; - uint32_t myoffset = offset; - uint32_t stride = dst_stride ? dst_stride : util_format_get_nblocksx(res->format, u_minify(res->width0, level)) * elsize; -// uint32_t stride = dst_stride ? dst_stride : util_format_get_nblocksx(res->format, box->width) * elsize; - - if (!invert && (stride == util_format_get_nblocksx(res->format, box->width) * elsize)) - graw_iov_from_buf(iov, num_iovs, offset, myptr, size); - else if (invert) { - for (h = box->height - 1; h >= 0; h--) { - void *sptr = myptr + (h * elsize * box->width); - graw_iov_from_buf(iov, num_iovs, myoffset, sptr, box->width * elsize); - myoffset += stride; - } - } else { - for (h = 0; h < box->height; h++) { - void *sptr = myptr + (h * elsize * box->width); - graw_iov_from_buf(iov, num_iovs, myoffset, sptr, box->width * elsize); - myoffset += stride; - } - } -} - -static void graw_write_fence(unsigned fence_id) -{ - rcbs->write_fence(dev_cookie, fence_id); - send_irq(0x20); -} - -static virgl_gl_context create_gl_context(int idx) -{ - GLXContext *glxctx = glXCreateContext(Dpy, myvisual, ctx0, TRUE); - return (virgl_gl_context)glxctx; -} - -static void destroy_gl_context(virgl_gl_context ctx) -{ - glXDestroyContext(Dpy, (GLXContext)ctx); -} - -static int make_current(int idx, virgl_gl_context ctx) -{ - glXMakeCurrent(Dpy, Draw, (GLXContext)ctx); -} - -static struct grend_if_cbs graw_cbs = { - graw_write_fence, -}; - -void graw_renderer_set_cursor_info(uint32_t cursor_handle, int x, int y) -{ - grend_set_cursor_info(cursor_handle, x, y); -} - -void graw_renderer_poll(void) -{ - graw_renderer_check_queries(); - graw_renderer_check_fences(); -} - -static void setup_glx_crap(void) -{ - int attrib[] = { GLX_RGBA, - GLX_RED_SIZE, 1, - GLX_GREEN_SIZE, 1, - GLX_BLUE_SIZE, 1, - GLX_DOUBLEBUFFER, - None }; - int scrnum; - - XVisualInfo *VisInfo; - Dpy = glXGetCurrentDisplay(); - Draw = glXGetCurrentDrawable(); - - VisInfo = glXChooseVisual(Dpy, DefaultScreen(Dpy), attrib); - - myvisual = VisInfo; - ctx0 = glXGetCurrentContext(); - - { - const GLubyte *name = glGetString(GL_VERSION); - fprintf(stderr,"name is %s\n", name); - } -} diff --git a/src/gallium/renderer/graw_virtio_lib_renderer.c b/src/gallium/renderer/graw_virtio_lib_renderer.c index b659c05d9fe..585cb7b96e5 100644 --- a/src/gallium/renderer/graw_virtio_lib_renderer.c +++ b/src/gallium/renderer/graw_virtio_lib_renderer.c @@ -278,7 +278,6 @@ static int graw_process_cmd(struct virtgpu_command *cmd, struct graw_iovec *iov, return 0; } -#if 0 void graw_transfer_write_return(void *data, uint32_t bytes, uint64_t offset, struct graw_iovec *iov, int num_iovs) { @@ -297,9 +296,10 @@ void graw_transfer_write_tex_return(struct pipe_resource *res, int elsize = util_format_get_blocksize(res->format); int h; uint32_t myoffset = offset; - uint32_t stride = dst_stride ? dst_stride : util_format_get_nblocksx(res->format, box->width) * elsize; + uint32_t stride = dst_stride ? dst_stride : util_format_get_nblocksx(res->format, u_minify(res->width0, level)) * elsize; +// uint32_t stride = dst_stride ? dst_stride : util_format_get_nblocksx(res->format, box->width) * elsize; - if (!invert && (!dst_stride || dst_stride == util_format_get_nblocksx(res->format, box->width) * elsize)) + if (!invert && (stride == util_format_get_nblocksx(res->format, box->width) * elsize)) graw_iov_from_buf(iov, num_iovs, offset, myptr, size); else if (invert) { for (h = box->height - 1; h >= 0; h--) { @@ -315,7 +315,6 @@ void graw_transfer_write_tex_return(struct pipe_resource *res, } } } -#endif static void virgl_write_fence(uint32_t fence_id) { diff --git a/src/gallium/renderer/virglrenderer.h b/src/gallium/renderer/virglrenderer.h index b2c0d302d27..2418a45e78f 100644 --- a/src/gallium/renderer/virglrenderer.h +++ b/src/gallium/renderer/virglrenderer.h @@ -18,8 +18,6 @@ GREND_EXPORT void graw_renderer_set_cursor_info(uint32_t cursor_handle, int x, i typedef void *virgl_gl_context; struct graw_renderer_callbacks { - /* send IRQ to guest */ - void (*send_irq)(void *cookie, uint32_t irq); void (*write_fence)(void *cookie, uint32_t fence); int (*map_iov)(struct graw_iovec *iov, uint64_t addr); |