lp_state_blend.c revision 635c37e118bbf51fc8c93a2c999281ee817a93e1
1/************************************************************************** 2 * 3 * Copyright 2009 VMware, Inc. 4 * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. 5 * All Rights Reserved. 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a 8 * copy of this software and associated documentation files (the 9 * "Software"), to deal in the Software without restriction, including 10 * without limitation the rights to use, copy, modify, merge, publish, 11 * distribute, sub license, and/or sell copies of the Software, and to 12 * permit persons to whom the Software is furnished to do so, subject to 13 * the following conditions: 14 * 15 * The above copyright notice and this permission notice (including the 16 * next paragraph) shall be included in all copies or substantial portions 17 * of the Software. 18 * 19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 21 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 22 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 23 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 24 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 25 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 26 * 27 **************************************************************************/ 28 29/** 30 * @author Jose Fonseca <jfonseca@vmware.com> 31 * @author Keith Whitwell <keith@tungstengraphics.com> 32 */ 33 34#include "util/u_memory.h" 35#include "util/u_math.h" 36#include "util/u_debug_dump.h" 37#include "lp_screen.h" 38#include "lp_context.h" 39#include "lp_state.h" 40 41 42void * 43llvmpipe_create_blend_state(struct pipe_context *pipe, 44 const struct pipe_blend_state *blend) 45{ 46 return mem_dup(blend, sizeof(*blend)); 47} 48 49void llvmpipe_bind_blend_state( struct pipe_context *pipe, 50 void *blend ) 51{ 52 struct llvmpipe_context *llvmpipe = llvmpipe_context(pipe); 53 54 llvmpipe->blend = blend; 55 56 llvmpipe->dirty |= LP_NEW_BLEND; 57} 58 59void llvmpipe_delete_blend_state(struct pipe_context *pipe, 60 void *blend) 61{ 62 FREE( blend ); 63} 64 65 66void llvmpipe_set_blend_color( struct pipe_context *pipe, 67 const struct pipe_blend_color *blend_color ) 68{ 69 struct llvmpipe_context *llvmpipe = llvmpipe_context(pipe); 70 unsigned i, j; 71 72 memcpy(&llvmpipe->blend_color, blend_color, sizeof *blend_color); 73 74 if(!llvmpipe->jit_context.blend_color) 75 llvmpipe->jit_context.blend_color = align_malloc(4 * 16, 16); 76 for (i = 0; i < 4; ++i) { 77 uint8_t c = float_to_ubyte(blend_color->color[i]); 78 for (j = 0; j < 16; ++j) 79 llvmpipe->jit_context.blend_color[i*4 + j] = c; 80 } 81} 82 83 84/** XXX move someday? Or consolidate all these simple state setters 85 * into one file. 86 */ 87 88 89void * 90llvmpipe_create_depth_stencil_state(struct pipe_context *pipe, 91 const struct pipe_depth_stencil_alpha_state *depth_stencil) 92{ 93 return mem_dup(depth_stencil, sizeof(*depth_stencil)); 94} 95 96void 97llvmpipe_bind_depth_stencil_state(struct pipe_context *pipe, 98 void *depth_stencil) 99{ 100 struct llvmpipe_context *llvmpipe = llvmpipe_context(pipe); 101 102 llvmpipe->depth_stencil = (const struct pipe_depth_stencil_alpha_state *)depth_stencil; 103 104 if(llvmpipe->depth_stencil) 105 llvmpipe->jit_context.alpha_ref_value = llvmpipe->depth_stencil->alpha.ref_value; 106 107 llvmpipe->dirty |= LP_NEW_DEPTH_STENCIL_ALPHA; 108} 109 110void 111llvmpipe_delete_depth_stencil_state(struct pipe_context *pipe, void *depth) 112{ 113 FREE( depth ); 114} 115