17ec681f3Smrg/*
27ec681f3Smrg * Copyright 2009-2014, Haiku, Inc. All Rights Reserved.
37ec681f3Smrg * Distributed under the terms of the MIT License.
47ec681f3Smrg *
57ec681f3Smrg * Authors:
67ec681f3Smrg *		Alexander von Gluck IV, kallisti5@unixzen.com
77ec681f3Smrg */
87ec681f3Smrg#ifndef HGL_CONTEXT_H
97ec681f3Smrg#define HGL_CONTEXT_H
107ec681f3Smrg
117ec681f3Smrg#include "os/os_thread.h"
127ec681f3Smrg#include "pipe/p_format.h"
137ec681f3Smrg#include "pipe/p_compiler.h"
147ec681f3Smrg#include "pipe/p_screen.h"
157ec681f3Smrg#include "postprocess/filters.h"
167ec681f3Smrg
177ec681f3Smrg#include "frontend/api.h"
187ec681f3Smrg
197ec681f3Smrg#include "bitmap_wrapper.h"
207ec681f3Smrg
217ec681f3Smrg
227ec681f3Smrg#ifdef __cplusplus
237ec681f3Smrgextern "C" {
247ec681f3Smrg#endif
257ec681f3Smrg
267ec681f3Smrg
277ec681f3Smrg#define CONTEXT_MAX 32
287ec681f3Smrg
297ec681f3Smrgtypedef int64 context_id;
307ec681f3Smrg
317ec681f3Smrg
327ec681f3Smrgstruct hgl_buffer
337ec681f3Smrg{
347ec681f3Smrg	struct st_framebuffer_iface *stfbi;
357ec681f3Smrg	struct st_visual* visual;
367ec681f3Smrg
377ec681f3Smrg	unsigned width;
387ec681f3Smrg	unsigned height;
397ec681f3Smrg	unsigned mask;
407ec681f3Smrg
417ec681f3Smrg	struct pipe_screen* screen;
427ec681f3Smrg	void* winsysContext;
437ec681f3Smrg
447ec681f3Smrg	enum pipe_texture_target target;
457ec681f3Smrg	struct pipe_resource* textures[ST_ATTACHMENT_COUNT];
467ec681f3Smrg
477ec681f3Smrg	void *map;
487ec681f3Smrg};
497ec681f3Smrg
507ec681f3Smrg
517ec681f3Smrgstruct hgl_display
527ec681f3Smrg{
537ec681f3Smrg	mtx_t mutex;
547ec681f3Smrg
557ec681f3Smrg	struct st_api* api;
567ec681f3Smrg	struct st_manager* manager;
577ec681f3Smrg};
587ec681f3Smrg
597ec681f3Smrg
607ec681f3Smrgstruct hgl_context
617ec681f3Smrg{
627ec681f3Smrg	struct hgl_display* display;
637ec681f3Smrg	struct st_context_iface* st;
647ec681f3Smrg	struct st_visual* stVisual;
657ec681f3Smrg
667ec681f3Smrg	// Post processing
677ec681f3Smrg	struct pp_queue_t* postProcess;
687ec681f3Smrg	unsigned int postProcessEnable[PP_FILTERS];
697ec681f3Smrg
707ec681f3Smrg	// Desired viewport size
717ec681f3Smrg	unsigned width;
727ec681f3Smrg	unsigned height;
737ec681f3Smrg
747ec681f3Smrg	mtx_t fbMutex;
757ec681f3Smrg
767ec681f3Smrg	struct hgl_buffer* buffer;
777ec681f3Smrg};
787ec681f3Smrg
797ec681f3Smrg// hgl_buffer from statetracker interface
807ec681f3Smrgstruct hgl_buffer* hgl_st_framebuffer(struct st_framebuffer_iface *stfbi);
817ec681f3Smrg
827ec681f3Smrg// hgl frontend
837ec681f3Smrgstruct st_api* hgl_create_st_api(void);
847ec681f3Smrg
857ec681f3Smrg// hgl framebuffer
867ec681f3Smrgstruct hgl_buffer* hgl_create_st_framebuffer(struct hgl_context* context, void *winsysContext);
877ec681f3Smrgvoid hgl_destroy_st_framebuffer(struct hgl_buffer *buffer);
887ec681f3Smrg
897ec681f3Smrg// hgl manager
907ec681f3Smrgstruct st_manager* hgl_create_st_manager(struct hgl_context* screen);
917ec681f3Smrgvoid hgl_destroy_st_manager(struct st_manager *manager);
927ec681f3Smrg
937ec681f3Smrg// hgl visual
947ec681f3Smrgstruct st_visual* hgl_create_st_visual(ulong options);
957ec681f3Smrgvoid hgl_destroy_st_visual(struct st_visual* visual);
967ec681f3Smrg
977ec681f3Smrg// hgl display
987ec681f3Smrgstruct hgl_display* hgl_create_display(struct pipe_screen* screen);
997ec681f3Smrgvoid hgl_destroy_display(struct hgl_display *display);
1007ec681f3Smrg
1017ec681f3Smrg
1027ec681f3Smrg#ifdef __cplusplus
1037ec681f3Smrg}
1047ec681f3Smrg#endif
1057ec681f3Smrg
1067ec681f3Smrg#endif /* HGL_CONTEXT_H */
107