[Mesa-dev] [PATCH 2/2] gallium/targets: Break haiku state_tracker out to own directory

Emil Velikov emil.l.velikov at gmail.com
Thu Aug 28 14:00:52 PDT 2014


On 28/08/14 01:31, Alexander von Gluck IV wrote:

Hi Alex,
Does that mean that we'll get non-softpipe hgl drivers soon :P

Feel free to squash the attached patch. It cleans up a couple of whitespace
issues + adds st/hgl to EXTRA_DIST (so that it gets picked up by 'make dist')

-Emil

P.S. Is it worth prefixing the functions exported by bitmap_wrapper.h ?

> ---
>  src/gallium/SConscript                             |    1 +
>  src/gallium/state_trackers/hgl/SConscript          |   23 +++
>  src/gallium/state_trackers/hgl/bitmap_wrapper.cpp  |  146 +++++++++++++++
>  src/gallium/state_trackers/hgl/bitmap_wrapper.h    |   62 +++++++
>  src/gallium/state_trackers/hgl/hgl.c               |  169 ++++++++++++++++++
>  src/gallium/state_trackers/hgl/hgl_context.h       |   79 ++++++++
>  .../targets/haiku-softpipe/GalliumContext.cpp      |   14 +-
>  .../targets/haiku-softpipe/GalliumContext.h        |   34 +----
>  .../targets/haiku-softpipe/GalliumFramebuffer.cpp  |  188 --------------------
>  .../targets/haiku-softpipe/GalliumFramebuffer.h    |   34 ----
>  src/gallium/targets/haiku-softpipe/SConscript      |    3 +-
>  src/gallium/winsys/sw/hgl/SConscript               |    2 +-
>  src/gallium/winsys/sw/hgl/bitmap_wrapper.cpp       |  146 ---------------
>  src/gallium/winsys/sw/hgl/bitmap_wrapper.h         |   62 -------
>  src/hgl/GLRendererRoster.cpp                       |    2 +-
>  15 files changed, 492 insertions(+), 473 deletions(-)
>  create mode 100644 src/gallium/state_trackers/hgl/SConscript
>  create mode 100644 src/gallium/state_trackers/hgl/bitmap_wrapper.cpp
>  create mode 100644 src/gallium/state_trackers/hgl/bitmap_wrapper.h
>  create mode 100644 src/gallium/state_trackers/hgl/hgl.c
>  create mode 100644 src/gallium/state_trackers/hgl/hgl_context.h
>  delete mode 100644 src/gallium/targets/haiku-softpipe/GalliumFramebuffer.cpp
>  delete mode 100644 src/gallium/targets/haiku-softpipe/GalliumFramebuffer.h
>  delete mode 100644 src/gallium/winsys/sw/hgl/bitmap_wrapper.cpp
>  delete mode 100644 src/gallium/winsys/sw/hgl/bitmap_wrapper.h
> 
> diff --git a/src/gallium/SConscript b/src/gallium/SConscript
> index 98d017e..977e3fb 100644
> --- a/src/gallium/SConscript
> +++ b/src/gallium/SConscript
> @@ -85,6 +85,7 @@ if not env['embedded']:
>  
>      if env['platform'] == 'haiku':
>          SConscript([
> +            'state_trackers/hgl/SConscript',
>              'targets/haiku-softpipe/SConscript',
>          ])
>  
> diff --git a/src/gallium/state_trackers/hgl/SConscript b/src/gallium/state_trackers/hgl/SConscript
> new file mode 100644
> index 0000000..05b8214
> --- /dev/null
> +++ b/src/gallium/state_trackers/hgl/SConscript
> @@ -0,0 +1,23 @@
> +#######################################################################
> +# SConscript for Haiku state_tracker
> +
> +Import('*')
> +
> +env = env.Clone()
> +
> +env.Append(CPPPATH = [
> +    '#/src',
> +    '#/src/mapi',
> +    '#/src/mesa',
> +])
> +
> +sources = [
> +    'hgl.c',
> +	'bitmap_wrapper.cpp',
> +]
> +
> +st_haiku = env.ConvenienceLibrary(
> +    target = 'st_haiku',
> +    source = sources
> +)
> +Export('st_haiku')
> diff --git a/src/gallium/state_trackers/hgl/bitmap_wrapper.cpp b/src/gallium/state_trackers/hgl/bitmap_wrapper.cpp
> new file mode 100644
> index 0000000..ef81edc
> --- /dev/null
> +++ b/src/gallium/state_trackers/hgl/bitmap_wrapper.cpp
> @@ -0,0 +1,146 @@
> +/**************************************************************************
> + *
> + * Copyright 2009 Artur Wyszynski <harakash at gmail.com>
> + * Copyright 2013 Alexander von Gluck IV <kallisti5 at unixzen.com>
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the
> + * "Software"), to deal in the Software without restriction, including
> + * without limitation the rights to use, copy, modify, merge, publish,
> + * distribute, sub license, and/or sell copies of the Software, and to
> + * permit persons to whom the Software is furnished to do so, subject to
> + * the following conditions:
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
> + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
> + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
> + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
> + * USE OR OTHER DEALINGS IN THE SOFTWARE.
> + *
> + * The above copyright notice and this permission notice (including the
> + * next paragraph) shall be included in all copies or substantial portions
> + * of the Software.
> + *
> + **************************************************************************/
> +
> +
> +#include <stdio.h>
> +#include <interface/Bitmap.h>
> +#include <storage/File.h>
> +#include <support/String.h>
> +#include <translation/BitmapStream.h>
> +#include <translation/TranslatorRoster.h>
> +
> +#include "bitmap_wrapper.h"
> +
> +
> +extern "C" {
> +static int frameNo = 0;
> +
> +
> +Bitmap*
> +create_bitmap(int32 width, int32 height, color_space colorSpace)
> +{
> +	BBitmap *bb = new BBitmap(BRect(0, 0, width, height), colorSpace);
> +	if (bb)
> +		return (Bitmap*)bb;
> +	return NULL;
> +}
> +
> +
> +void
> +get_bitmap_size(const Bitmap* bitmap, int32* width, int32* height)
> +{
> +	BBitmap *bb = (BBitmap*)bitmap;
> +	if (bb && width && height) {
> +		uint32 w = bb->Bounds().IntegerWidth() + 1;
> +		uint32 h = bb->Bounds().IntegerHeight() + 1;
> +		*width = w;
> +		*height = h;
> +	}
> +}
> +
> +
> +color_space
> +get_bitmap_color_space(const Bitmap* bitmap)
> +{
> +	BBitmap *bb = (BBitmap*)bitmap;
> +	if (bb)
> +		return bb->ColorSpace();
> +	return B_NO_COLOR_SPACE;
> +}
> +
> +
> +void
> +copy_bitmap_bits(const Bitmap* bitmap, void* data, int32 length)
> +{
> +	BBitmap *bb = (BBitmap*)bitmap;
> +
> +	// We assume the data is 1:1 the format of the bitmap
> +	if (bb)
> +		bb->ImportBits(data, length, bb->BytesPerRow(), 0, bb->ColorSpace());
> +}
> +
> +
> +void
> +import_bitmap_bits(const Bitmap* bitmap, void* data, int32 length,
> +	unsigned srcStride, color_space srcColorSpace)
> +{
> +	BBitmap *bb = (BBitmap*)bitmap;
> +
> +	// Import image and adjust image format from source to dest
> +	if (bb)
> +		bb->ImportBits(data, length, srcStride, 0, srcColorSpace);
> +}
> +
> +
> +void
> +delete_bitmap(Bitmap* bitmap)
> +{
> +	BBitmap *bb = (BBitmap*)bitmap;
> +	delete bb;
> +}
> +
> +
> +int32
> +get_bitmap_bytes_per_row(const Bitmap* bitmap)
> +{
> +	BBitmap *bb = (BBitmap*)bitmap;
> +	if (bb)
> +		return bb->BytesPerRow();
> +	return 0;
> +}
> +
> +
> +int32
> +get_bitmap_bits_length(const Bitmap* bitmap)
> +{
> +	BBitmap *bb = (BBitmap*)bitmap;
> +	if (bb)
> +		return bb->BitsLength();
> +	return 0;
> +}
> +
> +
> +void
> +dump_bitmap(const Bitmap* bitmap)
> +{
> +	BBitmap *bb = (BBitmap*)bitmap;
> +	if (!bb)
> +		return;
> +
> +	BString filename("/boot/home/frame_");
> +	filename << (int32)frameNo << ".png";
> +
> +	BTranslatorRoster *roster = BTranslatorRoster::Default();
> +	BBitmapStream stream(bb);
> +	BFile dump(filename, B_CREATE_FILE | B_WRITE_ONLY);
> +
> +	roster->Translate(&stream, NULL, NULL, &dump, 0);
> +
> +	frameNo++;
> +}
> +
> +}
> diff --git a/src/gallium/state_trackers/hgl/bitmap_wrapper.h b/src/gallium/state_trackers/hgl/bitmap_wrapper.h
> new file mode 100644
> index 0000000..65ba140
> --- /dev/null
> +++ b/src/gallium/state_trackers/hgl/bitmap_wrapper.h
> @@ -0,0 +1,62 @@
> +/**************************************************************************
> + *
> + * Copyright 2009 Artur Wyszynski <harakash at gmail.com>
> + * Copyright 2013 Alexander von Gluck IV <kallisti5 at unixzen.com>
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the
> + * "Software"), to deal in the Software without restriction, including
> + * without limitation the rights to use, copy, modify, merge, publish,
> + * distribute, sub license, and/or sell copies of the Software, and to
> + * permit persons to whom the Software is furnished to do so, subject to
> + * the following conditions:
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
> + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
> + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
> + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
> + * USE OR OTHER DEALINGS IN THE SOFTWARE.
> + *
> + * The above copyright notice and this permission notice (including the
> + * next paragraph) shall be included in all copies or substantial portions
> + * of the Software.
> + *
> + **************************************************************************/
> +#ifndef __BBITMAP_WRAPPER_H__
> +#define __BBITMAP_WRAPPER_H__
> +
> +
> +#include <interface/GraphicsDefs.h>
> +#include <support/SupportDefs.h>
> +
> +
> +typedef void Bitmap;
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +
> +Bitmap* create_bitmap(int32 width, int32 height, color_space colorSpace);
> +void delete_bitmap(Bitmap* bitmap);
> +
> +void copy_bitmap_bits(const Bitmap* bitmap, void* data, int32 length);
> +void import_bitmap_bits(const Bitmap* bitmap, void* data, int32 length,
> +	unsigned srcStride, color_space srcColorSpace);
> +
> +void get_bitmap_size(const Bitmap* bitmap, int32* width, int32* height);
> +color_space get_bitmap_color_space(const Bitmap* bitmap);
> +int32 get_bitmap_bytes_per_row(const Bitmap* bitmap);
> +int32 get_bitmap_bits_length(const Bitmap* bitmap);
> +
> +void dump_bitmap(const Bitmap* bitmap);
> +
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
> +
> +#endif /* __BBITMAP_WRAPPER_H__ */
> diff --git a/src/gallium/state_trackers/hgl/hgl.c b/src/gallium/state_trackers/hgl/hgl.c
> new file mode 100644
> index 0000000..1d6fa73
> --- /dev/null
> +++ b/src/gallium/state_trackers/hgl/hgl.c
> @@ -0,0 +1,169 @@
> +/*
> + * Copyright 2012-2013, Haiku, Inc. All Rights Reserved.
> + * Distributed under the terms of the MIT License.
> + *
> + * Authors:
> + *      Artur Wyszynski, harakash at gmail.com
> + *      Alexander von Gluck IV, kallisti5 at unixzen.com
> + */
> +
> +
> +#include "main/context.h"
> +#include "main/framebuffer.h"
> +#include "main/renderbuffer.h"
> +#include "pipe/p_format.h"
> +#include "util/u_atomic.h"
> +#include "util/u_memory.h"
> +
> +#include "hgl_context.h"
> +
> +
> +#ifdef DEBUG
> +#   define TRACE(x...) printf("hgl:state_tracker: " x)
> +#   define CALLED() TRACE("CALLED: %s\n", __PRETTY_FUNCTION__)
> +#else
> +#   define TRACE(x...)
> +#   define CALLED()
> +#endif
> +#define ERROR(x...) printf("hgl:state_tracker: " x)
> +
> +
> +static boolean
> +hgl_st_framebuffer_flush_front(struct st_context_iface *stctx,
> +	struct st_framebuffer_iface* stfb, enum st_attachment_type statt)
> +{
> +	CALLED();
> +
> +	struct hgl_context* context = (struct 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;
> +}
> +
> +
> +/**
> + * Called by the st manager to validate the framebuffer (allocate
> + * its resources).
> + */
> +static boolean
> +hgl_st_framebuffer_validate(struct st_context_iface *stctx,
> +	struct st_framebuffer_iface *stfbi, const enum st_attachment_type *statts,
> +	unsigned count, struct pipe_resource **out)
> +{
> +	CALLED();
> +
> +	if (!stfbi) {
> +		ERROR("%s: Invalid st framebuffer interface!\n", __func__);
> +		return FALSE;
> +	}
> +
> +	struct hgl_context* context = (struct hgl_context*)stfbi->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__);
> +		for (unsigned 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;
> +}
> +
> +
> +/**
> + * Create new framebuffer
> + */
> +struct hgl_buffer *
> +hgl_create_st_framebuffer(struct hgl_context* context)
> +{
> +	CALLED();
> +
> +	struct hgl_buffer *buffer = CALLOC_STRUCT(hgl_buffer);
> +
> +	assert(context);
> +	assert(context->stVisual);
> +
> +	if (buffer) {
> +		// Copy context visual into framebuffer
> +		memcpy(&buffer->visual, context->stVisual, sizeof(struct st_visual));
> +
> +		// calloc our st_framebuffer interface
> +		buffer->stfbi = CALLOC_STRUCT(st_framebuffer_iface);
> +		if (!buffer->stfbi) {
> +			ERROR("%s: Couldn't calloc framebuffer!\n", __func__);
> +			return NULL;
> +		}
> +
> +		struct st_framebuffer_iface* stfbi = buffer->stfbi;
> +		p_atomic_set(&stfbi->stamp, 1);
> +		stfbi->flush_front = hgl_st_framebuffer_flush_front;
> +		stfbi->validate = hgl_st_framebuffer_validate;
> +		stfbi->st_manager_private = (void*)context;
> +		stfbi->visual = &buffer->visual;
> +
> +		// TODO: Do we need linked list?
> +	}
> +
> +   return buffer;
> +}
> diff --git a/src/gallium/state_trackers/hgl/hgl_context.h b/src/gallium/state_trackers/hgl/hgl_context.h
> new file mode 100644
> index 0000000..f1f43fa
> --- /dev/null
> +++ b/src/gallium/state_trackers/hgl/hgl_context.h
> @@ -0,0 +1,79 @@
> +/*
> + * Copyright 2009-2014, Haiku, Inc. All Rights Reserved.
> + * Distributed under the terms of the MIT License.
> + *
> + * Authors:
> + *		Alexander von Gluck IV, kallisti5 at unixzen.com
> + */
> +#ifndef HGL_CONTEXT_H
> +#define HGL_CONTEXT_H
> +
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +#include "state_tracker/st_api.h"
> +#include "state_tracker/st_manager.h"
> +#include "pipe/p_compiler.h"
> +#include "pipe/p_screen.h"
> +#include "postprocess/filters.h"
> +#include "os/os_thread.h"
> +
> +#include "bitmap_wrapper.h"
> +#ifdef __cplusplus
> +}
> +#endif
> +
> +
> +#define CONTEXT_MAX 32
> +
> +typedef int64 context_id;
> +
> +
> +struct hgl_buffer
> +{
> +	struct st_framebuffer_iface *stfbi;
> +	struct st_visual* visual;
> +
> +	unsigned width;
> +	unsigned height;
> +
> +	struct pipe_resource* textures[ST_ATTACHMENT_COUNT];
> +
> +	void *map;
> +
> +	//struct hgl_buffer *next;  /**< next in linked list */
> +};
> +
> +
> +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;
> +
> +	pipe_mutex fbMutex;
> +
> +	struct hgl_buffer* draw;
> +	struct hgl_buffer* read;
> +};
> +
> +
> +struct hgl_buffer* hgl_create_st_framebuffer(struct hgl_context* context);
> +
> +
> +#endif /* HGL_CONTEXT_H */
> diff --git a/src/gallium/targets/haiku-softpipe/GalliumContext.cpp b/src/gallium/targets/haiku-softpipe/GalliumContext.cpp
> index 7b13260..c740458 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 6c11c0f..cf8895e 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 d6bfdb4..0000000
> --- 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, harakash at gmail.com
> - *      Alexander von Gluck IV, kallisti5 at unixzen.com
> - */
> -
> -
> -#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 11e6b73..0000000
> --- 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, kallisti5 at unixzen.com
> - */
> -#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 c730fde..d89a2af 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'
>  ]
>  
> diff --git a/src/gallium/winsys/sw/hgl/SConscript b/src/gallium/winsys/sw/hgl/SConscript
> index 44080a6..7755b00 100644
> --- a/src/gallium/winsys/sw/hgl/SConscript
> +++ b/src/gallium/winsys/sw/hgl/SConscript
> @@ -12,13 +12,13 @@ if env['platform'] in ('haiku'):
>          '#/src/gallium/include',
>          '#/src/gallium/auxiliary',
>          '#/src/gallium/drivers',
> +        '#/src/gallium/state_trackers/hgl',
>      ])
>  
>      ws_haiku = env.ConvenienceLibrary(
>          target = 'ws_haiku',
>          source = [
>             'hgl_sw_winsys.c',
> -           'bitmap_wrapper.cpp',
>          ]
>      )
>      Export('ws_haiku')
> diff --git a/src/gallium/winsys/sw/hgl/bitmap_wrapper.cpp b/src/gallium/winsys/sw/hgl/bitmap_wrapper.cpp
> deleted file mode 100644
> index ef81edc..0000000
> --- a/src/gallium/winsys/sw/hgl/bitmap_wrapper.cpp
> +++ /dev/null
> @@ -1,146 +0,0 @@
> -/**************************************************************************
> - *
> - * Copyright 2009 Artur Wyszynski <harakash at gmail.com>
> - * Copyright 2013 Alexander von Gluck IV <kallisti5 at unixzen.com>
> - *
> - * Permission is hereby granted, free of charge, to any person obtaining a
> - * copy of this software and associated documentation files (the
> - * "Software"), to deal in the Software without restriction, including
> - * without limitation the rights to use, copy, modify, merge, publish,
> - * distribute, sub license, and/or sell copies of the Software, and to
> - * permit persons to whom the Software is furnished to do so, subject to
> - * the following conditions:
> - *
> - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
> - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
> - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
> - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
> - * USE OR OTHER DEALINGS IN THE SOFTWARE.
> - *
> - * The above copyright notice and this permission notice (including the
> - * next paragraph) shall be included in all copies or substantial portions
> - * of the Software.
> - *
> - **************************************************************************/
> -
> -
> -#include <stdio.h>
> -#include <interface/Bitmap.h>
> -#include <storage/File.h>
> -#include <support/String.h>
> -#include <translation/BitmapStream.h>
> -#include <translation/TranslatorRoster.h>
> -
> -#include "bitmap_wrapper.h"
> -
> -
> -extern "C" {
> -static int frameNo = 0;
> -
> -
> -Bitmap*
> -create_bitmap(int32 width, int32 height, color_space colorSpace)
> -{
> -	BBitmap *bb = new BBitmap(BRect(0, 0, width, height), colorSpace);
> -	if (bb)
> -		return (Bitmap*)bb;
> -	return NULL;
> -}
> -
> -
> -void
> -get_bitmap_size(const Bitmap* bitmap, int32* width, int32* height)
> -{
> -	BBitmap *bb = (BBitmap*)bitmap;
> -	if (bb && width && height) {
> -		uint32 w = bb->Bounds().IntegerWidth() + 1;
> -		uint32 h = bb->Bounds().IntegerHeight() + 1;
> -		*width = w;
> -		*height = h;
> -	}
> -}
> -
> -
> -color_space
> -get_bitmap_color_space(const Bitmap* bitmap)
> -{
> -	BBitmap *bb = (BBitmap*)bitmap;
> -	if (bb)
> -		return bb->ColorSpace();
> -	return B_NO_COLOR_SPACE;
> -}
> -
> -
> -void
> -copy_bitmap_bits(const Bitmap* bitmap, void* data, int32 length)
> -{
> -	BBitmap *bb = (BBitmap*)bitmap;
> -
> -	// We assume the data is 1:1 the format of the bitmap
> -	if (bb)
> -		bb->ImportBits(data, length, bb->BytesPerRow(), 0, bb->ColorSpace());
> -}
> -
> -
> -void
> -import_bitmap_bits(const Bitmap* bitmap, void* data, int32 length,
> -	unsigned srcStride, color_space srcColorSpace)
> -{
> -	BBitmap *bb = (BBitmap*)bitmap;
> -
> -	// Import image and adjust image format from source to dest
> -	if (bb)
> -		bb->ImportBits(data, length, srcStride, 0, srcColorSpace);
> -}
> -
> -
> -void
> -delete_bitmap(Bitmap* bitmap)
> -{
> -	BBitmap *bb = (BBitmap*)bitmap;
> -	delete bb;
> -}
> -
> -
> -int32
> -get_bitmap_bytes_per_row(const Bitmap* bitmap)
> -{
> -	BBitmap *bb = (BBitmap*)bitmap;
> -	if (bb)
> -		return bb->BytesPerRow();
> -	return 0;
> -}
> -
> -
> -int32
> -get_bitmap_bits_length(const Bitmap* bitmap)
> -{
> -	BBitmap *bb = (BBitmap*)bitmap;
> -	if (bb)
> -		return bb->BitsLength();
> -	return 0;
> -}
> -
> -
> -void
> -dump_bitmap(const Bitmap* bitmap)
> -{
> -	BBitmap *bb = (BBitmap*)bitmap;
> -	if (!bb)
> -		return;
> -
> -	BString filename("/boot/home/frame_");
> -	filename << (int32)frameNo << ".png";
> -
> -	BTranslatorRoster *roster = BTranslatorRoster::Default();
> -	BBitmapStream stream(bb);
> -	BFile dump(filename, B_CREATE_FILE | B_WRITE_ONLY);
> -
> -	roster->Translate(&stream, NULL, NULL, &dump, 0);
> -
> -	frameNo++;
> -}
> -
> -}
> diff --git a/src/gallium/winsys/sw/hgl/bitmap_wrapper.h b/src/gallium/winsys/sw/hgl/bitmap_wrapper.h
> deleted file mode 100644
> index 65ba140..0000000
> --- a/src/gallium/winsys/sw/hgl/bitmap_wrapper.h
> +++ /dev/null
> @@ -1,62 +0,0 @@
> -/**************************************************************************
> - *
> - * Copyright 2009 Artur Wyszynski <harakash at gmail.com>
> - * Copyright 2013 Alexander von Gluck IV <kallisti5 at unixzen.com>
> - *
> - * Permission is hereby granted, free of charge, to any person obtaining a
> - * copy of this software and associated documentation files (the
> - * "Software"), to deal in the Software without restriction, including
> - * without limitation the rights to use, copy, modify, merge, publish,
> - * distribute, sub license, and/or sell copies of the Software, and to
> - * permit persons to whom the Software is furnished to do so, subject to
> - * the following conditions:
> - *
> - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
> - * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
> - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
> - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
> - * USE OR OTHER DEALINGS IN THE SOFTWARE.
> - *
> - * The above copyright notice and this permission notice (including the
> - * next paragraph) shall be included in all copies or substantial portions
> - * of the Software.
> - *
> - **************************************************************************/
> -#ifndef __BBITMAP_WRAPPER_H__
> -#define __BBITMAP_WRAPPER_H__
> -
> -
> -#include <interface/GraphicsDefs.h>
> -#include <support/SupportDefs.h>
> -
> -
> -typedef void Bitmap;
> -
> -#ifdef __cplusplus
> -extern "C" {
> -#endif
> -
> -
> -Bitmap* create_bitmap(int32 width, int32 height, color_space colorSpace);
> -void delete_bitmap(Bitmap* bitmap);
> -
> -void copy_bitmap_bits(const Bitmap* bitmap, void* data, int32 length);
> -void import_bitmap_bits(const Bitmap* bitmap, void* data, int32 length,
> -	unsigned srcStride, color_space srcColorSpace);
> -
> -void get_bitmap_size(const Bitmap* bitmap, int32* width, int32* height);
> -color_space get_bitmap_color_space(const Bitmap* bitmap);
> -int32 get_bitmap_bytes_per_row(const Bitmap* bitmap);
> -int32 get_bitmap_bits_length(const Bitmap* bitmap);
> -
> -void dump_bitmap(const Bitmap* bitmap);
> -
> -
> -#ifdef __cplusplus
> -}
> -#endif
> -
> -
> -#endif /* __BBITMAP_WRAPPER_H__ */
> diff --git a/src/hgl/GLRendererRoster.cpp b/src/hgl/GLRendererRoster.cpp
> index 1712a87..d29f7ec 100644
> --- a/src/hgl/GLRendererRoster.cpp
> +++ b/src/hgl/GLRendererRoster.cpp
> @@ -17,7 +17,7 @@
>  #include <Directory.h>
>  #include <FindDirectory.h>
>  #include <Path.h>
> -#include <String.h>
> +#include <strings.h>
>  #include "GLDispatcher.h"
>  #include "GLRendererRoster.h"
>  
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-hgl-trivial-bits.patch
Type: text/x-patch
Size: 2202 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20140828/5c5e6159/attachment-0001.bin>


More information about the mesa-dev mailing list