18730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV/*
28730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV * Copyright 2009, Haiku, Inc. All Rights Reserved.
38730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV * Distributed under the terms of the MIT License.
48730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV *
58730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV * Authors:
68730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV *		Alexander von Gluck IV, kallisti5@unixzen.com
78730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV */
88730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV#ifndef GALLIUMCONTEXT_H
98730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV#define GALLIUMCONTEXT_H
108730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV
118730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV
128730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV#include <stddef.h>
138730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV#include <kernel/image.h>
148730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV
158730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV#include "pipe/p_compiler.h"
168730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV#include "pipe/p_screen.h"
178730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV#include "postprocess/filters.h"
18311b59495c81f26ee3bee4d8c9e36c0ce15be155Alexander von Gluck IV#include "hgl_context.h"
198730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV
20311b59495c81f26ee3bee4d8c9e36c0ce15be155Alexander von Gluck IV#include "bitmap_wrapper.h"
218730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV
228730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV
238730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV
248730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IVclass GalliumContext {
258730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IVpublic:
268730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV							GalliumContext(ulong options);
278730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV							~GalliumContext();
288730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV
29e759f1c111018949db114e76ebf1a723525fb802Alexander von Gluck IV		void				Lock();
30e759f1c111018949db114e76ebf1a723525fb802Alexander von Gluck IV		void				Unlock();
31e759f1c111018949db114e76ebf1a723525fb802Alexander von Gluck IV
328730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV		context_id			CreateContext(Bitmap* bitmap);
338730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV		void				DestroyContext(context_id contextID);
348730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV		context_id			GetCurrentContext() { return fCurrentContext; };
358730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV		status_t			SetCurrentContext(Bitmap *bitmap,
368730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV								context_id contextID);
378730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV
388730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV		status_t			SwapBuffers(context_id contextID);
39290553b6d637779cb733549a582230437545d335Alexander von Gluck IV
40290553b6d637779cb733549a582230437545d335Alexander von Gluck IV		bool				Validate(uint32 width, uint32 height);
41290553b6d637779cb733549a582230437545d335Alexander von Gluck IV		void				Invalidate(uint32 width, uint32 height);
428730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV
438730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IVprivate:
448730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV		status_t			CreateScreen();
458730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV		void				Flush();
468730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV
478730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV		ulong				fOptions;
48e759f1c111018949db114e76ebf1a723525fb802Alexander von Gluck IV		struct pipe_screen*	fScreen;
498730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV
50e759f1c111018949db114e76ebf1a723525fb802Alexander von Gluck IV		// Context Management
518730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV		struct hgl_context*	fContext[CONTEXT_MAX];
528730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV		context_id			fCurrentContext;
538730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV		pipe_mutex			fMutex;
548730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV};
557de484871dae1643cbecf346066968f61684f06fAlexander von Gluck IV
568730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV
578730236d1a900c9512a9ef92c08034f0223bcf92Alexander von Gluck IV#endif /* GALLIUMCONTEXT_H */
58