summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorErik Faye-Lund <erik.faye-lund@collabora.com>2018-12-11 12:34:38 +0000
committerErik Faye-Lund <erik.faye-lund@collabora.com>2018-12-13 16:12:10 +0100
commit8447b64238773db0e365802315772d1819c1923f (patch)
tree6869b4acf89361e47d8d8dbb4e9aed7637452193 /src
parentb702ff537842f72a0f6a3a4a2c6608c52fce1004 (diff)
virgl: wrap vertex element state in a struct
This just has one member for now; the handle. But this is about to change. Signed-off-by: Erik Faye-Lund <erik.faye-lund@collabora.com> Reviewed-by: Mathias Fröhlich <Mathias.Froehlich@web.de> Tested-By: Gert Wollny <gert.wollny@collabora.com>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/virgl/virgl_context.c28
-rw-r--r--src/gallium/drivers/virgl/virgl_context.h2
2 files changed, 21 insertions, 9 deletions
diff --git a/src/gallium/drivers/virgl/virgl_context.c b/src/gallium/drivers/virgl/virgl_context.c
index df6d9b83ff..121d9139f2 100644
--- a/src/gallium/drivers/virgl/virgl_context.c
+++ b/src/gallium/drivers/virgl/virgl_context.c
@@ -48,6 +48,10 @@
#include "virgl_resource.h"
#include "virgl_screen.h"
+struct virgl_vertex_elements_state {
+ uint32_t handle;
+};
+
static uint32_t next_handle;
uint32_t virgl_object_assign_handle(void)
{
@@ -387,28 +391,34 @@ static void *virgl_create_vertex_elements_state(struct pipe_context *ctx,
const struct pipe_vertex_element *elements)
{
struct virgl_context *vctx = virgl_context(ctx);
- uint32_t handle = virgl_object_assign_handle();
- virgl_encoder_create_vertex_elements(vctx, handle,
- num_elements, elements);
- return (void*)(unsigned long)handle;
+ struct virgl_vertex_elements_state *state =
+ CALLOC_STRUCT(virgl_vertex_elements_state);
+ state->handle = virgl_object_assign_handle();
+ virgl_encoder_create_vertex_elements(vctx, state->handle,
+ num_elements, elements);
+ return state;
}
static void virgl_delete_vertex_elements_state(struct pipe_context *ctx,
void *ve)
{
struct virgl_context *vctx = virgl_context(ctx);
- uint32_t handle = (unsigned long)ve;
-
- virgl_encode_delete_object(vctx, handle, VIRGL_OBJECT_VERTEX_ELEMENTS);
+ struct virgl_vertex_elements_state *state =
+ (struct virgl_vertex_elements_state *)ve;
+ virgl_encode_delete_object(vctx, state->handle, VIRGL_OBJECT_VERTEX_ELEMENTS);
+ FREE(state);
}
static void virgl_bind_vertex_elements_state(struct pipe_context *ctx,
void *ve)
{
struct virgl_context *vctx = virgl_context(ctx);
- uint32_t handle = (unsigned long)ve;
- virgl_encode_bind_object(vctx, handle, VIRGL_OBJECT_VERTEX_ELEMENTS);
+ struct virgl_vertex_elements_state *state =
+ (struct virgl_vertex_elements_state *)ve;
+ vctx->vertex_elements = state;
+ virgl_encode_bind_object(vctx, state ? state->handle : 0,
+ VIRGL_OBJECT_VERTEX_ELEMENTS);
}
static void virgl_set_vertex_buffers(struct pipe_context *ctx,
diff --git a/src/gallium/drivers/virgl/virgl_context.h b/src/gallium/drivers/virgl/virgl_context.h
index 20988baa3c..09cf0db2ae 100644
--- a/src/gallium/drivers/virgl/virgl_context.h
+++ b/src/gallium/drivers/virgl/virgl_context.h
@@ -32,6 +32,7 @@ struct pipe_screen;
struct tgsi_token;
struct u_upload_mgr;
struct virgl_cmd_buf;
+struct virgl_vertex_elements_state;
struct virgl_sampler_view {
struct pipe_sampler_view base;
@@ -53,6 +54,7 @@ struct virgl_context {
struct virgl_cmd_buf *cbuf;
struct virgl_textures_info samplers[PIPE_SHADER_TYPES];
+ struct virgl_vertex_elements_state *vertex_elements;
struct pipe_framebuffer_state framebuffer;