lp_state_blend.c revision 635c37e118bbf51fc8c93a2c999281ee817a93e1
1946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca/************************************************************************** 2946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * 32d6b39f05edcd575b1e10d53f96a38bec848fa67José Fonseca * Copyright 2009 VMware, Inc. 4946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. 5946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * All Rights Reserved. 6946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * 7946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * Permission is hereby granted, free of charge, to any person obtaining a 8946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * copy of this software and associated documentation files (the 9946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * "Software"), to deal in the Software without restriction, including 10946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * without limitation the rights to use, copy, modify, merge, publish, 11946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * distribute, sub license, and/or sell copies of the Software, and to 12946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * permit persons to whom the Software is furnished to do so, subject to 13946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * the following conditions: 14946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * 15946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * The above copyright notice and this permission notice (including the 16946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * next paragraph) shall be included in all copies or substantial portions 17946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * of the Software. 18946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * 19946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 20946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 21946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 22946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 23946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 24946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 25946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 26946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * 27946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca **************************************************************************/ 28946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 292d6b39f05edcd575b1e10d53f96a38bec848fa67José Fonseca/** 302d6b39f05edcd575b1e10d53f96a38bec848fa67José Fonseca * @author Jose Fonseca <jfonseca@vmware.com> 312d6b39f05edcd575b1e10d53f96a38bec848fa67José Fonseca * @author Keith Whitwell <keith@tungstengraphics.com> 32946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca */ 33946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 34946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca#include "util/u_memory.h" 352101c2941c1ff3ae7f3f587e6e9921ed336ce17cJosé Fonseca#include "util/u_math.h" 362d6b39f05edcd575b1e10d53f96a38bec848fa67José Fonseca#include "util/u_debug_dump.h" 372d6b39f05edcd575b1e10d53f96a38bec848fa67José Fonseca#include "lp_screen.h" 38946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca#include "lp_context.h" 39946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca#include "lp_state.h" 40946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 41946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 42946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecavoid * 43946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecallvmpipe_create_blend_state(struct pipe_context *pipe, 4497b4681d7e1ccf40d1584436ade7c70fc1893e27José Fonseca const struct pipe_blend_state *blend) 45946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca{ 4697b4681d7e1ccf40d1584436ade7c70fc1893e27José Fonseca return mem_dup(blend, sizeof(*blend)); 47946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca} 48946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 49946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecavoid llvmpipe_bind_blend_state( struct pipe_context *pipe, 50946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca void *blend ) 51946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca{ 52946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca struct llvmpipe_context *llvmpipe = llvmpipe_context(pipe); 53946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 5497b4681d7e1ccf40d1584436ade7c70fc1893e27José Fonseca llvmpipe->blend = blend; 55946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 56c9a5930fe45a0a0299769bd2b672ca516d1bf39eJosé Fonseca llvmpipe->dirty |= LP_NEW_BLEND; 57946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca} 58946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 59946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecavoid llvmpipe_delete_blend_state(struct pipe_context *pipe, 6097b4681d7e1ccf40d1584436ade7c70fc1893e27José Fonseca void *blend) 61946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca{ 62946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca FREE( blend ); 63946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca} 64946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 65946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 66946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecavoid llvmpipe_set_blend_color( struct pipe_context *pipe, 67946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca const struct pipe_blend_color *blend_color ) 68946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca{ 69946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca struct llvmpipe_context *llvmpipe = llvmpipe_context(pipe); 702d6b39f05edcd575b1e10d53f96a38bec848fa67José Fonseca unsigned i, j; 71946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 72635c37e118bbf51fc8c93a2c999281ee817a93e1José Fonseca memcpy(&llvmpipe->blend_color, blend_color, sizeof *blend_color); 73946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 74635c37e118bbf51fc8c93a2c999281ee817a93e1José Fonseca if(!llvmpipe->jit_context.blend_color) 75635c37e118bbf51fc8c93a2c999281ee817a93e1José Fonseca llvmpipe->jit_context.blend_color = align_malloc(4 * 16, 16); 76635c37e118bbf51fc8c93a2c999281ee817a93e1José Fonseca for (i = 0; i < 4; ++i) { 77635c37e118bbf51fc8c93a2c999281ee817a93e1José Fonseca uint8_t c = float_to_ubyte(blend_color->color[i]); 78635c37e118bbf51fc8c93a2c999281ee817a93e1José Fonseca for (j = 0; j < 16; ++j) 79635c37e118bbf51fc8c93a2c999281ee817a93e1José Fonseca llvmpipe->jit_context.blend_color[i*4 + j] = c; 80635c37e118bbf51fc8c93a2c999281ee817a93e1José Fonseca } 81946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca} 82946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 83946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 84946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca/** XXX move someday? Or consolidate all these simple state setters 85946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca * into one file. 86946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca */ 87946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 88946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 89946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecavoid * 90946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecallvmpipe_create_depth_stencil_state(struct pipe_context *pipe, 91946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca const struct pipe_depth_stencil_alpha_state *depth_stencil) 92946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca{ 93946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca return mem_dup(depth_stencil, sizeof(*depth_stencil)); 94946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca} 95946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 96946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecavoid 97946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecallvmpipe_bind_depth_stencil_state(struct pipe_context *pipe, 98946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca void *depth_stencil) 99946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca{ 100946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca struct llvmpipe_context *llvmpipe = llvmpipe_context(pipe); 101946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 102946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca llvmpipe->depth_stencil = (const struct pipe_depth_stencil_alpha_state *)depth_stencil; 103946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 104635c37e118bbf51fc8c93a2c999281ee817a93e1José Fonseca if(llvmpipe->depth_stencil) 105635c37e118bbf51fc8c93a2c999281ee817a93e1José Fonseca llvmpipe->jit_context.alpha_ref_value = llvmpipe->depth_stencil->alpha.ref_value; 106635c37e118bbf51fc8c93a2c999281ee817a93e1José Fonseca 107c9a5930fe45a0a0299769bd2b672ca516d1bf39eJosé Fonseca llvmpipe->dirty |= LP_NEW_DEPTH_STENCIL_ALPHA; 108946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca} 109946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca 110946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecavoid 111946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonsecallvmpipe_delete_depth_stencil_state(struct pipe_context *pipe, void *depth) 112946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca{ 113946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca FREE( depth ); 114946f432a08112148d743eb9faf6b27bb8cc7fa76José Fonseca} 115