diff options
author | X512 <danger_mail@list.ru> | 2022-03-11 00:48:05 +0900 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2023-02-18 00:44:43 +0000 |
commit | d55f66b483c92e7079c085c7212d47f5f142db05 (patch) | |
tree | f9bcb65be8b04e8587eb5b97d471b5e87ea981d6 | |
parent | da73bcac37fb79e1e881c38ced350a285a57859c (diff) |
haiku: fix build
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21079>
-rw-r--r-- | src/gallium/frontends/hgl/bitmap_wrapper.cpp | 146 | ||||
-rw-r--r-- | src/gallium/frontends/hgl/bitmap_wrapper.h | 62 | ||||
-rw-r--r-- | src/gallium/frontends/hgl/hgl.c | 107 | ||||
-rw-r--r-- | src/gallium/frontends/hgl/hgl_context.h | 30 | ||||
-rw-r--r-- | src/gallium/frontends/hgl/meson.build | 2 | ||||
-rw-r--r-- | src/gallium/winsys/sw/hgl/hgl_sw_winsys.cpp | 5 | ||||
-rw-r--r-- | src/gallium/winsys/sw/hgl/hgl_sw_winsys.h | 6 | ||||
-rw-r--r-- | src/util/macros.h | 3 | ||||
-rw-r--r-- | src/util/u_math.h | 5 |
9 files changed, 92 insertions, 274 deletions
diff --git a/src/gallium/frontends/hgl/bitmap_wrapper.cpp b/src/gallium/frontends/hgl/bitmap_wrapper.cpp deleted file mode 100644 index ef81edc8a57..00000000000 --- a/src/gallium/frontends/hgl/bitmap_wrapper.cpp +++ /dev/null @@ -1,146 +0,0 @@ -/************************************************************************** - * - * Copyright 2009 Artur Wyszynski <harakash@gmail.com> - * Copyright 2013 Alexander von Gluck IV <kallisti5@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/frontends/hgl/bitmap_wrapper.h b/src/gallium/frontends/hgl/bitmap_wrapper.h deleted file mode 100644 index 65ba14044d8..00000000000 --- a/src/gallium/frontends/hgl/bitmap_wrapper.h +++ /dev/null @@ -1,62 +0,0 @@ -/************************************************************************** - * - * Copyright 2009 Artur Wyszynski <harakash@gmail.com> - * Copyright 2013 Alexander von Gluck IV <kallisti5@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/frontends/hgl/hgl.c b/src/gallium/frontends/hgl/hgl.c index f1a6d928302..7fd5745d90f 100644 --- a/src/gallium/frontends/hgl/hgl.c +++ b/src/gallium/frontends/hgl/hgl.c @@ -16,6 +16,7 @@ #include "util/format/u_format.h" #include "util/u_memory.h" #include "util/u_inlines.h" +#include "state_tracker/st_context.h" #include "GLView.h" @@ -43,8 +44,7 @@ hgl_st_context(struct st_context *st) // Perform a safe void to hgl_buffer cast -//static inline struct hgl_buffer* -struct hgl_buffer* +static struct hgl_buffer* hgl_st_framebuffer(struct pipe_frontend_drawable *drawable) { struct hgl_buffer* buffer; @@ -109,17 +109,17 @@ hgl_st_framebuffer_validate_textures(struct pipe_frontend_drawable *drawable, enum pipe_format format; unsigned bind; - if (((1 << i) & buffer->visual->buffer_mask) && buffer->textures[i] == NULL) { + if (((1 << i) & buffer->visual.buffer_mask) && buffer->textures[i] == NULL) { switch (i) { case ST_ATTACHMENT_FRONT_LEFT: case ST_ATTACHMENT_BACK_LEFT: case ST_ATTACHMENT_FRONT_RIGHT: case ST_ATTACHMENT_BACK_RIGHT: - format = buffer->visual->color_format; + format = buffer->visual.color_format; bind = PIPE_BIND_DISPLAY_TARGET | PIPE_BIND_RENDER_TARGET; break; case ST_ATTACHMENT_DEPTH_STENCIL: - format = buffer->visual->depth_stencil_format; + format = buffer->visual.depth_stencil_format; bind = PIPE_BIND_DEPTH_STENCIL; break; default: @@ -157,7 +157,6 @@ hgl_st_framebuffer_validate(struct st_context *st, struct pipe_frontend_drawable *drawable, const enum st_attachment_type *statts, unsigned count, struct pipe_resource **out, struct pipe_resource **resolve) { - struct hgl_context* context; struct hgl_buffer* buffer; unsigned stAttachmentMask, newMask; unsigned i; @@ -165,7 +164,6 @@ hgl_st_framebuffer_validate(struct st_context *st, CALLED(); - context = hgl_st_context(st); buffer = hgl_st_framebuffer(drawable); // Build mask of current attachments @@ -175,16 +173,16 @@ hgl_st_framebuffer_validate(struct st_context *st, newMask = stAttachmentMask & ~buffer->mask; - resized = (buffer->width != context->width) - || (buffer->height != context->height); + resized = (buffer->width != buffer->newWidth) + || (buffer->height != buffer->newHeight); if (resized || newMask) { boolean ret; TRACE("%s: resize event. old: %d x %d; new: %d x %d\n", __func__, - buffer->width, buffer->height, context->width, context->height); + buffer->width, buffer->height, buffer->newWidth, buffer->newHeight); ret = hgl_st_framebuffer_validate_textures(drawable, - context->width, context->height, stAttachmentMask); + buffer->newWidth, buffer->newHeight, stAttachmentMask); if (!ret) return ret; @@ -217,22 +215,21 @@ static uint32_t hgl_fb_ID = 0; * Create new framebuffer */ struct hgl_buffer * -hgl_create_st_framebuffer(struct hgl_context* context, void *winsysContext) +hgl_create_st_framebuffer(struct hgl_display *display, struct st_visual* visual, void *winsysContext) { struct hgl_buffer *buffer; CALLED(); // Our requires before creating a framebuffer - assert(context); - assert(context->display); - assert(context->stVisual); + assert(display); + assert(visual); buffer = CALLOC_STRUCT(hgl_buffer); assert(buffer); // Prepare our buffer - buffer->visual = context->stVisual; - buffer->screen = context->display->fscreen->screen; + buffer->visual = *visual; + buffer->screen = display->fscreen->screen; buffer->winsysContext = winsysContext; if (buffer->screen->get_param(buffer->screen, PIPE_CAP_NPOT_TEXTURES)) @@ -243,11 +240,11 @@ hgl_create_st_framebuffer(struct hgl_context* context, void *winsysContext) // Prepare our frontend interface buffer->base.flush_front = hgl_st_framebuffer_flush_front; buffer->base.validate = hgl_st_framebuffer_validate; - buffer->base.visual = context->stVisual; + buffer->base.visual = &buffer->visual; p_atomic_set(&buffer->base.stamp, 1); buffer->base.ID = p_atomic_inc_return(&hgl_fb_ID); - buffer->base.fscreen = context->display->fscreen; + buffer->base.fscreen = display->fscreen; return buffer; } @@ -266,14 +263,61 @@ hgl_destroy_st_framebuffer(struct hgl_buffer *buffer) } -struct st_visual* -hgl_create_st_visual(ulong options) +struct hgl_context* +hgl_create_context(struct hgl_display *display, struct st_visual* visual, struct st_context* shared) { - struct st_visual* visual; + struct hgl_context* context = CALLOC_STRUCT(hgl_context); + assert(context); + context->display = display; + + struct st_context_attribs attribs; + memset(&attribs, 0, sizeof(attribs)); + attribs.options.force_glsl_extensions_warn = false; + attribs.profile = API_OPENGL_COMPAT; + attribs.visual = *visual; + attribs.major = 1; + attribs.minor = 0; + + enum st_context_error result; + context->st = st_api_create_context(display->fscreen, &attribs, &result, shared); + if (context->st == NULL) { + FREE(context); + return NULL; + } + + assert(!context->st->frontend_context); + context->st->frontend_context = (void*)context; + + struct st_context *stContext = (struct st_context*)context->st; + + // Init Gallium3D Post Processing + // TODO: no pp filters are enabled yet through postProcessEnable + context->postProcess = pp_init(stContext->pipe, context->postProcessEnable, stContext->cso_context, stContext, (void*)st_context_invalidate_state); + + return context; +} + + +void +hgl_destroy_context(struct hgl_context* context) +{ + if (context->st) { + st_context_flush(context->st, 0, NULL, NULL, NULL); + st_destroy_context(context->st); + } + if (context->postProcess) + pp_free(context->postProcess); + + FREE(context); +} + + +void +hgl_get_st_visual(struct st_visual* visual, ulong options) +{ CALLED(); - visual = CALLOC_STRUCT(st_visual); assert(visual); // Determine color format @@ -301,30 +345,19 @@ hgl_create_st_visual(ulong options) visual->buffer_mask |= ST_ATTACHMENT_BACK_LEFT_MASK; } - #if 0 +#if 0 if ((options & BGL_STEREO) != 0) { visual->buffer_mask |= ST_ATTACHMENT_FRONT_RIGHT_MASK; if ((options & BGL_DOUBLE) != 0) visual->buffer_mask |= ST_ATTACHMENT_BACK_RIGHT_MASK; - } - #endif + } +#endif if ((options & BGL_DEPTH) || (options & BGL_STENCIL)) visual->buffer_mask |= ST_ATTACHMENT_DEPTH_STENCIL_MASK; TRACE("%s: Visual color format: %s\n", __func__, util_format_name(visual->color_format)); - - return visual; -} - - -void -hgl_destroy_st_visual(struct st_visual* visual) -{ - CALLED(); - - FREE(visual); } diff --git a/src/gallium/frontends/hgl/hgl_context.h b/src/gallium/frontends/hgl/hgl_context.h index 1ac73e50d49..03e567af2de 100644 --- a/src/gallium/frontends/hgl/hgl_context.h +++ b/src/gallium/frontends/hgl/hgl_context.h @@ -16,8 +16,6 @@ #include "frontend/api.h" -#include "bitmap_wrapper.h" - #ifdef __cplusplus extern "C" { @@ -32,10 +30,12 @@ typedef int64 context_id; struct hgl_buffer { struct pipe_frontend_drawable base; - struct st_visual* visual; + struct st_visual visual; unsigned width; unsigned height; + unsigned newWidth; + unsigned newHeight; unsigned mask; struct pipe_screen* screen; @@ -43,8 +43,6 @@ struct hgl_buffer enum pipe_texture_target target; struct pipe_resource* textures[ST_ATTACHMENT_COUNT]; - - void *map; }; @@ -60,35 +58,21 @@ struct hgl_context { struct hgl_display* display; struct st_context* st; - struct st_visual* stVisual; // Post processing struct pp_queue_t* postProcess; unsigned int postProcessEnable[PP_FILTERS]; - - // Desired viewport size - unsigned width; - unsigned height; - - mtx_t fbMutex; - - struct hgl_buffer* buffer; }; -// hgl_buffer from statetracker interface -struct hgl_buffer* hgl_st_framebuffer(struct pipe_frontend_drawable *drawable); - // hgl framebuffer -struct hgl_buffer* hgl_create_st_framebuffer(struct hgl_context* context, void *winsysContext); +struct hgl_buffer* hgl_create_st_framebuffer(struct hgl_display *display, struct st_visual* visual, void *winsysContext); void hgl_destroy_st_framebuffer(struct hgl_buffer *buffer); -// hgl manager -struct pipe_frontend_screen* hgl_create_st_manager(struct hgl_context* screen); -void hgl_destroy_st_manager(struct pipe_frontend_screen *fscreen); +struct hgl_context* hgl_create_context(struct hgl_display *display, struct st_visual* visual, struct st_context* shared); +void hgl_destroy_context(struct hgl_context* context); // hgl visual -struct st_visual* hgl_create_st_visual(ulong options); -void hgl_destroy_st_visual(struct st_visual* visual); +void hgl_get_st_visual(struct st_visual* visual, ulong options); // hgl display struct hgl_display* hgl_create_display(struct pipe_screen* screen); diff --git a/src/gallium/frontends/hgl/meson.build b/src/gallium/frontends/hgl/meson.build index c9a8fa23072..3b6348db338 100644 --- a/src/gallium/frontends/hgl/meson.build +++ b/src/gallium/frontends/hgl/meson.build @@ -19,8 +19,6 @@ # SOFTWARE. files_libsthgl = files( - 'bitmap_wrapper.cpp', - 'bitmap_wrapper.h', 'hgl_context.h', 'hgl.c', ) diff --git a/src/gallium/winsys/sw/hgl/hgl_sw_winsys.cpp b/src/gallium/winsys/sw/hgl/hgl_sw_winsys.cpp index 3c0dc4d8430..f0f772d4525 100644 --- a/src/gallium/winsys/sw/hgl/hgl_sw_winsys.cpp +++ b/src/gallium/winsys/sw/hgl/hgl_sw_winsys.cpp @@ -132,6 +132,7 @@ hgl_winsys_displaytarget_create(struct sw_winsys* winsys, haikuDisplayTarget->data = NULL; haikuDisplayTarget->bitmap = new BBitmap( BRect(0, 0, width - 1, height - 1), + 0, haikuDisplayTarget->colorSpace, haikuDisplayTarget->stride); } else { @@ -217,8 +218,8 @@ hgl_winsys_displaytarget_display(struct sw_winsys* winsys, struct haiku_displaytarget* haikuDisplayTarget = hgl_sw_displaytarget(displayTarget); - HGLWinsysContext *context = (HGLWinsysContext*)contextPrivate; - context->Display(haikuDisplayTarget->bitmap, NULL); + BitmapHook *context = (BitmapHook*)contextPrivate; + context->SetBitmap(haikuDisplayTarget->bitmap); } diff --git a/src/gallium/winsys/sw/hgl/hgl_sw_winsys.h b/src/gallium/winsys/sw/hgl/hgl_sw_winsys.h index d20c1933a30..3628a8a26d2 100644 --- a/src/gallium/winsys/sw/hgl/hgl_sw_winsys.h +++ b/src/gallium/winsys/sw/hgl/hgl_sw_winsys.h @@ -31,9 +31,11 @@ class BBitmap; class BRect; -class HGLWinsysContext { +class BitmapHook { public: - virtual void Display(BBitmap *bitmap, BRect *updateRect) = 0; + virtual ~BitmapHook() {}; + virtual void GetSize(uint32_t &width, uint32_t &height) = 0; + virtual BBitmap *SetBitmap(BBitmap *bmp) = 0; }; #endif diff --git a/src/util/macros.h b/src/util/macros.h index b00c3d2001c..672f2a04574 100644 --- a/src/util/macros.h +++ b/src/util/macros.h @@ -25,6 +25,9 @@ #define UTIL_MACROS_H #include <assert.h> +#if defined(__HAIKU__) && !defined(__cplusplus) +#define static_assert _Static_assert +#endif #include <stddef.h> #include <stdint.h> #include <stdio.h> diff --git a/src/util/u_math.h b/src/util/u_math.h index 317c44f770d..c01d752dfb0 100644 --- a/src/util/u_math.h +++ b/src/util/u_math.h @@ -50,6 +50,11 @@ #include "util/detect_cc.h" #include "util/detect_arch.h" +#ifdef __HAIKU__ +#include <sys/param.h> +#undef ALIGN +#endif + #ifdef __cplusplus extern "C" { #endif |