---
 src/gallium/state_trackers/hgl/hgl.c               |   50 +++++++++++++++++++-
 src/gallium/state_trackers/hgl/hgl_context.h       |    5 ++
 .../targets/haiku-softpipe/GalliumContext.cpp      |   32 ++-----------
 3 files changed, 58 insertions(+), 29 deletions(-)

diff --git a/src/gallium/state_trackers/hgl/hgl.c 
b/src/gallium/state_trackers/hgl/hgl.c
index 8dcd6e3..66abc61 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 f1f43fa..a520d49 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 */
diff --git a/src/gallium/targets/haiku-softpipe/GalliumContext.cpp 
b/src/gallium/targets/haiku-softpipe/GalliumContext.cpp
index d7d5d9d..ed41712 100644
--- a/src/gallium/targets/haiku-softpipe/GalliumContext.cpp
+++ b/src/gallium/targets/haiku-softpipe/GalliumContext.cpp
@@ -69,23 +69,6 @@ hgl_viewport(struct gl_context* glContext)
 }
 
 
-static int
-hook_stm_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;
-}
-
-
 GalliumContext::GalliumContext(ulong options)
        :
        fOptions(options),
@@ -264,12 +247,8 @@ GalliumContext::CreateContext(Bitmap *bitmap)
                return -1;
        }
 
-       context->manager = CALLOC_STRUCT(st_manager);
-       if (!context->manager) {
-               ERROR("%s: Couldn't allocate Mesa state tracker manager!\n", 
__func__);
-               return -1;
-       }
-       context->manager->get_param = hook_stm_get_param;
+       // Create state_tracker manager
+       context->manager = hgl_create_st_manager(fScreen);
 
        // Create state tracker visual
        context->stVisual = CreateVisual();
@@ -287,9 +266,6 @@ GalliumContext::CreateContext(Bitmap *bitmap)
                return -1;
        }
 
-       // We need to assign the screen *before* calling st_api create_context
-       context->manager->screen = fScreen;
-
        // Build state tracker attributes
        struct st_context_attribs attribs;
        memset(&attribs, 0, sizeof(attribs));
@@ -405,7 +381,7 @@ GalliumContext::DestroyContext(context_id contextID)
                FREE(fContext[contextID]->stVisual);
 
        if (fContext[contextID]->manager)
-               FREE(fContext[contextID]->manager);
+               hgl_destroy_st_manager(fContext[contextID]->manager);
 
        FREE(fContext[contextID]);
 }
@@ -523,7 +499,7 @@ GalliumContext::ResizeViewport(int32 width, int32 height)
                if (fContext[i] && fContext[i]->st) {
                        struct st_context *stContext = (struct 
st_context*)fContext[i]->st;
                        _mesa_set_viewport(stContext->ctx, 0, 0, 0, width, 
height);
-                       st_manager_validate_framebuffers(stContext);
+                       st_manager_validate_framebuffers(stContext);
                }
        }
 }
-- 
1.7.1

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to