lp_bld_interp.h revision b4835ea03d64261da5a892f9590c9977b06920e8
1f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca/************************************************************************** 2f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * 3f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * Copyright 2009 VMware, Inc. 4f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * All Rights Reserved. 5f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * 6f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * Permission is hereby granted, free of charge, to any person obtaining a 7f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * copy of this software and associated documentation files (the 8f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * "Software"), to deal in the Software without restriction, including 9f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * without limitation the rights to use, copy, modify, merge, publish, 10f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * distribute, sub license, and/or sell copies of the Software, and to 11f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * permit persons to whom the Software is furnished to do so, subject to 12f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * the following conditions: 13f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * 14f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * The above copyright notice and this permission notice (including the 15f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * next paragraph) shall be included in all copies or substantial portions 16f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * of the Software. 17f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * 18f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 22f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * 26f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca **************************************************************************/ 27f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca 28f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca/** 29f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * @file 30f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * Position and shader input interpolation. 31f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * 32f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * Special attention is given to the interpolation of side by side quads. 33f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * Multiplications are made only for the first quad. Interpolation of 34f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * inputs for posterior quads are done exclusively with additions, and 35f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * perspective divide if necessary. 36f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * 37f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * @author Jose Fonseca <jfonseca@vmware.com> 38f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca */ 39f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca 40f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca#ifndef LP_BLD_INTERP_H 41f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca#define LP_BLD_INTERP_H 42f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca 43f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca 44f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca#include <llvm-c/Core.h> 45f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca 46f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca#include "tgsi/tgsi_exec.h" 47f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca 48f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca#include "lp_bld_type.h" 49f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca 50f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca 51f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonsecastruct tgsi_token; 52f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca 53f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca 54f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonsecastruct lp_build_interp_soa_context 55f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca{ 56f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca struct lp_build_context base; 57f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca 58f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca unsigned num_attribs; 59f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca unsigned mask[1 + PIPE_MAX_SHADER_INPUTS]; 60f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca unsigned mode[1 + PIPE_MAX_SHADER_INPUTS]; 61f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca 62f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca LLVMValueRef a0 [1 + PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS]; 63f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca LLVMValueRef dadx[1 + PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS]; 64f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca LLVMValueRef dady[1 + PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS]; 65f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca 66f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca int xstep; 67f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca int ystep; 68f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca 69f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca /* Attribute values before perspective divide */ 70f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca LLVMValueRef attribs_pre[1 + PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS]; 71f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca 72f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca LLVMValueRef attribs[1 + PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS]; 73f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca 74f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca /* 75f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca * Convenience pointers. Callers may access this one. 76f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca */ 77f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca const LLVMValueRef *pos; 78f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca const LLVMValueRef (*inputs)[NUM_CHANNELS]; 79f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca}; 80f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca 81f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca 82f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonsecavoid 83f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonsecalp_build_interp_soa_init(struct lp_build_interp_soa_context *bld, 84f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca const struct tgsi_token *tokens, 85f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca LLVMBuilderRef builder, 86b4835ea03d64261da5a892f9590c9977b06920e8José Fonseca struct lp_type type, 87f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca LLVMValueRef a0_ptr, 88f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca LLVMValueRef dadx_ptr, 89f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca LLVMValueRef dady_ptr, 90f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca LLVMValueRef x0, 91f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca LLVMValueRef y0, 92f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca int xstep, 93f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca int ystep); 94f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca 95f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonsecavoid 96f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonsecalp_build_interp_soa_update(struct lp_build_interp_soa_context *bld); 97f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca 98f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca 99f85c5f8621382ba1c8baa1582d87b46b388258d2José Fonseca#endif /* LP_BLD_INTERP_H */ 100