1e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul/*
2e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul * Mesa 3-D graphics library
3e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul *
47275d4d097f97a2154dfe8fa573dc193cb5b4bf1Brian Paul * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
5e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul *
6e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a
7e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul * copy of this software and associated documentation files (the "Software"),
8e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul * to deal in the Software without restriction, including without limitation
9e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul * and/or sell copies of the Software, and to permit persons to whom the
11e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul * Software is furnished to do so, subject to the following conditions:
12e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul *
13e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul * The above copyright notice and this permission notice shall be included
14e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul * in all copies or substantial portions of the Software.
15e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul *
16e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
193d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
203d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
213d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
223d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * OTHER DEALINGS IN THE SOFTWARE.
23e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul */
24e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
25e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
26e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#ifndef FRAMEBUFFER_H
27e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define FRAMEBUFFER_H
28e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
292d4976fa1953ee545fc774f64fc3b055c440559cIlia Mirkin#include "mtypes.h"
3063f1740a5d9a4ed36026da3e4c1370441218f919Vinson Lee
3163f1740a5d9a4ed36026da3e4c1370441218f919Vinson Leestruct gl_config;
3263f1740a5d9a4ed36026da3e4c1370441218f919Vinson Leestruct gl_context;
33161a3cd9fcfea61cf16eb75ba35546ecc12a6766Jordan Justenstruct gl_renderbuffer;
34e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
35e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paulextern struct gl_framebuffer *
36d3491e775fb07f891463b2185d74bbad62f3ed24Kristian Høgsberg_mesa_create_framebuffer(const struct gl_config *visual);
37e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
38e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paulextern struct gl_framebuffer *
39f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg_mesa_new_framebuffer(struct gl_context *ctx, GLuint name);
40e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
41e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paulextern void
422ec50d256d49ff3b987459ed42a5dc66f02a6b9dFrancisco Jerez_mesa_initialize_window_framebuffer(struct gl_framebuffer *fb,
43d3491e775fb07f891463b2185d74bbad62f3ed24Kristian Høgsberg				     const struct gl_config *visual);
442ec50d256d49ff3b987459ed42a5dc66f02a6b9dFrancisco Jerez
452ec50d256d49ff3b987459ed42a5dc66f02a6b9dFrancisco Jerezextern void
462ec50d256d49ff3b987459ed42a5dc66f02a6b9dFrancisco Jerez_mesa_initialize_user_framebuffer(struct gl_framebuffer *fb, GLuint name);
47e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
48e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paulextern void
49e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul_mesa_destroy_framebuffer(struct gl_framebuffer *buffer);
50e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
51e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paulextern void
52e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul_mesa_free_framebuffer_data(struct gl_framebuffer *buffer);
53e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
54e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paulextern void
555db7723ada0be301b7f8eed754cb62f8a84d6768Brian Paul_mesa_reference_framebuffer_(struct gl_framebuffer **ptr,
565db7723ada0be301b7f8eed754cb62f8a84d6768Brian Paul                             struct gl_framebuffer *fb);
575db7723ada0be301b7f8eed754cb62f8a84d6768Brian Paul
589520f483b8f1e45fa474674b415554988de5d8d3Brian Paulstatic inline void
59a510bc3ee1a696da120c09ee4ec33dc033f671acBrian Paul_mesa_reference_framebuffer(struct gl_framebuffer **ptr,
605db7723ada0be301b7f8eed754cb62f8a84d6768Brian Paul                            struct gl_framebuffer *fb)
615db7723ada0be301b7f8eed754cb62f8a84d6768Brian Paul{
625db7723ada0be301b7f8eed754cb62f8a84d6768Brian Paul   if (*ptr != fb)
635db7723ada0be301b7f8eed754cb62f8a84d6768Brian Paul      _mesa_reference_framebuffer_(ptr, fb);
645db7723ada0be301b7f8eed754cb62f8a84d6768Brian Paul}
65a510bc3ee1a696da120c09ee4ec33dc033f671acBrian Paul
66a510bc3ee1a696da120c09ee4ec33dc033f671acBrian Paulextern void
67f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg_mesa_resize_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb,
68e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul                         GLuint width, GLuint height);
69e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
70e48defc98045f419e71ca13e4f45470b2336ecafBrian Paul
71e48defc98045f419e71ca13e4f45470b2336ecafBrian Paulextern void
72f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg_mesa_resizebuffers( struct gl_context *ctx );
73e48defc98045f419e71ca13e4f45470b2336ecafBrian Paul
74a2b946cb3516eb3fd475e6ed509b3f09eb36d4b6Ian Romanickextern void
75a2b946cb3516eb3fd475e6ed509b3f09eb36d4b6Ian Romanick_mesa_scissor_bounding_box(const struct gl_context *ctx,
76a2b946cb3516eb3fd475e6ed509b3f09eb36d4b6Ian Romanick                           const struct gl_framebuffer *buffer,
77a2b946cb3516eb3fd475e6ed509b3f09eb36d4b6Ian Romanick                           unsigned idx, int *bbox);
7851f4b51151cb08988b5de466f3c2348876784cc5Kevin Rogovinextern void
7951f4b51151cb08988b5de466f3c2348876784cc5Kevin Rogovin_mesa_intersect_scissor_bounding_box(const struct gl_context *ctx,
8051f4b51151cb08988b5de466f3c2348876784cc5Kevin Rogovin                                     unsigned idx, int *bbox);
81a2b946cb3516eb3fd475e6ed509b3f09eb36d4b6Ian Romanick
8274987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovinstatic inline GLuint
8374987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin_mesa_geometric_width(const struct gl_framebuffer *buffer)
8474987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin{
8574987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin   return buffer->_HasAttachments ?
8674987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin      buffer->Width : buffer->DefaultGeometry.Width;
8774987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin}
8874987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin
8974987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovinstatic inline GLuint
9074987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin_mesa_geometric_height(const struct gl_framebuffer *buffer)
9174987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin{
9274987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin   return buffer->_HasAttachments ?
9374987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin      buffer->Height : buffer->DefaultGeometry.Height;
9474987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin}
9574987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin
9674987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovinstatic inline GLuint
9774987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin_mesa_geometric_samples(const struct gl_framebuffer *buffer)
9874987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin{
9974987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin   return buffer->_HasAttachments ?
100eb9cf3cfc99db0cff0a5a584941e8be43ac9b961Neil Roberts      buffer->Visual.samples :
101eb9cf3cfc99db0cff0a5a584941e8be43ac9b961Neil Roberts      buffer->DefaultGeometry._NumSamples;
10274987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin}
10374987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin
10474987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovinstatic inline GLuint
10574987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin_mesa_geometric_layers(const struct gl_framebuffer *buffer)
10674987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin{
10774987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin   return buffer->_HasAttachments ?
10874987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin      buffer->MaxNumLayers : buffer->DefaultGeometry.Layers;
10974987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin}
11074987977a36a7111281e8fb53568dc05dbd3a8b4Kevin Rogovin
111e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paulextern void
112b590c617256720e82fff0428a5e0e4a64115fac2Laura Ekstrand_mesa_update_draw_buffer_bounds(struct gl_context *ctx,
113b590c617256720e82fff0428a5e0e4a64115fac2Laura Ekstrand                                struct gl_framebuffer *drawFb);
114e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
115e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paulextern void
116059cca92a819e20e0d834605a3a7d277eaf88d9fEric Anholt_mesa_update_framebuffer_visual(struct gl_context *ctx,
117059cca92a819e20e0d834605a3a7d277eaf88d9fEric Anholt				struct gl_framebuffer *fb);
118e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
119e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paulextern void
1209036a6c0aa0637a1cd756836006dc8565b15a478Laura Ekstrand_mesa_update_framebuffer(struct gl_context *ctx,
1219036a6c0aa0637a1cd756836006dc8565b15a478Laura Ekstrand                         struct gl_framebuffer *readFb,
1229036a6c0aa0637a1cd756836006dc8565b15a478Laura Ekstrand                         struct gl_framebuffer *drawFb);
123e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
1247275d4d097f97a2154dfe8fa573dc193cb5b4bf1Brian Paulextern GLboolean
125f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg_mesa_source_buffer_exists(struct gl_context *ctx, GLenum format);
1267275d4d097f97a2154dfe8fa573dc193cb5b4bf1Brian Paul
1277275d4d097f97a2154dfe8fa573dc193cb5b4bf1Brian Paulextern GLboolean
128f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg_mesa_dest_buffer_exists(struct gl_context *ctx, GLenum format);
1297275d4d097f97a2154dfe8fa573dc193cb5b4bf1Brian Paul
130cd6b8dd9e82fedc55d033131fbc0f8ee950567c8Eric Anholtextern GLenum
131f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg_mesa_get_color_read_type(struct gl_context *ctx);
132cd6b8dd9e82fedc55d033131fbc0f8ee950567c8Eric Anholt
133cd6b8dd9e82fedc55d033131fbc0f8ee950567c8Eric Anholtextern GLenum
134f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg_mesa_get_color_read_format(struct gl_context *ctx);
1357275d4d097f97a2154dfe8fa573dc193cb5b4bf1Brian Paul
136161a3cd9fcfea61cf16eb75ba35546ecc12a6766Jordan Justenextern struct gl_renderbuffer *
137d702c67ba51f55c04be670c0ac618b687f7d2127Marek Olšák_mesa_get_read_renderbuffer_for_format(const struct gl_context *ctx,
138161a3cd9fcfea61cf16eb75ba35546ecc12a6766Jordan Justen                                       GLenum format);
139161a3cd9fcfea61cf16eb75ba35546ecc12a6766Jordan Justen
140421e9aa71c9dc1c1462e55338dc5ceafb773e201Brian Paulextern void
141421e9aa71c9dc1c1462e55338dc5ceafb773e201Brian Paul_mesa_print_framebuffer(const struct gl_framebuffer *fb);
142421e9aa71c9dc1c1462e55338dc5ceafb773e201Brian Paul
143ea8b77e892cdf6aa4cdd8a9ff312c422b3509ae7Ian Romanickextern bool
144ea8b77e892cdf6aa4cdd8a9ff312c422b3509ae7Ian Romanick_mesa_is_front_buffer_reading(const struct gl_framebuffer *fb);
145ea8b77e892cdf6aa4cdd8a9ff312c422b3509ae7Ian Romanick
146ea8b77e892cdf6aa4cdd8a9ff312c422b3509ae7Ian Romanickextern bool
147ea8b77e892cdf6aa4cdd8a9ff312c422b3509ae7Ian Romanick_mesa_is_front_buffer_drawing(const struct gl_framebuffer *fb);
148ea8b77e892cdf6aa4cdd8a9ff312c422b3509ae7Ian Romanick
149f96309753b7f5f4ea5e1942778087b3ace8eda9bBas Nieuwenhuizenextern bool
150f96309753b7f5f4ea5e1942778087b3ace8eda9bBas Nieuwenhuizen_mesa_is_multisample_enabled(const struct gl_context *ctx);
151f96309753b7f5f4ea5e1942778087b3ace8eda9bBas Nieuwenhuizen
1520295c792b4b47865ddf7760ebe2980fc6f7a536bAnuj Phogatextern bool
1530295c792b4b47865ddf7760ebe2980fc6f7a536bAnuj Phogat_mesa_is_alpha_test_enabled(const struct gl_context *ctx);
1540295c792b4b47865ddf7760ebe2980fc6f7a536bAnuj Phogat
155a1bd2f6950f8ab8ab355fa5f7ff3d7bf372eab13Anuj Phogatextern bool
156a1bd2f6950f8ab8ab355fa5f7ff3d7bf372eab13Anuj Phogat_mesa_is_alpha_to_coverage_enabled(const struct gl_context *ctx);
157a1bd2f6950f8ab8ab355fa5f7ff3d7bf372eab13Anuj Phogat
158e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#endif /* FRAMEBUFFER_H */
159