1/* 2 * Mesa 3-D graphics library 3 * 4 * Copyright (C) 2009 VMware, Inc. 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 META_H 27#define META_H 28 29#include "main/mtypes.h" 30 31/** 32 * \name Flags for meta operations 33 * \{ 34 * 35 * These flags are passed to _mesa_meta_begin(). 36 */ 37#define MESA_META_ALL ~0x0 38#define MESA_META_ALPHA_TEST 0x1 39#define MESA_META_BLEND 0x2 /**< includes logicop */ 40#define MESA_META_COLOR_MASK 0x4 41#define MESA_META_DEPTH_TEST 0x8 42#define MESA_META_FOG 0x10 43#define MESA_META_PIXEL_STORE 0x20 44#define MESA_META_PIXEL_TRANSFER 0x40 45#define MESA_META_RASTERIZATION 0x80 46#define MESA_META_SCISSOR 0x100 47#define MESA_META_SHADER 0x200 48#define MESA_META_STENCIL_TEST 0x400 49#define MESA_META_TRANSFORM 0x800 /**< modelview/projection matrix state */ 50#define MESA_META_TEXTURE 0x1000 51#define MESA_META_VERTEX 0x2000 52#define MESA_META_VIEWPORT 0x4000 53#define MESA_META_CLAMP_FRAGMENT_COLOR 0x8000 54#define MESA_META_CLAMP_VERTEX_COLOR 0x10000 55#define MESA_META_CONDITIONAL_RENDER 0x20000 56#define MESA_META_CLIP 0x40000 57#define MESA_META_SELECT_FEEDBACK 0x80000 58#define MESA_META_MULTISAMPLE 0x100000 59#define MESA_META_FRAMEBUFFER_SRGB 0x200000 60#define MESA_META_OCCLUSION_QUERY 0x400000 61#define MESA_META_DRAW_BUFFERS 0x800000 62#define MESA_META_DITHER 0x1000000 63/**\}*/ 64 65/** 66 * State which we may save/restore across meta ops. 67 * XXX this may be incomplete... 68 */ 69struct save_state 70{ 71 GLbitfield SavedState; /**< bitmask of MESA_META_* flags */ 72 73 /* Always saved/restored with meta. */ 74 gl_api API; 75 uint8_t ExtensionsVersion; 76 77 /** MESA_META_CLEAR (and others?) */ 78 struct gl_query_object *CurrentOcclusionObject; 79 80 /** MESA_META_ALPHA_TEST */ 81 GLboolean AlphaEnabled; 82 GLenum AlphaFunc; 83 GLclampf AlphaRef; 84 85 /** MESA_META_BLEND */ 86 GLbitfield BlendEnabled; 87 GLboolean ColorLogicOpEnabled; 88 89 /** MESA_META_DITHER */ 90 GLboolean DitherFlag; 91 92 /** MESA_META_COLOR_MASK */ 93 GLubyte ColorMask[MAX_DRAW_BUFFERS][4]; 94 95 /** MESA_META_DEPTH_TEST */ 96 struct gl_depthbuffer_attrib Depth; 97 98 /** MESA_META_FOG */ 99 GLboolean Fog; 100 101 /** MESA_META_PIXEL_STORE */ 102 struct gl_pixelstore_attrib Pack, Unpack; 103 104 /** MESA_META_PIXEL_TRANSFER */ 105 GLfloat RedBias, RedScale; 106 GLfloat GreenBias, GreenScale; 107 GLfloat BlueBias, BlueScale; 108 GLfloat AlphaBias, AlphaScale; 109 GLfloat DepthBias, DepthScale; 110 GLboolean MapColorFlag; 111 112 /** MESA_META_RASTERIZATION */ 113 GLenum FrontPolygonMode, BackPolygonMode; 114 GLboolean PolygonOffset; 115 GLboolean PolygonSmooth; 116 GLboolean PolygonStipple; 117 GLboolean PolygonCull; 118 119 /** MESA_META_SCISSOR */ 120 struct gl_scissor_attrib Scissor; 121 122 /** MESA_META_SHADER */ 123 GLboolean VertexProgramEnabled; 124 struct gl_program *VertexProgram; 125 GLboolean FragmentProgramEnabled; 126 struct gl_program *FragmentProgram; 127 GLboolean ATIFragmentShaderEnabled; 128 struct gl_shader_program *Shader[MESA_SHADER_STAGES]; 129 struct gl_shader_program *ActiveShader; 130 struct gl_pipeline_object *Pipeline; 131 132 /** MESA_META_STENCIL_TEST */ 133 struct gl_stencil_attrib Stencil; 134 135 /** MESA_META_TRANSFORM */ 136 GLenum MatrixMode; 137 GLfloat ModelviewMatrix[16]; 138 GLfloat ProjectionMatrix[16]; 139 GLfloat TextureMatrix[16]; 140 /** GL_ARB_clip_control */ 141 GLenum ClipOrigin; /**< GL_LOWER_LEFT or GL_UPPER_LEFT */ 142 GLenum ClipDepthMode; /**< GL_NEGATIVE_ONE_TO_ONE or GL_ZERO_TO_ONE */ 143 144 /** MESA_META_CLIP */ 145 GLbitfield ClipPlanesEnabled; 146 147 /** MESA_META_TEXTURE */ 148 GLuint ActiveUnit; 149 /** for unit[0] only */ 150 struct gl_texture_object *CurrentTexture[NUM_TEXTURE_TARGETS]; 151 /** mask of TEXTURE_2D_BIT, etc */ 152 GLbitfield TexEnabled[MAX_TEXTURE_UNITS]; 153 GLbitfield TexGenEnabled[MAX_TEXTURE_UNITS]; 154 GLuint EnvMode; /* unit[0] only */ 155 156 /** MESA_META_VERTEX */ 157 struct gl_vertex_array_object *VAO; 158 159 /** MESA_META_VIEWPORT */ 160 GLfloat ViewportX, ViewportY, ViewportW, ViewportH; 161 GLclampd DepthNear, DepthFar; 162 163 /** MESA_META_CLAMP_FRAGMENT_COLOR */ 164 GLenum ClampFragmentColor; 165 166 /** MESA_META_CLAMP_VERTEX_COLOR */ 167 GLenum ClampVertexColor; 168 169 /** MESA_META_CONDITIONAL_RENDER */ 170 struct gl_query_object *CondRenderQuery; 171 GLenum CondRenderMode; 172 173 /** MESA_META_SELECT_FEEDBACK */ 174 GLenum RenderMode; 175 struct gl_selection Select; 176 struct gl_feedback Feedback; 177 178 /** MESA_META_MULTISAMPLE */ 179 struct gl_multisample_attrib Multisample; 180 181 /** MESA_META_FRAMEBUFFER_SRGB */ 182 GLboolean sRGBEnabled; 183 184 /** Miscellaneous (always disabled) */ 185 GLboolean Lighting; 186 GLboolean RasterDiscard; 187 GLboolean TransformFeedbackNeedsResume; 188 189 struct gl_framebuffer *DrawBuffer; 190 struct gl_framebuffer *ReadBuffer; 191 192 /** MESA_META_DRAW_BUFFERS */ 193 GLenum ColorDrawBuffers[MAX_DRAW_BUFFERS]; 194}; 195 196/** 197 * Temporary texture used for glBlitFramebuffer, glDrawPixels, etc. 198 * This is currently shared by all the meta ops. But we could create a 199 * separate one for each of glDrawPixel, glBlitFramebuffer, glCopyPixels, etc. 200 */ 201struct temp_texture 202{ 203 GLuint TexObj; 204 GLenum Target; /**< GL_TEXTURE_2D or GL_TEXTURE_RECTANGLE */ 205 GLsizei MinSize; /**< Min texture size to allocate */ 206 GLsizei MaxSize; /**< Max possible texture size */ 207 GLboolean NPOT; /**< Non-power of two size OK? */ 208 GLsizei Width, Height; /**< Current texture size */ 209 GLenum IntFormat; 210 GLfloat Sright, Ttop; /**< right, top texcoords */ 211}; 212 213/** 214 * State for GLSL texture sampler which is used to generate fragment 215 * shader in _mesa_meta_generate_mipmap(). 216 */ 217struct blit_shader { 218 const char *type; 219 const char *func; 220 const char *texcoords; 221 struct gl_shader_program *shader_prog; 222}; 223 224/** 225 * Table of all sampler types and shaders for accessing them. 226 */ 227struct blit_shader_table { 228 struct blit_shader sampler_1d; 229 struct blit_shader sampler_2d; 230 struct blit_shader sampler_3d; 231 struct blit_shader sampler_rect; 232 struct blit_shader sampler_cubemap; 233 struct blit_shader sampler_1d_array; 234 struct blit_shader sampler_2d_array; 235 struct blit_shader sampler_cubemap_array; 236}; 237 238/** 239 * Indices in the blit_state->msaa_shaders[] array 240 * 241 * Note that setup_glsl_msaa_blit_shader() assumes that the _INT enums are five 242 * more than the corresponding non-_INT versions and _UINT are five beyond that. 243 */ 244enum blit_msaa_shader { 245 BLIT_1X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE, 246 BLIT_2X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE, 247 BLIT_4X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE, 248 BLIT_8X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE, 249 BLIT_16X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE, 250 BLIT_1X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_INT, 251 BLIT_2X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_INT, 252 BLIT_4X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_INT, 253 BLIT_8X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_INT, 254 BLIT_16X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_INT, 255 BLIT_1X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_UINT, 256 BLIT_2X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_UINT, 257 BLIT_4X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_UINT, 258 BLIT_8X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_UINT, 259 BLIT_16X_MSAA_SHADER_2D_MULTISAMPLE_RESOLVE_UINT, 260 BLIT_MSAA_SHADER_2D_MULTISAMPLE_COPY, 261 BLIT_MSAA_SHADER_2D_MULTISAMPLE_COPY_INT, 262 BLIT_MSAA_SHADER_2D_MULTISAMPLE_COPY_UINT, 263 BLIT_MSAA_SHADER_2D_MULTISAMPLE_DEPTH_RESOLVE, 264 BLIT_MSAA_SHADER_2D_MULTISAMPLE_DEPTH_COPY, 265 BLIT_1X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE, 266 BLIT_2X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE, 267 BLIT_4X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE, 268 BLIT_8X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE, 269 BLIT_16X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE, 270 BLIT_1X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE_INT, 271 BLIT_2X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE_INT, 272 BLIT_4X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE_INT, 273 BLIT_8X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE_INT, 274 BLIT_16X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE_INT, 275 BLIT_1X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE_UINT, 276 BLIT_2X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE_UINT, 277 BLIT_4X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE_UINT, 278 BLIT_8X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE_UINT, 279 BLIT_16X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_RESOLVE_UINT, 280 BLIT_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_COPY, 281 BLIT_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_COPY_INT, 282 BLIT_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_COPY_UINT, 283 BLIT_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_DEPTH_RESOLVE, 284 BLIT_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_DEPTH_COPY, 285 BLIT_2X_MSAA_SHADER_2D_MULTISAMPLE_SCALED_RESOLVE, 286 BLIT_4X_MSAA_SHADER_2D_MULTISAMPLE_SCALED_RESOLVE, 287 BLIT_8X_MSAA_SHADER_2D_MULTISAMPLE_SCALED_RESOLVE, 288 BLIT_16X_MSAA_SHADER_2D_MULTISAMPLE_SCALED_RESOLVE, 289 BLIT_2X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_SCALED_RESOLVE, 290 BLIT_4X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_SCALED_RESOLVE, 291 BLIT_8X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_SCALED_RESOLVE, 292 BLIT_16X_MSAA_SHADER_2D_MULTISAMPLE_ARRAY_SCALED_RESOLVE, 293 BLIT_MSAA_SHADER_COUNT, 294}; 295 296/** 297 * State for glBlitFramebufer() 298 */ 299struct blit_state 300{ 301 GLuint VAO; 302 struct gl_buffer_object *buf_obj; 303 struct blit_shader_table shaders_with_depth; 304 struct blit_shader_table shaders_without_depth; 305 struct gl_shader_program *msaa_shaders[BLIT_MSAA_SHADER_COUNT]; 306 struct temp_texture depthTex; 307 bool no_ctsi_fallback; 308}; 309 310struct fb_tex_blit_state 311{ 312 GLint baseLevelSave, maxLevelSave; 313 struct gl_sampler_object *samp_obj; 314 struct gl_sampler_object *samp_obj_save; 315 GLuint stencilSamplingSave; 316 GLuint tempTex; 317}; 318 319 320/** 321 * State for glClear() 322 */ 323struct clear_state 324{ 325 GLuint VAO; 326 struct gl_buffer_object *buf_obj; 327 struct gl_shader_program *ShaderProg; 328 struct gl_shader_program *IntegerShaderProg; 329}; 330 331 332/** 333 * State for glCopyPixels() 334 */ 335struct copypix_state 336{ 337 GLuint VAO; 338 struct gl_buffer_object *buf_obj; 339}; 340 341 342/** 343 * State for glDrawPixels() 344 */ 345struct drawpix_state 346{ 347 GLuint VAO; 348 struct gl_buffer_object *buf_obj; 349 350 GLuint StencilFP; /**< Fragment program for drawing stencil images */ 351 GLuint DepthFP; /**< Fragment program for drawing depth images */ 352}; 353 354 355/** 356 * State for glBitmap() 357 */ 358struct bitmap_state 359{ 360 GLuint VAO; 361 struct gl_buffer_object *buf_obj; 362 struct temp_texture Tex; /**< separate texture from other meta ops */ 363}; 364 365/** 366 * State for _mesa_meta_generate_mipmap() 367 */ 368struct gen_mipmap_state 369{ 370 GLuint VAO; 371 struct gl_buffer_object *buf_obj; 372 struct gl_framebuffer *fb; 373 struct gl_sampler_object *samp_obj; 374 375 struct blit_shader_table shaders; 376}; 377 378/** 379 * One of the FBO states for decompress_state. There will be one for each 380 * required renderbuffer format. 381 */ 382struct decompress_fbo_state 383{ 384 struct gl_renderbuffer *rb; 385 struct gl_framebuffer *fb; 386 GLint Width, Height; 387}; 388 389/** 390 * State for texture decompression 391 */ 392struct decompress_state 393{ 394 GLuint VAO; 395 struct decompress_fbo_state byteFBO, floatFBO; 396 struct gl_buffer_object *buf_obj; 397 struct gl_sampler_object *samp_obj; 398 399 struct blit_shader_table shaders; 400}; 401 402/** 403 * State for glDrawTex() 404 */ 405struct drawtex_state 406{ 407 GLuint VAO; 408 struct gl_buffer_object *buf_obj; 409}; 410 411#define MAX_META_OPS_DEPTH 8 412/** 413 * All per-context meta state. 414 */ 415struct gl_meta_state 416{ 417 /** Stack of state saved during meta-ops */ 418 struct save_state Save[MAX_META_OPS_DEPTH]; 419 /** Save stack depth */ 420 GLuint SaveStackDepth; 421 422 struct temp_texture TempTex; 423 424 struct blit_state Blit; /**< For _mesa_meta_BlitFramebuffer() */ 425 struct clear_state Clear; /**< For _mesa_meta_Clear() */ 426 struct copypix_state CopyPix; /**< For _mesa_meta_CopyPixels() */ 427 struct drawpix_state DrawPix; /**< For _mesa_meta_DrawPixels() */ 428 struct bitmap_state Bitmap; /**< For _mesa_meta_Bitmap() */ 429 struct gen_mipmap_state Mipmap; /**< For _mesa_meta_GenerateMipmap() */ 430 struct decompress_state Decompress; /**< For texture decompression */ 431 struct drawtex_state DrawTex; /**< For _mesa_meta_DrawTex() */ 432}; 433 434struct vertex { 435 GLfloat x, y, z, tex[4]; 436 GLfloat r, g, b, a; 437}; 438 439extern void 440_mesa_meta_init(struct gl_context *ctx); 441 442extern void 443_mesa_meta_free(struct gl_context *ctx); 444 445extern void 446_mesa_meta_begin(struct gl_context *ctx, GLbitfield state); 447 448extern void 449_mesa_meta_end(struct gl_context *ctx); 450 451static inline bool 452_mesa_meta_in_progress(struct gl_context *ctx) 453{ 454 return ctx->Meta->SaveStackDepth != 0; 455} 456 457extern void 458_mesa_meta_fb_tex_blit_begin(struct gl_context *ctx, 459 struct fb_tex_blit_state *blit); 460 461extern void 462_mesa_meta_fb_tex_blit_end(struct gl_context *ctx, GLenum target, 463 struct fb_tex_blit_state *blit); 464 465extern GLboolean 466_mesa_meta_bind_rb_as_tex_image(struct gl_context *ctx, 467 struct gl_renderbuffer *rb, 468 GLuint *tex, 469 struct gl_texture_object **texObj, 470 GLenum *target); 471 472struct gl_sampler_object * 473_mesa_meta_setup_sampler(struct gl_context *ctx, 474 struct gl_texture_object *texObj, 475 GLenum target, GLenum filter, GLuint srcLevel); 476 477extern GLbitfield 478_mesa_meta_BlitFramebuffer(struct gl_context *ctx, 479 const struct gl_framebuffer *readFb, 480 const struct gl_framebuffer *drawFb, 481 GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, 482 GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, 483 GLbitfield mask, GLenum filter); 484 485extern void 486_mesa_meta_and_swrast_BlitFramebuffer(struct gl_context *ctx, 487 struct gl_framebuffer *readFb, 488 struct gl_framebuffer *drawFb, 489 GLint srcX0, GLint srcY0, 490 GLint srcX1, GLint srcY1, 491 GLint dstX0, GLint dstY0, 492 GLint dstX1, GLint dstY1, 493 GLbitfield mask, GLenum filter); 494 495extern void 496_mesa_meta_Clear(struct gl_context *ctx, GLbitfield buffers); 497 498extern void 499_mesa_meta_glsl_Clear(struct gl_context *ctx, GLbitfield buffers); 500 501extern void 502_mesa_meta_CopyPixels(struct gl_context *ctx, GLint srcx, GLint srcy, 503 GLsizei width, GLsizei height, 504 GLint dstx, GLint dsty, GLenum type); 505 506extern void 507_mesa_meta_DrawPixels(struct gl_context *ctx, 508 GLint x, GLint y, GLsizei width, GLsizei height, 509 GLenum format, GLenum type, 510 const struct gl_pixelstore_attrib *unpack, 511 const GLvoid *pixels); 512 513extern void 514_mesa_meta_Bitmap(struct gl_context *ctx, 515 GLint x, GLint y, GLsizei width, GLsizei height, 516 const struct gl_pixelstore_attrib *unpack, 517 const GLubyte *bitmap); 518 519extern void 520_mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target, 521 struct gl_texture_object *texObj); 522 523extern bool 524_mesa_meta_pbo_TexSubImage(struct gl_context *ctx, GLuint dims, 525 struct gl_texture_image *tex_image, 526 int xoffset, int yoffset, int zoffset, 527 int width, int height, int depth, 528 GLenum format, GLenum type, const void *pixels, 529 bool create_pbo, 530 const struct gl_pixelstore_attrib *packing); 531 532extern bool 533_mesa_meta_pbo_GetTexSubImage(struct gl_context *ctx, GLuint dims, 534 struct gl_texture_image *tex_image, 535 int xoffset, int yoffset, int zoffset, 536 int width, int height, int depth, 537 GLenum format, GLenum type, const void *pixels, 538 const struct gl_pixelstore_attrib *packing); 539 540extern void 541_mesa_meta_CopyTexSubImage(struct gl_context *ctx, GLuint dims, 542 struct gl_texture_image *texImage, 543 GLint xoffset, GLint yoffset, GLint slice, 544 struct gl_renderbuffer *rb, 545 GLint x, GLint y, 546 GLsizei width, GLsizei height); 547 548extern void 549_mesa_meta_ClearTexSubImage(struct gl_context *ctx, 550 struct gl_texture_image *texImage, 551 GLint xoffset, GLint yoffset, GLint zoffset, 552 GLsizei width, GLsizei height, GLsizei depth, 553 const GLvoid *clearValue); 554 555extern void 556_mesa_meta_GetTexSubImage(struct gl_context *ctx, 557 GLint xoffset, GLint yoffset, GLint zoffset, 558 GLsizei width, GLsizei height, GLsizei depth, 559 GLenum format, GLenum type, GLvoid *pixels, 560 struct gl_texture_image *texImage); 561 562extern void 563_mesa_meta_DrawTex(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z, 564 GLfloat width, GLfloat height); 565 566/* meta-internal functions */ 567void 568_mesa_meta_drawbuffers_from_bitfield(GLbitfield bits); 569 570void 571_mesa_meta_link_program_with_debug(struct gl_context *ctx, 572 struct gl_shader_program *sh_prog); 573 574void 575_mesa_meta_compile_and_link_program(struct gl_context *ctx, 576 const char *vs_source, 577 const char *fs_source, 578 const char *name, 579 struct gl_shader_program **sh_prog_ptr); 580 581extern void 582_mesa_meta_use_program(struct gl_context *ctx, 583 struct gl_shader_program *sh_prog); 584 585GLboolean 586_mesa_meta_alloc_texture(struct temp_texture *tex, 587 GLsizei width, GLsizei height, GLenum intFormat); 588 589void 590_mesa_meta_setup_texture_coords(GLenum faceTarget, 591 GLint slice, 592 GLint xoffset, 593 GLint yoffset, 594 GLint width, 595 GLint height, 596 GLint total_width, 597 GLint total_height, 598 GLint total_depth, 599 GLfloat coords0[4], 600 GLfloat coords1[4], 601 GLfloat coords2[4], 602 GLfloat coords3[4]); 603 604struct temp_texture * 605_mesa_meta_get_temp_texture(struct gl_context *ctx); 606 607struct temp_texture * 608_mesa_meta_get_temp_depth_texture(struct gl_context *ctx); 609 610void 611_mesa_meta_setup_vertex_objects(struct gl_context *ctx, 612 GLuint *VAO, struct gl_buffer_object **buf_obj, 613 bool use_generic_attributes, 614 unsigned vertex_size, unsigned texcoord_size, 615 unsigned color_size); 616 617void 618_mesa_meta_setup_ff_tnl_for_blit(struct gl_context *ctx, 619 GLuint *VAO, struct gl_buffer_object **buf_obj, 620 unsigned texcoord_size); 621 622void 623_mesa_meta_setup_drawpix_texture(struct gl_context *ctx, 624 struct temp_texture *tex, 625 GLboolean newTex, 626 GLsizei width, GLsizei height, 627 GLenum format, GLenum type, 628 const GLvoid *pixels); 629 630void 631_mesa_meta_setup_copypix_texture(struct gl_context *ctx, 632 struct temp_texture *tex, 633 GLint srcX, GLint srcY, 634 GLsizei width, GLsizei height, 635 GLenum intFormat, 636 GLenum filter); 637 638void 639_mesa_meta_setup_blit_shader(struct gl_context *ctx, 640 GLenum target, 641 bool do_depth, 642 struct blit_shader_table *table); 643 644void 645_mesa_meta_glsl_blit_cleanup(struct gl_context *ctx, struct blit_state *blit); 646 647void 648_mesa_meta_blit_shader_table_cleanup(struct gl_context *ctx, 649 struct blit_shader_table *table); 650 651void 652_mesa_meta_glsl_generate_mipmap_cleanup(struct gl_context *ctx, 653 struct gen_mipmap_state *mipmap); 654 655void 656_mesa_meta_framebuffer_texture_image(struct gl_context *ctx, 657 struct gl_framebuffer *fb, 658 GLenum attachment, 659 struct gl_texture_image *texImage, 660 GLuint layer); 661 662#endif /* META_H */ 663