virgl: add virgl_context

It will be the base class for contexts of renderers.

Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
macos/master
Chia-I Wu 5 years ago
parent ea52b1fa67
commit b866c0182a
  1. 2
      src/Makefile.am
  2. 2
      src/meson.build
  3. 85
      src/virgl_context.c
  4. 54
      src/virgl_context.h
  5. 7
      src/virglrenderer.c

@ -19,6 +19,8 @@ AM_CFLAGS = \
$(CODE_COVERAGE_CFLAGS)
libvrend_la_SOURCES = \
virgl_context.c \
virgl_context.h \
virgl_hw.h \
virgl_protocol.h \
virgl_util.c \

@ -25,6 +25,8 @@ subdir('gallium')
virgl_sources = [
'iov.c',
'virgl_context.c',
'virgl_context.h',
'virgl_hw.h',
'virgl_protocol.h',
'virgl_util.c',

@ -0,0 +1,85 @@
/**************************************************************************
*
* Copyright (C) 2020 Chromium.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
**************************************************************************/
#include "virgl_context.h"
#include <errno.h>
#include "util/u_hash_table.h"
#include "util/u_pointer.h"
#include "virgl_util.h"
static struct util_hash_table *virgl_context_table;
static void
virgl_context_destroy_func(void *val)
{
struct virgl_context *ctx = val;
ctx->destroy(ctx);
}
int
virgl_context_table_init(void)
{
virgl_context_table = util_hash_table_create(hash_func_u32,
compare_func,
virgl_context_destroy_func);
return virgl_context_table ? 0 : ENOMEM;
}
void
virgl_context_table_cleanup(void)
{
if (virgl_context_table) {
util_hash_table_destroy(virgl_context_table);
virgl_context_table = NULL;
}
}
void
virgl_context_table_reset(void)
{
util_hash_table_clear(virgl_context_table);
}
int
virgl_context_add(struct virgl_context *ctx)
{
const enum pipe_error err = util_hash_table_set(
virgl_context_table, uintptr_to_pointer(ctx->ctx_id), ctx);
return err == PIPE_OK ? 0 : ENOMEM;
}
void
virgl_context_remove(uint32_t ctx_id)
{
util_hash_table_remove(virgl_context_table, uintptr_to_pointer(ctx_id));
}
struct virgl_context *
virgl_context_lookup(uint32_t ctx_id)
{
return util_hash_table_get(virgl_context_table,
uintptr_to_pointer(ctx_id));
}

@ -0,0 +1,54 @@
/**************************************************************************
*
* Copyright (C) 2020 Chromium.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
**************************************************************************/
#ifndef VIRGL_CONTEXT_H
#define VIRGL_CONTEXT_H
#include <stdint.h>
struct virgl_context {
uint32_t ctx_id;
void (*destroy)(struct virgl_context *ctx);
};
int
virgl_context_table_init(void);
void
virgl_context_table_cleanup(void);
void
virgl_context_table_reset(void);
int
virgl_context_add(struct virgl_context *ctx);
void
virgl_context_remove(uint32_t ctx_id);
struct virgl_context *
virgl_context_lookup(uint32_t ctx_id);
#endif /* VIRGL_CONTEXT_H */

@ -38,6 +38,8 @@
#include "virglrenderer.h"
#include "virgl_context.h"
#ifdef HAVE_EPOXY_EGL_H
#include "virgl_gbm.h"
#include "virgl_egl.h"
@ -291,6 +293,8 @@ void virgl_renderer_poll(void)
void virgl_renderer_cleanup(UNUSED void *cookie)
{
vrend_renderer_fini();
virgl_context_table_cleanup();
#ifdef HAVE_EPOXY_EGL_H
if (use_context == CONTEXT_EGL) {
virgl_egl_destroy(egl);
@ -366,6 +370,9 @@ int virgl_renderer_init(void *cookie, int flags, struct virgl_renderer_callbacks
#endif
}
if (virgl_context_table_init())
return -1;
if (flags & VIRGL_RENDERER_THREAD_SYNC)
renderer_flags |= VREND_USE_THREAD_SYNC;

Loading…
Cancel
Save