diff options
Diffstat (limited to 'src/gallium/targets/haiku-softpipe')
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' ] |