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