u_blitter.h revision 36d66f8d4ad1e2b18bb28d0b08e98f968ad6137e
19e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project/************************************************************************** 204351a92ecc8429c999acbfc5dfe5aa8bee1d19dElliott Hughes * 39e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Copyright 2009 Marek Olšák <maraeo@gmail.com> 49e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * 59e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Permission is hereby granted, free of charge, to any person obtaining a 69e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * copy of this software and associated documentation files (the 79e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * "Software"), to deal in the Software without restriction, including 89e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * without limitation the rights to use, copy, modify, merge, publish, 99e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * distribute, sub license, and/or sell copies of the Software, and to 109e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * permit persons to whom the Software is furnished to do so, subject to 119e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * the following conditions: 1204351a92ecc8429c999acbfc5dfe5aa8bee1d19dElliott Hughes * 139e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * The above copyright notice and this permission notice (including the 149e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * next paragraph) shall be included in all copies or substantial portions 159e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * of the Software. 169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * 179e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 189e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 199e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 209e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 219e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 229e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 239e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 249e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * 259e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project **************************************************************************/ 269e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 279e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project#ifndef U_BLITTER_H 289e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project#define U_BLITTER_H 299e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 309e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project#include "util/u_framebuffer.h" 319e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project#include "util/u_inlines.h" 329e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project#include "util/u_memory.h" 339e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 349e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project#include "pipe/p_state.h" 359e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 369e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 379e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project#ifdef __cplusplus 389e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectextern "C" { 399e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project#endif 409e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 419e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectstruct pipe_context; 429e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 439e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectenum blitter_attrib_type { 449e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project UTIL_BLITTER_ATTRIB_NONE, 459e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project UTIL_BLITTER_ATTRIB_COLOR, 469e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project UTIL_BLITTER_ATTRIB_TEXCOORD 479e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project}; 489e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 499e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectstruct blitter_context 509e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{ 519e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /** 529e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Draw a rectangle. 539e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * 549e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * \param x1 An X coordinate of the top-left corner. 559e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * \param y1 A Y coordinate of the top-left corner. 569e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * \param x2 An X coordinate of the bottom-right corner. 579e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * \param y2 A Y coordinate of the bottom-right corner. 589e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * \param depth A depth which the rectangle is rendered at. 599e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * 609e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * \param type Semantics of the attributes "attrib". 619e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * If type is UTIL_BLITTER_ATTRIB_NONE, ignore them. 629e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * If type is UTIL_BLITTER_ATTRIB_COLOR, the attributes 639e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * make up a constant RGBA color, and should go 649e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * to the GENERIC0 varying slot of a fragment shader. 659e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * If type is UTIL_BLITTER_ATTRIB_TEXCOORD, {a1, a2} and 669e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * {a3, a4} specify top-left and bottom-right texture 6704351a92ecc8429c999acbfc5dfe5aa8bee1d19dElliott Hughes * coordinates of the rectangle, respectively, and should go 689e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * to the GENERIC0 varying slot of a fragment shader. 699e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * 709e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * \param attrib See type. 719e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * 729e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * \note A driver may optionally override this callback to implement 739e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * a specialized hardware path for drawing a rectangle, e.g. using 749e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * a rectangular point sprite. 759e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project */ 769e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project void (*draw_rectangle)(struct blitter_context *blitter, 779e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project unsigned x1, unsigned y1, unsigned x2, unsigned y2, 789e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project float depth, 799e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project enum blitter_attrib_type type, 809e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project const union pipe_color_union *color); 819e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 829e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /* Whether the blitter is running. */ 839e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project boolean running; 849e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 859e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /* Private members, really. */ 869e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project struct pipe_context *pipe; /**< pipe context */ 879e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 889e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project void *saved_blend_state; /**< blend state */ 899e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project void *saved_dsa_state; /**< depth stencil alpha state */ 909e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project void *saved_velem_state; /**< vertex elements state */ 919e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project void *saved_rs_state; /**< rasterizer state */ 929e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project void *saved_fs, *saved_vs, *saved_gs; /**< shaders */ 939e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 949e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project struct pipe_framebuffer_state saved_fb_state; /**< framebuffer state */ 959e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project struct pipe_stencil_ref saved_stencil_ref; /**< stencil ref */ 969e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project struct pipe_viewport_state saved_viewport; 979e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project struct pipe_clip_state saved_clip; 989e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 999e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project int saved_num_sampler_states; 1009e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project void *saved_sampler_states[PIPE_MAX_SAMPLERS]; 1019e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1029e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project int saved_num_sampler_views; 1039e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project struct pipe_sampler_view *saved_sampler_views[PIPE_MAX_SAMPLERS]; 1049e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1059e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project int saved_num_vertex_buffers; 1069e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project struct pipe_vertex_buffer saved_vertex_buffers[PIPE_MAX_ATTRIBS]; 1079e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1089e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project int saved_num_so_targets; 1099e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project struct pipe_stream_output_target *saved_so_targets[PIPE_MAX_SO_BUFFERS]; 1109e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project}; 1119e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1129e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project/** 1139e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Create a blitter context. 1149e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project */ 1159e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectstruct blitter_context *util_blitter_create(struct pipe_context *pipe); 1169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1179e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project/** 1189e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Destroy a blitter context. 1199e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project */ 1209e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvoid util_blitter_destroy(struct blitter_context *blitter); 1219e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1229e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project/** 1239e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Return the pipe context associated with a blitter context. 1249e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project */ 1259e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectstatic INLINE 1269e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectstruct pipe_context *util_blitter_get_pipe(struct blitter_context *blitter) 1279e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{ 1289e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return blitter->pipe; 1299e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 1309e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1319e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project/* 1329e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * These states must be saved before any of the following functions are called: 1339e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - vertex buffers 1349e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - vertex elements 1359e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - vertex shader 1369e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - geometry shader (if supported) 1379e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - stream output targets (if supported) 1389e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - rasterizer state 1399e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project */ 1409e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1419e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project/** 1429e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Clear a specified set of currently bound buffers to specified values. 1439e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * 1449e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * These states must be saved in the blitter in addition to the state objects 1459e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * already required to be saved: 1469e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - fragment shader 1479e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - depth stencil alpha state 1489e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - blend state 1499e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project */ 1509e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvoid util_blitter_clear(struct blitter_context *blitter, 1519e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project unsigned width, unsigned height, 1529e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project unsigned num_cbufs, 1539e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project unsigned clear_buffers, 1549e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project enum pipe_format cbuf_format, 1559e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project const union pipe_color_union *color, 1569e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project double depth, unsigned stencil); 1579e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1589e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvoid util_blitter_clear_depth_custom(struct blitter_context *blitter, 1599e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project unsigned width, unsigned height, 1609e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project double depth, void *custom_dsa); 1619e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1629e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project/** 163381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes * Copy a block of pixels from one surface to another. 164381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes * 165381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes * You can copy from any color format to any other color format provided 166381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes * the former can be sampled from and the latter can be rendered to. Otherwise, 1679e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * a software fallback path is taken and both surfaces must be of the same 1689e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * format. 1699e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * 1709e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * The same holds for depth-stencil formats with the exception that stencil 1719e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * cannot be copied unless you set ignore_stencil to FALSE. In that case, 1729e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * a software fallback path is taken and both surfaces must be of the same 1739e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * format. 1749e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * XXX implement hw-accel stencil copy using shader stencil export. 1759e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * 1769e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Use pipe_screen->is_format_supported to know your options. 1779e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * 1789e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * These states must be saved in the blitter in addition to the state objects 1799e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * already required to be saved: 1809e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - fragment shader 1819e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - depth stencil alpha state 1829e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - blend state 1839e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - fragment sampler states 1849e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - fragment sampler textures 1859e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - framebuffer state 1869e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project */ 1879e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvoid util_blitter_copy_texture(struct blitter_context *blitter, 1889e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project struct pipe_resource *dst, 1899e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project unsigned dstlevel, 1909e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project unsigned dstx, unsigned dsty, unsigned dstz, 1919e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project struct pipe_resource *src, 1929e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project unsigned srclevel, 1939e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project const struct pipe_box *srcbox, 1949e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project boolean ignore_stencil); 1959e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1969e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project/** 1979e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Same as util_blitter_copy_texture, but dst and src are pipe_surface and 1989e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * pipe_sampler_view, respectively. The mipmap level and dstz are part of 1999e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * the views. 2009e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * 2019e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Drivers can use this to change resource properties (like format, width, 2029e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * height) by changing how the views interpret them, instead of changing 2039e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * pipe_resource directly. This is usually needed to accelerate copying of 2049e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * compressed formats. 205381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes * 206381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes * src_width0 and src_height0 are sampler_view-private properties that 2079e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * override pipe_resource. The blitter uses them for computation of texture 2089e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * coordinates. The dst dimensions are supplied through pipe_surface::width 2099e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * and height. 2109e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * 2119e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * NOTE: There are no checks whether the blit is actually supported. 2129e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project */ 2139e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvoid util_blitter_copy_texture_view(struct blitter_context *blitter, 2149e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project struct pipe_surface *dst, 2159e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project unsigned dstx, unsigned dsty, 2169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project struct pipe_sampler_view *src, 2179e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project const struct pipe_box *srcbox, 2189e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project unsigned src_width0, unsigned src_height0); 2199e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2209e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project/** 2219e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Copy data from one buffer to another using the Stream Output functionality. 2229e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Some alignment is required, otherwise software fallback is used. 2239e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project */ 2249e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvoid util_blitter_copy_buffer(struct blitter_context *blitter, 2259e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project struct pipe_resource *dst, 2269e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project unsigned dstx, 2279e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project struct pipe_resource *src, 2289e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project unsigned srcx, 2299e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project unsigned size); 2309e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2319e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project/** 2329e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Clear a region of a (color) surface to a constant value. 2339e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * 2349e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * These states must be saved in the blitter in addition to the state objects 2359e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * already required to be saved: 2369e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - fragment shader 2379e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - depth stencil alpha state 2389e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - blend state 2399e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - framebuffer state 2409e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project */ 2419e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvoid util_blitter_clear_render_target(struct blitter_context *blitter, 2429e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project struct pipe_surface *dst, 2439e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project const union pipe_color_union *color, 2449e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project unsigned dstx, unsigned dsty, 2459e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project unsigned width, unsigned height); 2469e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2479e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project/** 2489e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * Clear a region of a depth-stencil surface, both stencil and depth 2499e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * or only one of them if this is a combined depth-stencil surface. 2509e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * 2519e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * These states must be saved in the blitter in addition to the state objects 2529e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * already required to be saved: 2539e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - fragment shader 2549e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - depth stencil alpha state 2559e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - blend state 2569e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * - framebuffer state 2579e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project */ 2589e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvoid util_blitter_clear_depth_stencil(struct blitter_context *blitter, 2599e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project struct pipe_surface *dst, 2609e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project unsigned clear_flags, 2619e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project double depth, 2629e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project unsigned stencil, 2639e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project unsigned dstx, unsigned dsty, 2649e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project unsigned width, unsigned height); 2659e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2669e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvoid util_blitter_custom_depth_stencil(struct blitter_context *blitter, 2679e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project struct pipe_surface *zsurf, 2689e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project struct pipe_surface *cbsurf, 2699e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project void *dsa_stage, float depth); 2709e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2719e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project/* The functions below should be used to save currently bound constant state 2729e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * objects inside a driver. The objects are automatically restored at the end 273381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes * of the util_blitter_{clear, copy_region, fill_region} functions and then 274381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes * forgotten. 2759e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * 2769e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project * States not listed here are not affected by util_blitter. */ 2779e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2789e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectstatic INLINE 2799e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvoid util_blitter_save_blend(struct blitter_context *blitter, 2809e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project void *state) 2819e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{ 2829e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project blitter->saved_blend_state = state; 2839e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 2849e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2859e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectstatic INLINE 2869e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvoid util_blitter_save_depth_stencil_alpha(struct blitter_context *blitter, 2879e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project void *state) 2889e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{ 2899e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project blitter->saved_dsa_state = state; 2909e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 2919e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2929e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectstatic INLINE 2939e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvoid util_blitter_save_vertex_elements(struct blitter_context *blitter, 2949e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project void *state) 2959e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{ 2969e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project blitter->saved_velem_state = state; 2979e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 2989e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2999e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectstatic INLINE 3009e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvoid util_blitter_save_stencil_ref(struct blitter_context *blitter, 3019e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project const struct pipe_stencil_ref *state) 3029e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{ 3039e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project blitter->saved_stencil_ref = *state; 3049e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 3059e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3069e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectstatic INLINE 3079e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvoid util_blitter_save_rasterizer(struct blitter_context *blitter, 3089e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project void *state) 3099e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{ 3109e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project blitter->saved_rs_state = state; 3119e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 3129e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3139e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectstatic INLINE 3149e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvoid util_blitter_save_fragment_shader(struct blitter_context *blitter, 3159e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project void *fs) 3169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{ 3179e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project blitter->saved_fs = fs; 3189e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 3199e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 3209e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectstatic INLINE 3219e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectvoid util_blitter_save_vertex_shader(struct blitter_context *blitter, 3229e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project void *vs) 3239e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{ 3249e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project blitter->saved_vs = vs; 325} 326 327static INLINE 328void util_blitter_save_geometry_shader(struct blitter_context *blitter, 329 void *gs) 330{ 331 blitter->saved_gs = gs; 332} 333 334static INLINE 335void util_blitter_save_framebuffer(struct blitter_context *blitter, 336 const struct pipe_framebuffer_state *state) 337{ 338 blitter->saved_fb_state.nr_cbufs = 0; /* It's ~0 now, meaning it's unsaved. */ 339 util_copy_framebuffer_state(&blitter->saved_fb_state, state); 340} 341 342static INLINE 343void util_blitter_save_viewport(struct blitter_context *blitter, 344 struct pipe_viewport_state *state) 345{ 346 blitter->saved_viewport = *state; 347} 348 349static INLINE 350void util_blitter_save_clip(struct blitter_context *blitter, 351 struct pipe_clip_state *state) 352{ 353 blitter->saved_clip = *state; 354} 355 356static INLINE 357void util_blitter_save_fragment_sampler_states( 358 struct blitter_context *blitter, 359 int num_sampler_states, 360 void **sampler_states) 361{ 362 assert(num_sampler_states <= Elements(blitter->saved_sampler_states)); 363 364 blitter->saved_num_sampler_states = num_sampler_states; 365 memcpy(blitter->saved_sampler_states, sampler_states, 366 num_sampler_states * sizeof(void *)); 367} 368 369static INLINE void 370util_blitter_save_fragment_sampler_views(struct blitter_context *blitter, 371 int num_views, 372 struct pipe_sampler_view **views) 373{ 374 unsigned i; 375 assert(num_views <= Elements(blitter->saved_sampler_views)); 376 377 blitter->saved_num_sampler_views = num_views; 378 for (i = 0; i < num_views; i++) 379 pipe_sampler_view_reference(&blitter->saved_sampler_views[i], 380 views[i]); 381} 382 383static INLINE void 384util_blitter_save_vertex_buffers(struct blitter_context *blitter, 385 int num_vertex_buffers, 386 struct pipe_vertex_buffer *vertex_buffers) 387{ 388 assert(num_vertex_buffers <= Elements(blitter->saved_vertex_buffers)); 389 390 blitter->saved_num_vertex_buffers = 0; 391 util_copy_vertex_buffers(blitter->saved_vertex_buffers, 392 (unsigned*)&blitter->saved_num_vertex_buffers, 393 vertex_buffers, 394 num_vertex_buffers); 395} 396 397static INLINE void 398util_blitter_save_so_targets(struct blitter_context *blitter, 399 int num_targets, 400 struct pipe_stream_output_target **targets) 401{ 402 unsigned i; 403 assert(num_targets <= Elements(blitter->saved_so_targets)); 404 405 blitter->saved_num_so_targets = num_targets; 406 for (i = 0; i < num_targets; i++) 407 pipe_so_target_reference(&blitter->saved_so_targets[i], 408 targets[i]); 409} 410 411#ifdef __cplusplus 412} 413#endif 414 415#endif 416