From 15da8d076110c39d3ce34ac45edf0f3c9ab13b7f Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV Date: Fri, 29 Aug 2014 14:42:26 +0000 Subject: st/hgl: Move st_manager create/destroy into hgl state_tracker --- src/gallium/state_trackers/hgl/hgl.c | 50 +++++++++++++++++++++++++++- src/gallium/state_trackers/hgl/hgl_context.h | 5 +++ 2 files changed, 54 insertions(+), 1 deletion(-) (limited to 'src/gallium/state_trackers/hgl') diff --git a/src/gallium/state_trackers/hgl/hgl.c b/src/gallium/state_trackers/hgl/hgl.c index 8dcd6e315f3..66abc61cb2d 100644 --- a/src/gallium/state_trackers/hgl/hgl.c +++ b/src/gallium/state_trackers/hgl/hgl.c @@ -131,6 +131,23 @@ hgl_st_framebuffer_validate(struct st_context_iface *stctx, } +static int +hgl_st_manager_get_param(struct st_manager *smapi, enum st_manager_param param) +{ + CALLED(); + + switch (param) { + case ST_MANAGER_BROKEN_INVALIDATE: + TRACE("%s: TODO: How should we handle BROKEN_INVALIDATE calls?\n", + __func__); + // For now we force validation of the framebuffer. + return 1; + } + + return 0; +} + + /** * Create new framebuffer */ @@ -148,7 +165,7 @@ hgl_create_st_framebuffer(struct hgl_context* context) // Copy context visual into framebuffer memcpy(&buffer->visual, context->stVisual, sizeof(struct st_visual)); - // calloc our st_framebuffer interface + // calloc and configure our st_framebuffer interface buffer->stfbi = CALLOC_STRUCT(st_framebuffer_iface); if (!buffer->stfbi) { ERROR("%s: Couldn't calloc framebuffer!\n", __func__); @@ -167,3 +184,34 @@ hgl_create_st_framebuffer(struct hgl_context* context) return buffer; } + + +struct st_manager * +hgl_create_st_manager(struct pipe_screen* screen) +{ + CALLED(); + + assert(screen); + struct st_manager* manager = CALLOC_STRUCT(st_manager); + + if (!manager) { + ERROR("%s: Couldn't allocate state tracker manager!\n", __func__); + return NULL; + } + + //manager->display = dpy; + manager->screen = screen; + manager->get_param = hgl_st_manager_get_param; + + return manager; +} + + +void +hgl_destroy_st_manager(struct st_manager *manager) +{ + CALLED(); + + if (manager) + FREE(manager); +} diff --git a/src/gallium/state_trackers/hgl/hgl_context.h b/src/gallium/state_trackers/hgl/hgl_context.h index f1f43fa113b..a520d490e52 100644 --- a/src/gallium/state_trackers/hgl/hgl_context.h +++ b/src/gallium/state_trackers/hgl/hgl_context.h @@ -73,7 +73,12 @@ struct hgl_context }; +// hgl state_tracker framebuffer struct hgl_buffer* hgl_create_st_framebuffer(struct hgl_context* context); +// hgl state_tracker manager +struct st_manager* hgl_create_st_manager(struct pipe_screen* screen); +void hgl_destroy_st_manager(struct st_manager *manager); + #endif /* HGL_CONTEXT_H */ -- cgit v1.2.3