1/*
2 * Mesa 3-D graphics library
3 *
4 * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 * OTHER DEALINGS IN THE SOFTWARE.
23 */
24
25
26#ifndef FBOBJECT_H
27#define FBOBJECT_H
28
29#include "glheader.h"
30#include <stdbool.h>
31
32struct gl_context;
33struct gl_texture_object;
34
35
36/**
37 * Is the given FBO a user-created FBO?
38 */
39static inline GLboolean
40_mesa_is_user_fbo(const struct gl_framebuffer *fb)
41{
42   return fb->Name != 0;
43}
44
45
46/**
47 * Is the given FBO a window system FBO (like an X window)?
48 */
49static inline GLboolean
50_mesa_is_winsys_fbo(const struct gl_framebuffer *fb)
51{
52   return fb->Name == 0;
53}
54
55
56
57extern struct gl_framebuffer *
58_mesa_get_incomplete_framebuffer(void);
59
60extern struct gl_renderbuffer *
61_mesa_lookup_renderbuffer(struct gl_context *ctx, GLuint id);
62
63extern struct gl_renderbuffer *
64_mesa_lookup_renderbuffer_err(struct gl_context *ctx, GLuint id,
65                              const char *func);
66
67extern struct gl_framebuffer *
68_mesa_lookup_framebuffer(struct gl_context *ctx, GLuint id);
69
70extern struct gl_framebuffer *
71_mesa_lookup_framebuffer_err(struct gl_context *ctx, GLuint id,
72                             const char *func);
73
74struct gl_framebuffer *
75_mesa_lookup_framebuffer_dsa(struct gl_context *ctx, GLuint id,
76                             const char* func);
77
78
79void
80_mesa_update_texture_renderbuffer(struct gl_context *ctx,
81                                  struct gl_framebuffer *fb,
82                                  struct gl_renderbuffer_attachment *att);
83
84extern void
85_mesa_FramebufferRenderbuffer_sw(struct gl_context *ctx,
86                                 struct gl_framebuffer *fb,
87                                 GLenum attachment,
88                                 struct gl_renderbuffer *rb);
89
90extern void
91_mesa_framebuffer_renderbuffer(struct gl_context *ctx,
92                               struct gl_framebuffer *fb,
93                               GLenum attachment,
94                               struct gl_renderbuffer *rb);
95
96extern void
97_mesa_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer *rb,
98                           GLenum internalFormat, GLsizei width,
99                           GLsizei height, GLsizei samples,
100                           GLsizei storageSamples);
101
102extern void
103_mesa_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb);
104
105extern GLboolean
106_mesa_has_depthstencil_combined(const struct gl_framebuffer *fb);
107
108extern void
109_mesa_test_framebuffer_completeness(struct gl_context *ctx,
110                                    struct gl_framebuffer *fb);
111
112extern GLboolean
113_mesa_is_legal_color_format(const struct gl_context *ctx, GLenum baseFormat);
114
115extern GLenum
116_mesa_base_fbo_format(const struct gl_context *ctx, GLenum internalFormat);
117
118extern bool
119_mesa_detach_renderbuffer(struct gl_context *ctx,
120                          struct gl_framebuffer *fb,
121                          const void *att);
122
123extern struct gl_renderbuffer_attachment *
124_mesa_get_and_validate_attachment(struct gl_context *ctx,
125                                  struct gl_framebuffer *fb,
126                                  GLenum attachment, const char *caller);
127
128extern void
129_mesa_framebuffer_texture(struct gl_context *ctx, struct gl_framebuffer *fb,
130                          GLenum attachment,
131                          struct gl_renderbuffer_attachment *att,
132                          struct gl_texture_object *texObj, GLenum textarget,
133                          GLint level, GLsizei samples,
134                          GLuint layer, GLboolean layered);
135
136extern GLenum
137_mesa_check_framebuffer_status(struct gl_context *ctx,
138                               struct gl_framebuffer *fb);
139
140extern void
141_mesa_bind_framebuffers(struct gl_context *ctx,
142                        struct gl_framebuffer *newDrawFb,
143                        struct gl_framebuffer *newReadFb);
144
145extern GLboolean GLAPIENTRY
146_mesa_IsRenderbuffer(GLuint renderbuffer);
147
148extern void GLAPIENTRY
149_mesa_BindRenderbuffer(GLenum target, GLuint renderbuffer);
150
151extern void GLAPIENTRY
152_mesa_BindRenderbufferEXT(GLenum target, GLuint renderbuffer);
153
154extern void GLAPIENTRY
155_mesa_DeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers);
156
157void GLAPIENTRY
158_mesa_GenRenderbuffers_no_error(GLsizei n, GLuint *renderbuffers);
159
160extern void GLAPIENTRY
161_mesa_GenRenderbuffers(GLsizei n, GLuint *renderbuffers);
162
163void GLAPIENTRY
164_mesa_CreateRenderbuffers_no_error(GLsizei n, GLuint *renderbuffers);
165
166extern void GLAPIENTRY
167_mesa_CreateRenderbuffers(GLsizei n, GLuint *renderbuffers);
168
169extern void GLAPIENTRY
170_mesa_RenderbufferStorage(GLenum target, GLenum internalformat,
171                             GLsizei width, GLsizei height);
172
173extern void GLAPIENTRY
174_mesa_RenderbufferStorageMultisample(GLenum target, GLsizei samples,
175                                     GLenum internalformat,
176                                     GLsizei width, GLsizei height);
177
178extern void GLAPIENTRY
179_mesa_RenderbufferStorageMultisampleAdvancedAMD(
180      GLenum target, GLsizei samples, GLsizei storageSamples,
181      GLenum internalFormat, GLsizei width, GLsizei height);
182
183extern void GLAPIENTRY
184_es_RenderbufferStorageEXT(GLenum target, GLenum internalFormat,
185			   GLsizei width, GLsizei height);
186
187extern void GLAPIENTRY
188_mesa_NamedRenderbufferStorage(GLuint renderbuffer, GLenum internalformat,
189                               GLsizei width, GLsizei height);
190extern void GLAPIENTRY
191_mesa_NamedRenderbufferStorageEXT(GLuint renderbuffer, GLenum internalformat,
192                                  GLsizei width, GLsizei height);
193
194extern void GLAPIENTRY
195_mesa_NamedRenderbufferStorageMultisample(GLuint renderbuffer, GLsizei samples,
196                                          GLenum internalformat,
197                                          GLsizei width, GLsizei height);
198
199extern void GLAPIENTRY
200_mesa_NamedRenderbufferStorageMultisampleEXT(GLuint renderbuffer, GLsizei samples,
201                                             GLenum internalformat,
202                                             GLsizei width, GLsizei height);
203
204extern void GLAPIENTRY
205_mesa_NamedRenderbufferStorageMultisampleAdvancedAMD(
206      GLuint renderbuffer, GLsizei samples, GLsizei storageSamples,
207      GLenum internalformat, GLsizei width, GLsizei height);
208
209extern void GLAPIENTRY
210_mesa_EGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image);
211
212extern void GLAPIENTRY
213_mesa_GetRenderbufferParameteriv(GLenum target, GLenum pname,
214                                    GLint *params);
215
216void GLAPIENTRY
217_mesa_GetNamedRenderbufferParameteriv(GLuint renderbuffer, GLenum pname,
218                                      GLint *params);
219
220extern GLboolean GLAPIENTRY
221_mesa_IsFramebuffer(GLuint framebuffer);
222
223extern void GLAPIENTRY
224_mesa_BindFramebuffer(GLenum target, GLuint framebuffer);
225
226extern void GLAPIENTRY
227_mesa_BindFramebufferEXT(GLenum target, GLuint framebuffer);
228
229extern void GLAPIENTRY
230_mesa_DeleteFramebuffers(GLsizei n, const GLuint *framebuffers);
231
232extern void GLAPIENTRY
233_mesa_GenFramebuffers(GLsizei n, GLuint *framebuffers);
234
235extern void GLAPIENTRY
236_mesa_CreateFramebuffers(GLsizei n, GLuint *framebuffers);
237
238GLenum GLAPIENTRY
239_mesa_CheckFramebufferStatus_no_error(GLenum target);
240
241extern GLenum GLAPIENTRY
242_mesa_CheckFramebufferStatus(GLenum target);
243
244extern GLenum GLAPIENTRY
245_mesa_CheckNamedFramebufferStatus(GLuint framebuffer, GLenum target);
246
247extern GLenum GLAPIENTRY
248_mesa_CheckNamedFramebufferStatusEXT(GLuint framebuffer, GLenum target);
249
250extern void GLAPIENTRY
251_mesa_FramebufferTexture1D_no_error(GLenum target, GLenum attachment,
252                                    GLenum textarget, GLuint texture,
253                                    GLint level);
254extern void GLAPIENTRY
255_mesa_FramebufferTexture1D(GLenum target, GLenum attachment,
256                              GLenum textarget, GLuint texture, GLint level);
257
258extern void GLAPIENTRY
259_mesa_FramebufferTexture2D_no_error(GLenum target, GLenum attachment,
260                                    GLenum textarget, GLuint texture,
261                                    GLint level);
262extern void GLAPIENTRY
263_mesa_FramebufferTexture2D(GLenum target, GLenum attachment,
264                              GLenum textarget, GLuint texture, GLint level);
265
266void GLAPIENTRY
267_mesa_FramebufferTexture2DMultisampleEXT(GLenum target, GLenum attachment,
268                                         GLenum textarget, GLuint texture,
269                                         GLint level, GLsizei samples);
270
271extern void GLAPIENTRY
272_mesa_FramebufferTexture3D_no_error(GLenum target, GLenum attachment,
273                                    GLenum textarget, GLuint texture,
274                                    GLint level, GLint layer);
275extern void GLAPIENTRY
276_mesa_FramebufferTexture3D(GLenum target, GLenum attachment,
277                              GLenum textarget, GLuint texture,
278                              GLint level, GLint layer);
279
280extern void GLAPIENTRY
281_mesa_FramebufferTextureLayer_no_error(GLenum target, GLenum attachment,
282                                       GLuint texture, GLint level,
283                                       GLint layer);
284extern void GLAPIENTRY
285_mesa_FramebufferTextureLayer(GLenum target, GLenum attachment,
286                                 GLuint texture, GLint level, GLint layer);
287
288extern void GLAPIENTRY
289_mesa_NamedFramebufferTextureLayer_no_error(GLuint framebuffer,
290                                            GLenum attachment,
291                                            GLuint texture, GLint level,
292                                            GLint layer);
293extern void GLAPIENTRY
294_mesa_NamedFramebufferTextureLayer(GLuint framebuffer, GLenum attachment,
295                                   GLuint texture, GLint level, GLint layer);
296
297extern void GLAPIENTRY
298_mesa_FramebufferTexture_no_error(GLenum target, GLenum attachment,
299                                  GLuint texture, GLint level);
300extern void GLAPIENTRY
301_mesa_FramebufferTexture(GLenum target, GLenum attachment,
302                         GLuint texture, GLint level);
303
304extern void GLAPIENTRY
305_mesa_NamedFramebufferTexture_no_error(GLuint framebuffer, GLenum attachment,
306                                       GLuint texture, GLint level);
307extern void GLAPIENTRY
308_mesa_NamedFramebufferTexture(GLuint framebuffer, GLenum attachment,
309                              GLuint texture, GLint level);
310
311extern void GLAPIENTRY
312_mesa_NamedFramebufferRenderbufferEXT(GLuint framebuffer, GLenum attachment,
313                                      GLenum renderbuffertarget,
314                                      GLuint renderbuffer);
315
316extern void GLAPIENTRY
317_mesa_NamedFramebufferTexture1DEXT(GLuint framebuffer, GLenum attachment,
318                                   GLenum textarget, GLuint texture, GLint level);
319
320extern void GLAPIENTRY
321_mesa_NamedFramebufferTexture2DEXT(GLuint framebuffer, GLenum attachment,
322                                   GLenum textarget, GLuint texture, GLint level);
323
324extern void GLAPIENTRY
325_mesa_NamedFramebufferTexture3DEXT(GLuint framebuffer, GLenum attachment,
326                                   GLenum textarget, GLuint texture,
327                                   GLint level, GLint zoffset);
328
329void GLAPIENTRY
330_mesa_FramebufferRenderbuffer_no_error(GLenum target, GLenum attachment,
331                                       GLenum renderbuffertarget,
332                                       GLuint renderbuffer);
333
334extern void GLAPIENTRY
335_mesa_FramebufferRenderbuffer(GLenum target, GLenum attachment,
336                                 GLenum renderbuffertarget,
337                                 GLuint renderbuffer);
338
339void GLAPIENTRY
340_mesa_NamedFramebufferRenderbuffer_no_error(GLuint framebuffer,
341                                            GLenum attachment,
342                                            GLenum renderbuffertarget,
343                                            GLuint renderbuffer);
344
345extern void GLAPIENTRY
346_mesa_NamedFramebufferRenderbuffer(GLuint framebuffer, GLenum attachment,
347                                   GLenum renderbuffertarget,
348                                   GLuint renderbuffer);
349
350extern void GLAPIENTRY
351_mesa_GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment,
352                                          GLenum pname, GLint *params);
353
354extern void GLAPIENTRY
355_mesa_GetNamedFramebufferAttachmentParameteriv(GLuint framebuffer,
356                                               GLenum attachment,
357                                               GLenum pname, GLint *params);
358
359extern void GLAPIENTRY
360_mesa_GetNamedFramebufferAttachmentParameterivEXT(GLuint framebuffer,
361                                                  GLenum attachment,
362                                                  GLenum pname, GLint *params);
363
364extern void GLAPIENTRY
365_mesa_NamedFramebufferParameteri(GLuint framebuffer, GLenum pname,
366                                 GLint param);
367
368extern void GLAPIENTRY
369_mesa_NamedFramebufferParameteriEXT(GLuint framebuffer, GLenum pname,
370                                    GLint param);
371
372extern void GLAPIENTRY
373_mesa_GetNamedRenderbufferParameterivEXT(GLuint renderbuffer, GLenum pname,
374                                         GLint *params);
375
376extern void GLAPIENTRY
377_mesa_GetFramebufferParameterivEXT(GLuint framebuffer, GLenum pname,
378                                   GLint *param);
379
380extern void GLAPIENTRY
381_mesa_GetNamedFramebufferParameteriv(GLuint framebuffer, GLenum pname,
382                                     GLint *param);
383
384extern void GLAPIENTRY
385_mesa_GetNamedFramebufferParameterivEXT(GLuint framebuffer, GLenum pname,
386                                        GLint *param);
387
388void GLAPIENTRY
389_mesa_InvalidateSubFramebuffer_no_error(GLenum target, GLsizei numAttachments,
390                                        const GLenum *attachments, GLint x,
391                                        GLint y, GLsizei width, GLsizei height);
392
393extern void GLAPIENTRY
394_mesa_InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments,
395                               const GLenum *attachments, GLint x, GLint y,
396                               GLsizei width, GLsizei height);
397
398extern void GLAPIENTRY
399_mesa_InvalidateNamedFramebufferSubData(GLuint framebuffer,
400                                        GLsizei numAttachments,
401                                        const GLenum *attachments,
402                                        GLint x, GLint y,
403                                        GLsizei width, GLsizei height);
404void GLAPIENTRY
405_mesa_InvalidateFramebuffer_no_error(GLenum target, GLsizei numAttachments,
406                                     const GLenum *attachments);
407
408extern void GLAPIENTRY
409_mesa_InvalidateFramebuffer(GLenum target, GLsizei numAttachments,
410                            const GLenum *attachments);
411
412extern void GLAPIENTRY
413_mesa_InvalidateNamedFramebufferData(GLuint framebuffer,
414                                     GLsizei numAttachments,
415                                     const GLenum *attachments);
416
417extern void GLAPIENTRY
418_mesa_DiscardFramebufferEXT(GLenum target, GLsizei numAttachments,
419                            const GLenum *attachments);
420
421extern void GLAPIENTRY
422_mesa_FramebufferParameteri(GLenum target, GLenum pname, GLint param);
423
424extern void GLAPIENTRY
425_mesa_FramebufferParameteriMESA(GLenum target, GLenum pname, GLint param);
426
427extern void GLAPIENTRY
428_mesa_GetFramebufferParameteriv(GLenum target, GLenum pname, GLint *params);
429
430extern void GLAPIENTRY
431_mesa_GetFramebufferParameterivMESA(GLenum target, GLenum pname, GLint *params);
432
433extern void GLAPIENTRY
434_mesa_FramebufferSampleLocationsfvARB(GLenum target, GLuint start,
435                                      GLsizei count, const GLfloat *v);
436
437extern void GLAPIENTRY
438_mesa_NamedFramebufferSampleLocationsfvARB(GLuint framebuffer, GLuint start,
439                                           GLsizei count, const GLfloat *v);
440
441extern void GLAPIENTRY
442_mesa_FramebufferSampleLocationsfvARB_no_error(GLenum target, GLuint start,
443                                               GLsizei count, const GLfloat *v);
444
445extern void GLAPIENTRY
446_mesa_NamedFramebufferSampleLocationsfvARB_no_error(GLuint framebuffer,
447                                                    GLuint start, GLsizei count,
448                                                    const GLfloat *v);
449
450extern void GLAPIENTRY
451_mesa_EvaluateDepthValuesARB(void);
452
453#endif /* FBOBJECT_H */
454