summaryrefslogtreecommitdiffstats
path: root/src/gallium/targets/haiku-softpipe
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/targets/haiku-softpipe')
-rw-r--r--src/gallium/targets/haiku-softpipe/GalliumContext.cpp14
-rw-r--r--src/gallium/targets/haiku-softpipe/GalliumContext.h34
-rw-r--r--src/gallium/targets/haiku-softpipe/GalliumFramebuffer.cpp188
-rw-r--r--src/gallium/targets/haiku-softpipe/GalliumFramebuffer.h34
-rw-r--r--src/gallium/targets/haiku-softpipe/SConscript3
5 files changed, 10 insertions, 263 deletions
diff --git a/src/gallium/targets/haiku-softpipe/GalliumContext.cpp b/src/gallium/targets/haiku-softpipe/GalliumContext.cpp
index 7b132604a97..c740458bc72 100644
--- a/src/gallium/targets/haiku-softpipe/GalliumContext.cpp
+++ b/src/gallium/targets/haiku-softpipe/GalliumContext.cpp
@@ -278,8 +278,8 @@ GalliumContext::CreateContext(Bitmap *bitmap)
return -1;
}
- context->draw = new GalliumFramebuffer(context->stVisual, (void*)this);
- context->read = new GalliumFramebuffer(context->stVisual, (void*)this);
+ context->draw = hgl_create_st_framebuffer(context);
+ context->read = hgl_create_st_framebuffer(context);
if (!context->draw || !context->read) {
ERROR("%s: Problem allocating framebuffer!\n", __func__);
@@ -448,12 +448,8 @@ GalliumContext::SetCurrentContext(Bitmap *bitmap, context_id contextID)
}
// We need to lock and unlock framebuffers before accessing them
- context->draw->Lock();
- context->read->Lock();
- api->make_current(context->api, context->st, context->draw->fBuffer,
- context->read->fBuffer);
- context->draw->Unlock();
- context->read->Unlock();
+ api->make_current(context->api, context->st, context->draw->stfbi,
+ context->read->stfbi);
if (context->textures[ST_ATTACHMENT_BACK_LEFT]
&& context->textures[ST_ATTACHMENT_DEPTH_STENCIL]
@@ -486,7 +482,7 @@ GalliumContext::SwapBuffers(context_id contextID)
}
// TODO: Where did st_notify_swapbuffers go?
- //st_notify_swapbuffers(context->draw->stfb);
+ //st_notify_swapbuffers(context->draw->stfbi);
context->st->flush(context->st, ST_FLUSH_FRONT, NULL);
diff --git a/src/gallium/targets/haiku-softpipe/GalliumContext.h b/src/gallium/targets/haiku-softpipe/GalliumContext.h
index 6c11c0fdf46..cf8895e6826 100644
--- a/src/gallium/targets/haiku-softpipe/GalliumContext.h
+++ b/src/gallium/targets/haiku-softpipe/GalliumContext.h
@@ -13,44 +13,16 @@
#include <kernel/image.h>
extern "C" {
-#include "state_tracker/st_api.h"
+//#include "state_tracker/st_api.h"
#include "pipe/p_compiler.h"
#include "pipe/p_screen.h"
#include "postprocess/filters.h"
#include "os/os_thread.h"
+#include "hgl_context.h"
}
-#include "bitmap_wrapper.h"
-#include "GalliumFramebuffer.h"
-
-
-#define CONTEXT_MAX 32
-
-
-typedef int64 context_id;
-struct hgl_context
-{
- struct st_api* api;
- // State Tracker API
- struct st_manager* manager;
- // State Tracker Manager
- struct st_context_iface* st;
- // State Tracker Interface Object
- struct st_visual* stVisual;
- // State Tracker Visual
-
- struct pipe_resource* textures[ST_ATTACHMENT_COUNT];
-
- // Post processing
- struct pp_queue_t* postProcess;
- unsigned int postProcessEnable[PP_FILTERS];
-
- Bitmap* bitmap;
- color_space colorSpace;
+#include "bitmap_wrapper.h"
- GalliumFramebuffer* draw;
- GalliumFramebuffer* read;
-};
class GalliumContext {
diff --git a/src/gallium/targets/haiku-softpipe/GalliumFramebuffer.cpp b/src/gallium/targets/haiku-softpipe/GalliumFramebuffer.cpp
deleted file mode 100644
index d6bfdb41b84..00000000000
--- a/src/gallium/targets/haiku-softpipe/GalliumFramebuffer.cpp
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright 2012-2013, Haiku, Inc. All Rights Reserved.
- * Distributed under the terms of the MIT License.
- *
- * Authors:
- * Artur Wyszynski, [email protected]
- * Alexander von Gluck IV, [email protected]
- */
-
-
-#include "GalliumFramebuffer.h"
-
-extern "C" {
-#include "main/context.h"
-#include "main/framebuffer.h"
-#include "main/renderbuffer.h"
-#include "pipe/p_format.h"
-#include "state_tracker/st_manager.h"
-#include "util/u_memory.h"
-}
-
-#include "GalliumContext.h"
-
-
-#ifdef DEBUG
-# define TRACE(x...) printf("GalliumFramebuffer: " x)
-# define CALLED() TRACE("CALLED: %s\n", __PRETTY_FUNCTION__)
-#else
-# define TRACE(x...)
-# define CALLED()
-#endif
-#define ERROR(x...) printf("GalliumFramebuffer: " x)
-
-
-static boolean
-hgl_framebuffer_flush_front(struct st_context_iface *stctx,
- struct st_framebuffer_iface* stfb, enum st_attachment_type statt)
-{
- CALLED();
-
- hgl_context* context = (hgl_context*)stfb->st_manager_private;
-
- if (!context) {
- ERROR("%s: Couldn't obtain valid hgl_context!\n", __func__);
- return FALSE;
- }
-
- #if 0
- struct stw_st_framebuffer *stwfb = stw_st_framebuffer(stfb);
- pipe_mutex_lock(stwfb->fb->mutex);
-
- struct pipe_resource* resource = textures[statt];
- if (resource)
- stw_framebuffer_present_locked(...);
- #endif
-
- return TRUE;
-}
-
-
-static boolean
-hgl_framebuffer_validate(struct st_context_iface* stctx,
- struct st_framebuffer_iface* stfb,
- const enum st_attachment_type* statts, unsigned count,
- struct pipe_resource** out)
-{
- CALLED();
-
- if (!stfb) {
- ERROR("%s: Invalid st framebuffer interface!\n", __func__);
- return FALSE;
- }
-
- hgl_context* context = (hgl_context*)stfb->st_manager_private;
-
- if (!context) {
- ERROR("%s: Couldn't obtain valid hgl_context!\n", __func__);
- return FALSE;
- }
-
- int32 width = 0;
- int32 height = 0;
- get_bitmap_size(context->bitmap, &width, &height);
-
- struct pipe_resource templat;
- memset(&templat, 0, sizeof(templat));
- templat.target = PIPE_TEXTURE_RECT;
- templat.width0 = width;
- templat.height0 = height;
- templat.depth0 = 1;
- templat.array_size = 1;
- templat.usage = PIPE_USAGE_DEFAULT;
-
- if (context->stVisual && context->manager && context->manager->screen) {
- TRACE("%s: Updating resources\n", __func__);
- unsigned i;
- for (i = 0; i < count; i++) {
- enum pipe_format format = PIPE_FORMAT_NONE;
- unsigned bind = 0;
-
- switch(statts[i]) {
- case ST_ATTACHMENT_FRONT_LEFT:
- case ST_ATTACHMENT_BACK_LEFT:
- format = context->stVisual->color_format;
- bind = PIPE_BIND_DISPLAY_TARGET
- | PIPE_BIND_RENDER_TARGET;
- break;
- case ST_ATTACHMENT_DEPTH_STENCIL:
- format = context->stVisual->depth_stencil_format;
- bind = PIPE_BIND_DEPTH_STENCIL;
- break;
- case ST_ATTACHMENT_ACCUM:
- format = context->stVisual->accum_format;
- bind = PIPE_BIND_RENDER_TARGET;
- break;
- default:
- format = PIPE_FORMAT_NONE;
- break;
- }
-
- if (format != PIPE_FORMAT_NONE) {
- templat.format = format;
- templat.bind = bind;
-
- struct pipe_screen* screen = context->manager->screen;
- context->textures[i] = screen->resource_create(screen, &templat);
- out[i] = context->textures[i];
- }
- }
- }
-
- return TRUE;
-}
-
-
-GalliumFramebuffer::GalliumFramebuffer(struct st_visual* visual,
- void* privateContext)
- :
- fBuffer(NULL)
-{
- CALLED();
- fBuffer = CALLOC_STRUCT(st_framebuffer_iface);
- if (!fBuffer) {
- ERROR("%s: Couldn't calloc framebuffer!\n", __func__);
- return;
- }
- fBuffer->visual = visual;
- fBuffer->flush_front = hgl_framebuffer_flush_front;
- fBuffer->validate = hgl_framebuffer_validate;
- fBuffer->st_manager_private = privateContext;
-
- pipe_mutex_init(fMutex);
-}
-
-
-GalliumFramebuffer::~GalliumFramebuffer()
-{
- CALLED();
- // We lock and unlock to try and make sure we wait for anything
- // using the framebuffer to finish
- Lock();
- if (!fBuffer) {
- ERROR("%s: Strange, no Gallium Framebuffer to free?\n", __func__);
- return;
- }
- FREE(fBuffer);
- Unlock();
-
- pipe_mutex_destroy(fMutex);
-}
-
-
-status_t
-GalliumFramebuffer::Lock()
-{
- CALLED();
- pipe_mutex_lock(fMutex);
- return B_OK;
-}
-
-
-status_t
-GalliumFramebuffer::Unlock()
-{
- CALLED();
- pipe_mutex_unlock(fMutex);
- return B_OK;
-}
diff --git a/src/gallium/targets/haiku-softpipe/GalliumFramebuffer.h b/src/gallium/targets/haiku-softpipe/GalliumFramebuffer.h
deleted file mode 100644
index 11e6b736571..00000000000
--- a/src/gallium/targets/haiku-softpipe/GalliumFramebuffer.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2012, Haiku, Inc. All Rights Reserved.
- * Distributed under the terms of the MIT License.
- *
- * Authors:
- * Alexander von Gluck IV, [email protected]
- */
-#ifndef GALLIUMFRAMEBUFFER_H
-#define GALLIUMFRAMEBUFFER_H
-
-
-extern "C" {
-#include "os/os_thread.h"
-#include "pipe/p_screen.h"
-#include "state_tracker/st_api.h"
-}
-
-
-class GalliumFramebuffer {
-public:
- GalliumFramebuffer(struct st_visual* visual,
- void* privateContext);
- ~GalliumFramebuffer();
- status_t Lock();
- status_t Unlock();
-
- struct st_framebuffer_iface* fBuffer;
-
-private:
- pipe_mutex fMutex;
-};
-
-
-#endif /* GALLIUMFRAMEBUFFER_H */
diff --git a/src/gallium/targets/haiku-softpipe/SConscript b/src/gallium/targets/haiku-softpipe/SConscript
index c730fdebbe8..d89a2afb35f 100644
--- a/src/gallium/targets/haiku-softpipe/SConscript
+++ b/src/gallium/targets/haiku-softpipe/SConscript
@@ -2,6 +2,7 @@ Import('*')
env.Prepend(LIBS = [
ws_haiku,
+ st_haiku,
trace,
rbug,
mesautil,
@@ -26,6 +27,7 @@ env.Append(CPPPATH = [
'#/src/mesa/main',
'#/include/HaikuGL',
'#/src/gallium/winsys/sw/hgl',
+ '#/src/gallium/state_trackers/hgl',
'/boot/system/develop/headers/private',
])
@@ -35,7 +37,6 @@ if env['llvm']:
softpipe_sources = [
'GalliumContext.cpp',
- 'GalliumFramebuffer.cpp',
'SoftwareRenderer.cpp'
]