1 /************************************************************************** 2 * 3 * Copyright 2007 VMware, Inc. 4 * 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 8 * "Software"), to deal in the Software without restriction, including 9 * without limitation the rights to use, copy, modify, merge, publish, 10 * distribute, sub license, and/or sell copies of the Software, and to 11 * permit persons to whom the Software is furnished to do so, subject to 12 * the following conditions: 13 * 14 * The above copyright notice and this permission notice (including the 15 * next paragraph) shall be included in all copies or substantial portions 16 * of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21 * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 22 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25 * 26 **************************************************************************/ 27 28 #ifndef PIPE_CONTEXT_H 29 #define PIPE_CONTEXT_H 30 31 #include "p_compiler.h" 32 #include "p_format.h" 33 #include "p_video_enums.h" 34 #include "p_defines.h" 35 #include <stdio.h> 36 37 #ifdef __cplusplus 38 extern "C" { 39 #endif 40 41 42 struct pipe_blend_color; 43 struct pipe_blend_state; 44 struct pipe_blit_info; 45 struct pipe_box; 46 struct pipe_clip_state; 47 struct pipe_constant_buffer; 48 struct pipe_debug_callback; 49 struct pipe_depth_stencil_alpha_state; 50 struct pipe_device_reset_callback; 51 struct pipe_draw_info; 52 struct pipe_grid_info; 53 struct pipe_fence_handle; 54 struct pipe_framebuffer_state; 55 struct pipe_image_view; 56 struct pipe_index_buffer; 57 struct pipe_query; 58 struct pipe_poly_stipple; 59 struct pipe_rasterizer_state; 60 struct pipe_resolve_info; 61 struct pipe_resource; 62 struct pipe_sampler_state; 63 struct pipe_sampler_view; 64 struct pipe_scissor_state; 65 struct pipe_shader_buffer; 66 struct pipe_shader_state; 67 struct pipe_stencil_ref; 68 struct pipe_stream_output_target; 69 struct pipe_surface; 70 struct pipe_transfer; 71 struct pipe_vertex_buffer; 72 struct pipe_vertex_element; 73 struct pipe_video_buffer; 74 struct pipe_video_codec; 75 struct pipe_viewport_state; 76 struct pipe_compute_state; 77 union pipe_color_union; 78 union pipe_query_result; 79 80 /** 81 * Gallium rendering context. Basically: 82 * - state setting functions 83 * - VBO drawing functions 84 * - surface functions 85 */ 86 struct pipe_context { 87 struct pipe_screen *screen; 88 89 void *priv; /**< context private data (for DRI for example) */ 90 void *draw; /**< private, for draw module (temporary?) */ 91 92 void (*destroy)( struct pipe_context * ); 93 94 /** 95 * VBO drawing 96 */ 97 /*@{*/ 98 void (*draw_vbo)( struct pipe_context *pipe, 99 const struct pipe_draw_info *info ); 100 /*@}*/ 101 102 /** 103 * Predicate subsequent rendering on occlusion query result 104 * \param query the query predicate, or NULL if no predicate 105 * \param condition whether to skip on FALSE or TRUE query results 106 * \param mode one of PIPE_RENDER_COND_x 107 */ 108 void (*render_condition)( struct pipe_context *pipe, 109 struct pipe_query *query, 110 boolean condition, 111 uint mode ); 112 113 /** 114 * Query objects 115 */ 116 /*@{*/ 117 struct pipe_query *(*create_query)( struct pipe_context *pipe, 118 unsigned query_type, 119 unsigned index ); 120 121 /** 122 * Create a query object that queries all given query types simultaneously. 123 * 124 * This can only be used for those query types for which 125 * get_driver_query_info indicates that it must be used. Only one batch 126 * query object may be active at a time. 127 * 128 * There may be additional constraints on which query types can be used 129 * together, in particular those that are implied by 130 * get_driver_query_group_info. 131 * 132 * \param num_queries the number of query types 133 * \param query_types array of \p num_queries query types 134 * \return a query object, or NULL on error. 135 */ 136 struct pipe_query *(*create_batch_query)( struct pipe_context *pipe, 137 unsigned num_queries, 138 unsigned *query_types ); 139 140 void (*destroy_query)(struct pipe_context *pipe, 141 struct pipe_query *q); 142 143 boolean (*begin_query)(struct pipe_context *pipe, struct pipe_query *q); 144 bool (*end_query)(struct pipe_context *pipe, struct pipe_query *q); 145 146 /** 147 * Get results of a query. 148 * \param wait if true, this query will block until the result is ready 149 * \return TRUE if results are ready, FALSE otherwise 150 */ 151 boolean (*get_query_result)(struct pipe_context *pipe, 152 struct pipe_query *q, 153 boolean wait, 154 union pipe_query_result *result); 155 156 /** 157 * Get results of a query, storing into resource. Note that this may not 158 * be used with batch queries. 159 * 160 * \param wait if true, this query will block until the result is ready 161 * \param result_type the type of the value being stored: 162 * \param index for queries that return multiple pieces of data, which 163 * item of that data to store (e.g. for 164 * PIPE_QUERY_PIPELINE_STATISTICS). 165 * When the index is -1, instead of the value of the query 166 * the driver should instead write a 1 or 0 to the appropriate 167 * location with 1 meaning that the query result is available. 168 */ 169 void (*get_query_result_resource)(struct pipe_context *pipe, 170 struct pipe_query *q, 171 boolean wait, 172 enum pipe_query_value_type result_type, 173 int index, 174 struct pipe_resource *resource, 175 unsigned offset); 176 177 /** 178 * Set whether all current non-driver queries except TIME_ELAPSED are 179 * active or paused. 180 */ 181 void (*set_active_query_state)(struct pipe_context *pipe, boolean enable); 182 183 /*@}*/ 184 185 /** 186 * State functions (create/bind/destroy state objects) 187 */ 188 /*@{*/ 189 void * (*create_blend_state)(struct pipe_context *, 190 const struct pipe_blend_state *); 191 void (*bind_blend_state)(struct pipe_context *, void *); 192 void (*delete_blend_state)(struct pipe_context *, void *); 193 194 void * (*create_sampler_state)(struct pipe_context *, 195 const struct pipe_sampler_state *); 196 void (*bind_sampler_states)(struct pipe_context *, 197 enum pipe_shader_type shader, 198 unsigned start_slot, unsigned num_samplers, 199 void **samplers); 200 void (*delete_sampler_state)(struct pipe_context *, void *); 201 202 void * (*create_rasterizer_state)(struct pipe_context *, 203 const struct pipe_rasterizer_state *); 204 void (*bind_rasterizer_state)(struct pipe_context *, void *); 205 void (*delete_rasterizer_state)(struct pipe_context *, void *); 206 207 void * (*create_depth_stencil_alpha_state)(struct pipe_context *, 208 const struct pipe_depth_stencil_alpha_state *); 209 void (*bind_depth_stencil_alpha_state)(struct pipe_context *, void *); 210 void (*delete_depth_stencil_alpha_state)(struct pipe_context *, void *); 211 212 void * (*create_fs_state)(struct pipe_context *, 213 const struct pipe_shader_state *); 214 void (*bind_fs_state)(struct pipe_context *, void *); 215 void (*delete_fs_state)(struct pipe_context *, void *); 216 217 void * (*create_vs_state)(struct pipe_context *, 218 const struct pipe_shader_state *); 219 void (*bind_vs_state)(struct pipe_context *, void *); 220 void (*delete_vs_state)(struct pipe_context *, void *); 221 222 void * (*create_gs_state)(struct pipe_context *, 223 const struct pipe_shader_state *); 224 void (*bind_gs_state)(struct pipe_context *, void *); 225 void (*delete_gs_state)(struct pipe_context *, void *); 226 227 void * (*create_tcs_state)(struct pipe_context *, 228 const struct pipe_shader_state *); 229 void (*bind_tcs_state)(struct pipe_context *, void *); 230 void (*delete_tcs_state)(struct pipe_context *, void *); 231 232 void * (*create_tes_state)(struct pipe_context *, 233 const struct pipe_shader_state *); 234 void (*bind_tes_state)(struct pipe_context *, void *); 235 void (*delete_tes_state)(struct pipe_context *, void *); 236 237 void * (*create_vertex_elements_state)(struct pipe_context *, 238 unsigned num_elements, 239 const struct pipe_vertex_element *); 240 void (*bind_vertex_elements_state)(struct pipe_context *, void *); 241 void (*delete_vertex_elements_state)(struct pipe_context *, void *); 242 243 /*@}*/ 244 245 /** 246 * Parameter-like state (or properties) 247 */ 248 /*@{*/ 249 void (*set_blend_color)( struct pipe_context *, 250 const struct pipe_blend_color * ); 251 252 void (*set_stencil_ref)( struct pipe_context *, 253 const struct pipe_stencil_ref * ); 254 255 void (*set_sample_mask)( struct pipe_context *, 256 unsigned sample_mask ); 257 258 void (*set_min_samples)( struct pipe_context *, 259 unsigned min_samples ); 260 261 void (*set_clip_state)( struct pipe_context *, 262 const struct pipe_clip_state * ); 263 264 void (*set_constant_buffer)( struct pipe_context *, 265 uint shader, uint index, 266 const struct pipe_constant_buffer *buf ); 267 268 void (*set_framebuffer_state)( struct pipe_context *, 269 const struct pipe_framebuffer_state * ); 270 271 void (*set_polygon_stipple)( struct pipe_context *, 272 const struct pipe_poly_stipple * ); 273 274 void (*set_scissor_states)( struct pipe_context *, 275 unsigned start_slot, 276 unsigned num_scissors, 277 const struct pipe_scissor_state * ); 278 279 void (*set_window_rectangles)( struct pipe_context *, 280 boolean include, 281 unsigned num_rectangles, 282 const struct pipe_scissor_state * ); 283 284 void (*set_viewport_states)( struct pipe_context *, 285 unsigned start_slot, 286 unsigned num_viewports, 287 const struct pipe_viewport_state *); 288 289 void (*set_sampler_views)(struct pipe_context *, 290 enum pipe_shader_type shader, 291 unsigned start_slot, unsigned num_views, 292 struct pipe_sampler_view **); 293 294 void (*set_tess_state)(struct pipe_context *, 295 const float default_outer_level[4], 296 const float default_inner_level[2]); 297 298 /** 299 * Sets the debug callback. If the pointer is null, then no callback is 300 * set, otherwise a copy of the data should be made. 301 */ 302 void (*set_debug_callback)(struct pipe_context *, 303 const struct pipe_debug_callback *); 304 305 /** 306 * Bind an array of shader buffers that will be used by a shader. 307 * Any buffers that were previously bound to the specified range 308 * will be unbound. 309 * 310 * \param shader selects shader stage 311 * \param start_slot first buffer slot to bind. 312 * \param count number of consecutive buffers to bind. 313 * \param buffers array of pointers to the buffers to bind, it 314 * should contain at least \a count elements 315 * unless it's NULL, in which case no buffers will 316 * be bound. 317 */ 318 void (*set_shader_buffers)(struct pipe_context *, 319 enum pipe_shader_type shader, 320 unsigned start_slot, unsigned count, 321 const struct pipe_shader_buffer *buffers); 322 323 /** 324 * Bind an array of images that will be used by a shader. 325 * Any images that were previously bound to the specified range 326 * will be unbound. 327 * 328 * \param shader selects shader stage 329 * \param start_slot first image slot to bind. 330 * \param count number of consecutive images to bind. 331 * \param buffers array of the images to bind, it 332 * should contain at least \a count elements 333 * unless it's NULL, in which case no images will 334 * be bound. 335 */ 336 void (*set_shader_images)(struct pipe_context *, 337 enum pipe_shader_type shader, 338 unsigned start_slot, unsigned count, 339 const struct pipe_image_view *images); 340 341 void (*set_vertex_buffers)( struct pipe_context *, 342 unsigned start_slot, 343 unsigned num_buffers, 344 const struct pipe_vertex_buffer * ); 345 346 void (*set_index_buffer)( struct pipe_context *pipe, 347 const struct pipe_index_buffer * ); 348 349 /*@}*/ 350 351 /** 352 * Stream output functions. 353 */ 354 /*@{*/ 355 356 struct pipe_stream_output_target *(*create_stream_output_target)( 357 struct pipe_context *, 358 struct pipe_resource *, 359 unsigned buffer_offset, 360 unsigned buffer_size); 361 362 void (*stream_output_target_destroy)(struct pipe_context *, 363 struct pipe_stream_output_target *); 364 365 void (*set_stream_output_targets)(struct pipe_context *, 366 unsigned num_targets, 367 struct pipe_stream_output_target **targets, 368 const unsigned *offsets); 369 370 /*@}*/ 371 372 373 /** 374 * Resource functions for blit-like functionality 375 * 376 * If a driver supports multisampling, blit must implement color resolve. 377 */ 378 /*@{*/ 379 380 /** 381 * Copy a block of pixels from one resource to another. 382 * The resource must be of the same format. 383 * Resources with nr_samples > 1 are not allowed. 384 */ 385 void (*resource_copy_region)(struct pipe_context *pipe, 386 struct pipe_resource *dst, 387 unsigned dst_level, 388 unsigned dstx, unsigned dsty, unsigned dstz, 389 struct pipe_resource *src, 390 unsigned src_level, 391 const struct pipe_box *src_box); 392 393 /* Optimal hardware path for blitting pixels. 394 * Scaling, format conversion, up- and downsampling (resolve) are allowed. 395 */ 396 void (*blit)(struct pipe_context *pipe, 397 const struct pipe_blit_info *info); 398 399 /*@}*/ 400 401 /** 402 * Clear the specified set of currently bound buffers to specified values. 403 * The entire buffers are cleared (no scissor, no colormask, etc). 404 * 405 * \param buffers bitfield of PIPE_CLEAR_* values. 406 * \param color pointer to a union of fiu array for each of r, g, b, a. 407 * \param depth depth clear value in [0,1]. 408 * \param stencil stencil clear value 409 */ 410 void (*clear)(struct pipe_context *pipe, 411 unsigned buffers, 412 const union pipe_color_union *color, 413 double depth, 414 unsigned stencil); 415 416 /** 417 * Clear a color rendertarget surface. 418 * \param color pointer to an union of fiu array for each of r, g, b, a. 419 */ 420 void (*clear_render_target)(struct pipe_context *pipe, 421 struct pipe_surface *dst, 422 const union pipe_color_union *color, 423 unsigned dstx, unsigned dsty, 424 unsigned width, unsigned height, 425 bool render_condition_enabled); 426 427 /** 428 * Clear a depth-stencil surface. 429 * \param clear_flags bitfield of PIPE_CLEAR_DEPTH/STENCIL values. 430 * \param depth depth clear value in [0,1]. 431 * \param stencil stencil clear value 432 */ 433 void (*clear_depth_stencil)(struct pipe_context *pipe, 434 struct pipe_surface *dst, 435 unsigned clear_flags, 436 double depth, 437 unsigned stencil, 438 unsigned dstx, unsigned dsty, 439 unsigned width, unsigned height, 440 bool render_condition_enabled); 441 442 /** 443 * Clear the texture with the specified texel. Not guaranteed to be a 444 * renderable format. Data provided in the resource's format. 445 */ 446 void (*clear_texture)(struct pipe_context *pipe, 447 struct pipe_resource *res, 448 unsigned level, 449 const struct pipe_box *box, 450 const void *data); 451 452 /** 453 * Clear a buffer. Runs a memset over the specified region with the element 454 * value passed in through clear_value of size clear_value_size. 455 */ 456 void (*clear_buffer)(struct pipe_context *pipe, 457 struct pipe_resource *res, 458 unsigned offset, 459 unsigned size, 460 const void *clear_value, 461 int clear_value_size); 462 463 /** 464 * Flush draw commands 465 * 466 * NOTE: use screen->fence_reference() (or equivalent) to transfer 467 * new fence ref to **fence, to ensure that previous fence is unref'd 468 * 469 * \param fence if not NULL, an old fence to unref and transfer a 470 * new fence reference to 471 * \param flags bitfield of enum pipe_flush_flags values. 472 */ 473 void (*flush)(struct pipe_context *pipe, 474 struct pipe_fence_handle **fence, 475 unsigned flags); 476 477 /** 478 * Create a fence from a native sync fd. 479 * 480 * This is used for importing a foreign/external fence fd. 481 * 482 * \param fence if not NULL, an old fence to unref and transfer a 483 * new fence reference to 484 * \param fd native fence fd 485 */ 486 void (*create_fence_fd)(struct pipe_context *pipe, 487 struct pipe_fence_handle **fence, 488 int fd); 489 490 /** 491 * Insert commands to have GPU wait for fence to be signaled. 492 */ 493 void (*fence_server_sync)(struct pipe_context *pipe, 494 struct pipe_fence_handle *fence); 495 496 /** 497 * Create a view on a texture to be used by a shader stage. 498 */ 499 struct pipe_sampler_view * (*create_sampler_view)(struct pipe_context *ctx, 500 struct pipe_resource *texture, 501 const struct pipe_sampler_view *templat); 502 503 void (*sampler_view_destroy)(struct pipe_context *ctx, 504 struct pipe_sampler_view *view); 505 506 507 /** 508 * Get a surface which is a "view" into a resource, used by 509 * render target / depth stencil stages. 510 */ 511 struct pipe_surface *(*create_surface)(struct pipe_context *ctx, 512 struct pipe_resource *resource, 513 const struct pipe_surface *templat); 514 515 void (*surface_destroy)(struct pipe_context *ctx, 516 struct pipe_surface *); 517 518 519 /** 520 * Map a resource. 521 * 522 * Transfers are (by default) context-private and allow uploads to be 523 * interleaved with rendering. 524 * 525 * out_transfer will contain the transfer object that must be passed 526 * to all the other transfer functions. It also contains useful 527 * information (like texture strides). 528 */ 529 void *(*transfer_map)(struct pipe_context *, 530 struct pipe_resource *resource, 531 unsigned level, 532 unsigned usage, /* a combination of PIPE_TRANSFER_x */ 533 const struct pipe_box *, 534 struct pipe_transfer **out_transfer); 535 536 /* If transfer was created with WRITE|FLUSH_EXPLICIT, only the 537 * regions specified with this call are guaranteed to be written to 538 * the resource. 539 */ 540 void (*transfer_flush_region)( struct pipe_context *, 541 struct pipe_transfer *transfer, 542 const struct pipe_box *); 543 544 void (*transfer_unmap)(struct pipe_context *, 545 struct pipe_transfer *transfer); 546 547 /* One-shot transfer operation with data supplied in a user 548 * pointer. 549 */ 550 void (*buffer_subdata)(struct pipe_context *, 551 struct pipe_resource *, 552 unsigned usage, /* a combination of PIPE_TRANSFER_x */ 553 unsigned offset, 554 unsigned size, 555 const void *data); 556 557 void (*texture_subdata)(struct pipe_context *, 558 struct pipe_resource *, 559 unsigned level, 560 unsigned usage, /* a combination of PIPE_TRANSFER_x */ 561 const struct pipe_box *, 562 const void *data, 563 unsigned stride, 564 unsigned layer_stride); 565 566 /** 567 * Flush any pending framebuffer writes and invalidate texture caches. 568 */ 569 void (*texture_barrier)(struct pipe_context *, unsigned flags); 570 571 /** 572 * Flush caches according to flags. 573 */ 574 void (*memory_barrier)(struct pipe_context *, unsigned flags); 575 576 /** 577 * Creates a video codec for a specific video format/profile 578 */ 579 struct pipe_video_codec *(*create_video_codec)( struct pipe_context *context, 580 const struct pipe_video_codec *templat ); 581 582 /** 583 * Creates a video buffer as decoding target 584 */ 585 struct pipe_video_buffer *(*create_video_buffer)( struct pipe_context *context, 586 const struct pipe_video_buffer *templat ); 587 588 /** 589 * Compute kernel execution 590 */ 591 /*@{*/ 592 /** 593 * Define the compute program and parameters to be used by 594 * pipe_context::launch_grid. 595 */ 596 void *(*create_compute_state)(struct pipe_context *context, 597 const struct pipe_compute_state *); 598 void (*bind_compute_state)(struct pipe_context *, void *); 599 void (*delete_compute_state)(struct pipe_context *, void *); 600 601 /** 602 * Bind an array of shader resources that will be used by the 603 * compute program. Any resources that were previously bound to 604 * the specified range will be unbound after this call. 605 * 606 * \param start first resource to bind. 607 * \param count number of consecutive resources to bind. 608 * \param resources array of pointers to the resources to bind, it 609 * should contain at least \a count elements 610 * unless it's NULL, in which case no new 611 * resources will be bound. 612 */ 613 void (*set_compute_resources)(struct pipe_context *, 614 unsigned start, unsigned count, 615 struct pipe_surface **resources); 616 617 /** 618 * Bind an array of buffers to be mapped into the address space of 619 * the GLOBAL resource. Any buffers that were previously bound 620 * between [first, first + count - 1] are unbound after this call. 621 * 622 * \param first first buffer to map. 623 * \param count number of consecutive buffers to map. 624 * \param resources array of pointers to the buffers to map, it 625 * should contain at least \a count elements 626 * unless it's NULL, in which case no new 627 * resources will be bound. 628 * \param handles array of pointers to the memory locations that 629 * will be updated with the address each buffer 630 * will be mapped to. The base memory address of 631 * each of the buffers will be added to the value 632 * pointed to by its corresponding handle to form 633 * the final address argument. It should contain 634 * at least \a count elements, unless \a 635 * resources is NULL in which case \a handles 636 * should be NULL as well. 637 * 638 * Note that the driver isn't required to make any guarantees about 639 * the contents of the \a handles array being valid anytime except 640 * during the subsequent calls to pipe_context::launch_grid. This 641 * means that the only sensible location handles[i] may point to is 642 * somewhere within the INPUT buffer itself. This is so to 643 * accommodate implementations that lack virtual memory but 644 * nevertheless migrate buffers on the fly, leading to resource 645 * base addresses that change on each kernel invocation or are 646 * unknown to the pipe driver. 647 */ 648 void (*set_global_binding)(struct pipe_context *context, 649 unsigned first, unsigned count, 650 struct pipe_resource **resources, 651 uint32_t **handles); 652 653 /** 654 * Launch the compute kernel starting from instruction \a pc of the 655 * currently bound compute program. 656 */ 657 void (*launch_grid)(struct pipe_context *context, 658 const struct pipe_grid_info *info); 659 /*@}*/ 660 661 /** 662 * Get sample position for an individual sample point. 663 * 664 * \param sample_count - total number of samples 665 * \param sample_index - sample to get the position values for 666 * \param out_value - return value of 2 floats for x and y position for 667 * requested sample. 668 */ 669 void (*get_sample_position)(struct pipe_context *context, 670 unsigned sample_count, 671 unsigned sample_index, 672 float *out_value); 673 674 /** 675 * Query a timestamp in nanoseconds. This is completely equivalent to 676 * pipe_screen::get_timestamp() but takes a context handle for drivers 677 * that require a context. 678 */ 679 uint64_t (*get_timestamp)(struct pipe_context *); 680 681 /** 682 * Flush the resource cache, so that the resource can be used 683 * by an external client. Possible usage: 684 * - flushing a resource before presenting it on the screen 685 * - flushing a resource if some other process or device wants to use it 686 * This shouldn't be used to flush caches if the resource is only managed 687 * by a single pipe_screen and is not shared with another process. 688 * (i.e. you shouldn't use it to flush caches explicitly if you want to e.g. 689 * use the resource for texturing) 690 */ 691 void (*flush_resource)(struct pipe_context *ctx, 692 struct pipe_resource *resource); 693 694 /** 695 * Invalidate the contents of the resource. This is used to 696 * 697 * (1) implement EGL's semantic of undefined depth/stencil 698 * contenst after a swapbuffers. This allows a tiled renderer (for 699 * example) to not store the depth buffer. 700 * 701 * (2) implement GL's InvalidateBufferData. For backwards compatibility, 702 * you must only rely on the usability for this purpose when 703 * PIPE_CAP_INVALIDATE_BUFFER is enabled. 704 */ 705 void (*invalidate_resource)(struct pipe_context *ctx, 706 struct pipe_resource *resource); 707 708 /** 709 * Return information about unexpected device resets. 710 */ 711 enum pipe_reset_status (*get_device_reset_status)(struct pipe_context *ctx); 712 713 /** 714 * Sets the reset status callback. If the pointer is null, then no callback 715 * is set, otherwise a copy of the data should be made. 716 */ 717 void (*set_device_reset_callback)(struct pipe_context *ctx, 718 const struct pipe_device_reset_callback *cb); 719 720 /** 721 * Dump driver-specific debug information into a stream. This is 722 * used by debugging tools. 723 * 724 * \param ctx pipe context 725 * \param stream where the output should be written to 726 * \param flags a mask of PIPE_DUMP_* flags 727 */ 728 void (*dump_debug_state)(struct pipe_context *ctx, FILE *stream, 729 unsigned flags); 730 731 /** 732 * Emit string marker in cmdstream 733 */ 734 void (*emit_string_marker)(struct pipe_context *ctx, 735 const char *string, 736 int len); 737 738 /** 739 * Generate mipmap. 740 * \return TRUE if mipmap generation succeeds, FALSE otherwise 741 */ 742 boolean (*generate_mipmap)(struct pipe_context *ctx, 743 struct pipe_resource *resource, 744 enum pipe_format format, 745 unsigned base_level, 746 unsigned last_level, 747 unsigned first_layer, 748 unsigned last_layer); 749 }; 750 751 752 #ifdef __cplusplus 753 } 754 #endif 755 756 #endif /* PIPE_CONTEXT_H */ 757