1415b271b5100d64579690111bc8eb549866865a7Keith Whitwell/************************************************************************** 2415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * 357d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay * Copyright 2010, VMware Inc. 4415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * All Rights Reserved. 5415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * 6415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a 7415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * copy of this software and associated documentation files (the 8415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * "Software"), to deal in the Software without restriction, including 9415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * without limitation the rights to use, copy, modify, merge, publish, 10415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * distribute, sub license, and/or sell copies of the Software, and to 11415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * permit persons to whom the Software is furnished to do so, subject to 12415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * the following conditions: 13415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * 14415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * The above copyright notice and this permission notice (including the 15415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * next paragraph) shall be included in all copies or substantial portions 16415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * of the Software. 17415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * 18415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 2157d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 22415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * 26415b271b5100d64579690111bc8eb549866865a7Keith Whitwell **************************************************************************/ 27415b271b5100d64579690111bc8eb549866865a7Keith Whitwell 28415b271b5100d64579690111bc8eb549866865a7Keith Whitwell/* 29415b271b5100d64579690111bc8eb549866865a7Keith Whitwell * Binning code for points 30415b271b5100d64579690111bc8eb549866865a7Keith Whitwell */ 31415b271b5100d64579690111bc8eb549866865a7Keith Whitwell 32415b271b5100d64579690111bc8eb549866865a7Keith Whitwell#include "lp_setup_context.h" 3357d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay#include "util/u_math.h" 3457d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay#include "util/u_memory.h" 3557d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay#include "lp_perf.h" 3657d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay#include "lp_rast.h" 3757d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay#include "lp_state_fs.h" 385b4c43d98556c5a4806757513bcb196a724518c5Keith Whitwell#include "lp_state_setup.h" 3929ec116e8f21c65250f1083830b82ff59859496dHui Qi Tay#include "tgsi/tgsi_scan.h" 4057d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 4157d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay#define NUM_CHANNELS 4 4257d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 4357d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Taystruct point_info { 4457d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay /* x,y deltas */ 4557d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay int dy01, dy12; 4657d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay int dx01, dx12; 4757d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 4857d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay const float (*v0)[4]; 499bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell 509bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell float (*a0)[4]; 519bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell float (*dadx)[4]; 529bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell float (*dady)[4]; 5357d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay}; 5457d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 5557d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 5657d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay/** 5757d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay * Compute a0 for a constant-valued coefficient (GL_FLAT shading). 5857d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay */ 59924c18da95bbc62492f8e54bd8273a4981a919dcBrian Paulstatic void 60924c18da95bbc62492f8e54bd8273a4981a919dcBrian Paulconstant_coef(struct lp_setup_context *setup, 619bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell struct point_info *info, 62924c18da95bbc62492f8e54bd8273a4981a919dcBrian Paul unsigned slot, 63924c18da95bbc62492f8e54bd8273a4981a919dcBrian Paul const float value, 64924c18da95bbc62492f8e54bd8273a4981a919dcBrian Paul unsigned i) 6557d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay{ 669bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->a0[slot][i] = value; 679bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->dadx[slot][i] = 0.0f; 689bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->dady[slot][i] = 0.0f; 6957d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay} 7057d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 71924c18da95bbc62492f8e54bd8273a4981a919dcBrian Paul 72e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonsecastatic void 73e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonsecapoint_persp_coeff(struct lp_setup_context *setup, 74e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca const struct point_info *info, 75e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca unsigned slot, 76e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca unsigned i) 7729ec116e8f21c65250f1083830b82ff59859496dHui Qi Tay{ 78e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca /* 79e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca * Fragment shader expects pre-multiplied w for LP_INTERP_PERSPECTIVE. A 80e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca * better stratergy would be to take the primitive in consideration when 81e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca * generating the fragment shader key, and therefore avoid the per-fragment 82e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca * perspective divide. 83e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca */ 84e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca 85e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca float w0 = info->v0[0][3]; 86e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca 87e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca assert(i < 4); 88e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca 899bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->a0[slot][i] = info->v0[slot][i]*w0; 909bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->dadx[slot][i] = 0.0f; 919bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->dady[slot][i] = 0.0f; 92e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca} 93e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca 94e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca 95516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul/** 96516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul * Setup automatic texcoord coefficients (for sprite rendering). 97516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul * \param slot the vertex attribute slot to setup 98516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul * \param i the attribute channel in [0,3] 99516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul * \param sprite_coord_origin one of PIPE_SPRITE_COORD_x 100e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca * \param perspective does the shader expects pre-multiplied w, i.e., 101e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca * LP_INTERP_PERSPECTIVE is specified in the shader key 102516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul */ 103924c18da95bbc62492f8e54bd8273a4981a919dcBrian Paulstatic void 104516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paultexcoord_coef(struct lp_setup_context *setup, 105516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul const struct point_info *info, 106516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul unsigned slot, 107516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul unsigned i, 108516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul unsigned sprite_coord_origin, 109e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca boolean perspective) 11029ec116e8f21c65250f1083830b82ff59859496dHui Qi Tay{ 11106472ad7e835813ef7c9bf8a5cd8b62a25fa9cc3José Fonseca float w0 = info->v0[0][3]; 11206472ad7e835813ef7c9bf8a5cd8b62a25fa9cc3José Fonseca 113516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul assert(i < 4); 114516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul 115924c18da95bbc62492f8e54bd8273a4981a919dcBrian Paul if (i == 0) { 116924c18da95bbc62492f8e54bd8273a4981a919dcBrian Paul float dadx = FIXED_ONE / (float)info->dx12; 11729ec116e8f21c65250f1083830b82ff59859496dHui Qi Tay float dady = 0.0f; 118516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul float x0 = info->v0[0][0] - setup->pixel_offset; 119516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul float y0 = info->v0[0][1] - setup->pixel_offset; 12029ec116e8f21c65250f1083830b82ff59859496dHui Qi Tay 1219bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->dadx[slot][0] = dadx; 1229bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->dady[slot][0] = dady; 1239bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->a0[slot][0] = 0.5 - (dadx * x0 + dady * y0); 124516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul 125e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca if (perspective) { 1269bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->dadx[slot][0] *= w0; 1279bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->dady[slot][0] *= w0; 1289bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->a0[slot][0] *= w0; 129516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul } 13029ec116e8f21c65250f1083830b82ff59859496dHui Qi Tay } 13129ec116e8f21c65250f1083830b82ff59859496dHui Qi Tay else if (i == 1) { 13261fcd9aaa2bf91eb400eeb4df2ab2c7e48b3bb6cBrian Paul float dadx = 0.0f; 13361fcd9aaa2bf91eb400eeb4df2ab2c7e48b3bb6cBrian Paul float dady = FIXED_ONE / (float)info->dx12; 134516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul float x0 = info->v0[0][0] - setup->pixel_offset; 135516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul float y0 = info->v0[0][1] - setup->pixel_offset; 13629ec116e8f21c65250f1083830b82ff59859496dHui Qi Tay 13761fcd9aaa2bf91eb400eeb4df2ab2c7e48b3bb6cBrian Paul if (sprite_coord_origin == PIPE_SPRITE_COORD_LOWER_LEFT) { 13861fcd9aaa2bf91eb400eeb4df2ab2c7e48b3bb6cBrian Paul dady = -dady; 13961fcd9aaa2bf91eb400eeb4df2ab2c7e48b3bb6cBrian Paul } 140924c18da95bbc62492f8e54bd8273a4981a919dcBrian Paul 1419bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->dadx[slot][1] = dadx; 1429bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->dady[slot][1] = dady; 1439bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->a0[slot][1] = 0.5 - (dadx * x0 + dady * y0); 144516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul 145e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca if (perspective) { 1469bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->dadx[slot][1] *= w0; 1479bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->dady[slot][1] *= w0; 1489bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->a0[slot][1] *= w0; 149516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul } 15029ec116e8f21c65250f1083830b82ff59859496dHui Qi Tay } 15129ec116e8f21c65250f1083830b82ff59859496dHui Qi Tay else if (i == 2) { 1529bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->a0[slot][2] = 0.0f; 1539bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->dadx[slot][2] = 0.0f; 1549bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->dady[slot][2] = 0.0f; 15529ec116e8f21c65250f1083830b82ff59859496dHui Qi Tay } 156516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul else { 1579bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->a0[slot][3] = perspective ? w0 : 1.0f; 1589bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->dadx[slot][3] = 0.0f; 1599bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->dady[slot][3] = 0.0f; 16029ec116e8f21c65250f1083830b82ff59859496dHui Qi Tay } 16129ec116e8f21c65250f1083830b82ff59859496dHui Qi Tay} 16229ec116e8f21c65250f1083830b82ff59859496dHui Qi Tay 16329ec116e8f21c65250f1083830b82ff59859496dHui Qi Tay 16457d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay/** 16557d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay * Special coefficient setup for gl_FragCoord. 16657d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay * X and Y are trivial 16757d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay * Z and W are copied from position_coef which should have already been computed. 16857d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay * We could do a bit less work if we'd examine gl_FragCoord's swizzle mask. 16957d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay */ 17057d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Taystatic void 17157d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Taysetup_point_fragcoord_coef(struct lp_setup_context *setup, 1729bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell struct point_info *info, 17357d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay unsigned slot, 17457d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay unsigned usage_mask) 17557d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay{ 17657d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay /*X*/ 17757d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay if (usage_mask & TGSI_WRITEMASK_X) { 1789bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->a0[slot][0] = 0.0; 1799bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->dadx[slot][0] = 1.0; 1809bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->dady[slot][0] = 0.0; 18157d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay } 18257d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 18357d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay /*Y*/ 18457d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay if (usage_mask & TGSI_WRITEMASK_Y) { 1859bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->a0[slot][1] = 0.0; 1869bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->dadx[slot][1] = 0.0; 1879bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info->dady[slot][1] = 1.0; 18857d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay } 18957d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 19057d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay /*Z*/ 19157d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay if (usage_mask & TGSI_WRITEMASK_Z) { 1929bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell constant_coef(setup, info, slot, info->v0[0][2], 2); 19357d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay } 19457d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 19557d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay /*W*/ 19657d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay if (usage_mask & TGSI_WRITEMASK_W) { 1979bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell constant_coef(setup, info, slot, info->v0[0][3], 3); 19857d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay } 19957d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay} 20057d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 201924c18da95bbc62492f8e54bd8273a4981a919dcBrian Paul 20257d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay/** 20357d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay * Compute the point->coef[] array dadx, dady, a0 values. 20457d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay */ 20557d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Taystatic void 20657d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Taysetup_point_coefficients( struct lp_setup_context *setup, 2079bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell struct point_info *info) 20857d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay{ 2095b4c43d98556c5a4806757513bcb196a724518c5Keith Whitwell const struct lp_setup_variant_key *key = &setup->setup.variant->key; 210b7a5eac1f3723a369885bad369a04c456bdf1565Brian Paul const struct lp_fragment_shader *shader = setup->fs.current.variant->shader; 21157d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay unsigned fragcoord_usage_mask = TGSI_WRITEMASK_XYZ; 21257d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay unsigned slot; 21357d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 21457d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay /* setup interpolation for all the remaining attributes: 21557d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay */ 2165b4c43d98556c5a4806757513bcb196a724518c5Keith Whitwell for (slot = 0; slot < key->num_inputs; slot++) { 2175b4c43d98556c5a4806757513bcb196a724518c5Keith Whitwell unsigned vert_attr = key->inputs[slot].src_index; 2185b4c43d98556c5a4806757513bcb196a724518c5Keith Whitwell unsigned usage_mask = key->inputs[slot].usage_mask; 2190072acd447dc6be652e63752e50215c3105322c8Keith Whitwell enum lp_interp interp = key->inputs[slot].interp; 220e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca boolean perspective = !!(interp == LP_INTERP_PERSPECTIVE); 22157d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay unsigned i; 222e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca 223e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca if (perspective & usage_mask) { 224e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca fragcoord_usage_mask |= TGSI_WRITEMASK_W; 225e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca } 22657d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 227e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca switch (interp) { 22857d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay case LP_INTERP_POSITION: 22957d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay /* 23057d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay * The generated pixel interpolators will pick up the coeffs from 23157d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay * slot 0, so all need to ensure that the usage mask is covers all 23257d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay * usages. 23357d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay */ 23457d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay fragcoord_usage_mask |= usage_mask; 23557d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay break; 23657d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 237b7a5eac1f3723a369885bad369a04c456bdf1565Brian Paul case LP_INTERP_LINEAR: 238b7a5eac1f3723a369885bad369a04c456bdf1565Brian Paul /* Sprite tex coords may use linear interpolation someday */ 239b7a5eac1f3723a369885bad369a04c456bdf1565Brian Paul /* fall-through */ 24029ec116e8f21c65250f1083830b82ff59859496dHui Qi Tay case LP_INTERP_PERSPECTIVE: 241b7a5eac1f3723a369885bad369a04c456bdf1565Brian Paul /* check if the sprite coord flag is set for this attribute. 242516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul * If so, set it up so it up so x and y vary from 0 to 1. 243b7a5eac1f3723a369885bad369a04c456bdf1565Brian Paul */ 244986cb9d5cf60bc11c7facc19017b5432b17240f7José Fonseca if (shader->info.base.input_semantic_name[slot] == TGSI_SEMANTIC_GENERIC) { 245986cb9d5cf60bc11c7facc19017b5432b17240f7José Fonseca unsigned semantic_index = shader->info.base.input_semantic_index[slot]; 2461662c317032cf280701d7e55b028b7f0dc8afc65Brian Paul /* Note that sprite_coord enable is a bitfield of 2471662c317032cf280701d7e55b028b7f0dc8afc65Brian Paul * PIPE_MAX_SHADER_OUTPUTS bits. 2481662c317032cf280701d7e55b028b7f0dc8afc65Brian Paul */ 249e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca if (semantic_index < PIPE_MAX_SHADER_OUTPUTS && 250e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca (setup->sprite_coord_enable & (1 << semantic_index))) { 251e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca for (i = 0; i < NUM_CHANNELS; i++) { 252e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca if (usage_mask & (1 << i)) { 2539bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell texcoord_coef(setup, info, slot + 1, i, 254516ac2bd50ad1e71bd2a359d247532d9f18bcf99Brian Paul setup->sprite_coord_origin, 255e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca perspective); 256e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca } 257e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca } 258e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca break; 25929ec116e8f21c65250f1083830b82ff59859496dHui Qi Tay } 26029ec116e8f21c65250f1083830b82ff59859496dHui Qi Tay } 261e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca /* fall-through */ 26260a45b03c389f708c513bb2b70c5973175f01068Keith Whitwell case LP_INTERP_CONSTANT: 26357d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay for (i = 0; i < NUM_CHANNELS; i++) { 264e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca if (usage_mask & (1 << i)) { 265e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca if (perspective) { 2669bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell point_persp_coeff(setup, info, slot+1, i); 267e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca } 268e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca else { 2699bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell constant_coef(setup, info, slot+1, info->v0[vert_attr][i], i); 270e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca } 271e74955eba3fc22fcf6e9111a4e5bbc095d34d357José Fonseca } 27257d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay } 27360a45b03c389f708c513bb2b70c5973175f01068Keith Whitwell break; 27460a45b03c389f708c513bb2b70c5973175f01068Keith Whitwell 27560a45b03c389f708c513bb2b70c5973175f01068Keith Whitwell case LP_INTERP_FACING: 27660a45b03c389f708c513bb2b70c5973175f01068Keith Whitwell for (i = 0; i < NUM_CHANNELS; i++) 27760a45b03c389f708c513bb2b70c5973175f01068Keith Whitwell if (usage_mask & (1 << i)) 2789bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell constant_coef(setup, info, slot+1, 1.0, i); 27960a45b03c389f708c513bb2b70c5973175f01068Keith Whitwell break; 28060a45b03c389f708c513bb2b70c5973175f01068Keith Whitwell 28160a45b03c389f708c513bb2b70c5973175f01068Keith Whitwell default: 28260a45b03c389f708c513bb2b70c5973175f01068Keith Whitwell assert(0); 28360a45b03c389f708c513bb2b70c5973175f01068Keith Whitwell break; 28457d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay } 28557d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay } 28657d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 28757d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay /* The internal position input is in slot zero: 28857d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay */ 2899bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell setup_point_fragcoord_coef(setup, info, 0, 29057d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay fragcoord_usage_mask); 29157d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay} 29257d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 293924c18da95bbc62492f8e54bd8273a4981a919dcBrian Paul 29457d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Taystatic INLINE int 29557d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Taysubpixel_snap(float a) 29657d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay{ 29757d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay return util_iround(FIXED_ONE * a); 29857d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay} 29957d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 300415b271b5100d64579690111bc8eb549866865a7Keith Whitwell 3016419ecd02ce43a2614822e228f306d4db589f317Keith Whitwellstatic boolean 3026419ecd02ce43a2614822e228f306d4db589f317Keith Whitwelltry_setup_point( struct lp_setup_context *setup, 3036419ecd02ce43a2614822e228f306d4db589f317Keith Whitwell const float (*v0)[4] ) 304415b271b5100d64579690111bc8eb549866865a7Keith Whitwell{ 30557d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay /* x/y positions in fixed point */ 3065b4c43d98556c5a4806757513bcb196a724518c5Keith Whitwell const struct lp_setup_variant_key *key = &setup->setup.variant->key; 30757d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay const int sizeAttr = setup->psize; 30857d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay const float size 30929ec116e8f21c65250f1083830b82ff59859496dHui Qi Tay = (setup->point_size_per_vertex && sizeAttr > 0) ? v0[sizeAttr][0] 31057d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay : setup->point_size; 3112cd72dd4590b4510931854ed776c72563603f7ffHui Qi Tay 3122cd72dd4590b4510931854ed776c72563603f7ffHui Qi Tay /* Point size as fixed point integer, remove rounding errors 3132cd72dd4590b4510931854ed776c72563603f7ffHui Qi Tay * and gives minimum width for very small points 3142cd72dd4590b4510931854ed776c72563603f7ffHui Qi Tay */ 3152cd72dd4590b4510931854ed776c72563603f7ffHui Qi Tay int fixed_width = MAX2(FIXED_ONE, 3162cd72dd4590b4510931854ed776c72563603f7ffHui Qi Tay (subpixel_snap(size) + FIXED_ONE/2 - 1) & ~(FIXED_ONE-1)); 3172cd72dd4590b4510931854ed776c72563603f7ffHui Qi Tay 3182cd72dd4590b4510931854ed776c72563603f7ffHui Qi Tay const int x0 = subpixel_snap(v0[0][0] - setup->pixel_offset) - fixed_width/2; 3192cd72dd4590b4510931854ed776c72563603f7ffHui Qi Tay const int y0 = subpixel_snap(v0[0][1] - setup->pixel_offset) - fixed_width/2; 3202cd72dd4590b4510931854ed776c72563603f7ffHui Qi Tay 3219f6e8e1d6b8696a3ee96cba01b2466ba7a1a8ef6Keith Whitwell struct lp_scene *scene = setup->scene; 32257d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay struct lp_rast_triangle *point; 32357d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay unsigned bytes; 32457d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay struct u_rect bbox; 32557d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay unsigned nr_planes = 4; 32657d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay struct point_info info; 32757d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 32857d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 32957d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay /* Bounding rectangle (in pixels) */ 33057d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay { 33157d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay /* Yes this is necessary to accurately calculate bounding boxes 33257d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay * with the two fill-conventions we support. GL (normally) ends 33357d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay * up needing a bottom-left fill convention, which requires 33457d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay * slightly different rounding. 33557d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay */ 33657d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay int adj = (setup->pixel_offset != 0) ? 1 : 0; 33757d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 3382cd72dd4590b4510931854ed776c72563603f7ffHui Qi Tay bbox.x0 = (x0 + (FIXED_ONE-1) + adj) >> FIXED_ORDER; 3392cd72dd4590b4510931854ed776c72563603f7ffHui Qi Tay bbox.x1 = (x0 + fixed_width + (FIXED_ONE-1) + adj) >> FIXED_ORDER; 3402cd72dd4590b4510931854ed776c72563603f7ffHui Qi Tay bbox.y0 = (y0 + (FIXED_ONE-1)) >> FIXED_ORDER; 3412cd72dd4590b4510931854ed776c72563603f7ffHui Qi Tay bbox.y1 = (y0 + fixed_width + (FIXED_ONE-1)) >> FIXED_ORDER; 34257d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 34357d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay /* Inclusive coordinates: 34457d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay */ 34557d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay bbox.x1--; 34657d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay bbox.y1--; 34757d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay } 34857d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 34957d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay if (!u_rect_test_intersection(&setup->draw_region, &bbox)) { 35057d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay if (0) debug_printf("offscreen\n"); 35157d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay LP_COUNT(nr_culled_tris); 3526419ecd02ce43a2614822e228f306d4db589f317Keith Whitwell return TRUE; 35357d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay } 35457d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 35557d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay u_rect_find_intersection(&setup->draw_region, &bbox); 35657d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 35757d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay point = lp_setup_alloc_triangle(scene, 3585b4c43d98556c5a4806757513bcb196a724518c5Keith Whitwell key->num_inputs, 35957d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay nr_planes, 36057d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay &bytes); 36157d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay if (!point) 3626419ecd02ce43a2614822e228f306d4db589f317Keith Whitwell return FALSE; 36357d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 36457d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay#ifdef DEBUG 36557d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay point->v[0][0] = v0[0][0]; 36657d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay point->v[0][1] = v0[0][1]; 36757d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay#endif 36857d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 36957d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay info.v0 = v0; 3702cd72dd4590b4510931854ed776c72563603f7ffHui Qi Tay info.dx01 = 0; 3712cd72dd4590b4510931854ed776c72563603f7ffHui Qi Tay info.dx12 = fixed_width; 3722cd72dd4590b4510931854ed776c72563603f7ffHui Qi Tay info.dy01 = fixed_width; 3732cd72dd4590b4510931854ed776c72563603f7ffHui Qi Tay info.dy12 = 0; 3749bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info.a0 = GET_A0(&point->inputs); 3759bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info.dadx = GET_DADX(&point->inputs); 3769bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell info.dady = GET_DADY(&point->inputs); 37757d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 37857d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay /* Setup parameter interpolants: 37957d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay */ 3809bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell setup_point_coefficients(setup, &info); 38157d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 3820a1c9001037a13b69b157994e7983aa3dee158d3Keith Whitwell point->inputs.frontfacing = TRUE; 3839f6e8e1d6b8696a3ee96cba01b2466ba7a1a8ef6Keith Whitwell point->inputs.disable = FALSE; 3849f6e8e1d6b8696a3ee96cba01b2466ba7a1a8ef6Keith Whitwell point->inputs.opaque = FALSE; 38557d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 38657d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay { 3879bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell struct lp_rast_plane *plane = GET_PLANES(point); 3889bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell 3899bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell plane[0].dcdx = -1; 3909bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell plane[0].dcdy = 0; 3919bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell plane[0].c = 1-bbox.x0; 3929bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell plane[0].eo = 1; 3939bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell 3949bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell plane[1].dcdx = 1; 3959bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell plane[1].dcdy = 0; 3969bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell plane[1].c = bbox.x1+1; 3979bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell plane[1].eo = 0; 3989bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell 3999bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell plane[2].dcdx = 0; 4009bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell plane[2].dcdy = 1; 4019bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell plane[2].c = 1-bbox.y0; 4029bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell plane[2].eo = 1; 4039bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell 4049bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell plane[3].dcdx = 0; 4059bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell plane[3].dcdy = -1; 4069bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell plane[3].c = bbox.y1+1; 4079bf8a55c4b29d55320fc2e7875ecf0e9ca164ee8Keith Whitwell plane[3].eo = 0; 40857d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay } 40957d84d9ca4a645ca326b66ff3b82bee0db18ac97Hui Qi Tay 4106419ecd02ce43a2614822e228f306d4db589f317Keith Whitwell return lp_setup_bin_triangle(setup, point, &bbox, nr_planes); 4116419ecd02ce43a2614822e228f306d4db589f317Keith Whitwell} 4126419ecd02ce43a2614822e228f306d4db589f317Keith Whitwell 4136419ecd02ce43a2614822e228f306d4db589f317Keith Whitwell 414924c18da95bbc62492f8e54bd8273a4981a919dcBrian Paulstatic void 415924c18da95bbc62492f8e54bd8273a4981a919dcBrian Paullp_setup_point(struct lp_setup_context *setup, 416924c18da95bbc62492f8e54bd8273a4981a919dcBrian Paul const float (*v0)[4]) 4176419ecd02ce43a2614822e228f306d4db589f317Keith Whitwell{ 4186419ecd02ce43a2614822e228f306d4db589f317Keith Whitwell if (!try_setup_point( setup, v0 )) 4196419ecd02ce43a2614822e228f306d4db589f317Keith Whitwell { 420ad6730fadbbeacea96322e31064ede9ea7ebad6fKeith Whitwell if (!lp_setup_flush_and_restart(setup)) 421ad6730fadbbeacea96322e31064ede9ea7ebad6fKeith Whitwell return; 4226419ecd02ce43a2614822e228f306d4db589f317Keith Whitwell 4236419ecd02ce43a2614822e228f306d4db589f317Keith Whitwell if (!try_setup_point( setup, v0 )) 424ad6730fadbbeacea96322e31064ede9ea7ebad6fKeith Whitwell return; 4256419ecd02ce43a2614822e228f306d4db589f317Keith Whitwell } 426415b271b5100d64579690111bc8eb549866865a7Keith Whitwell} 427415b271b5100d64579690111bc8eb549866865a7Keith Whitwell 428415b271b5100d64579690111bc8eb549866865a7Keith Whitwell 429415b271b5100d64579690111bc8eb549866865a7Keith Whitwellvoid 4303160cbabccf1f7d8bdf344242507b9c3082f15c6José Fonsecalp_setup_choose_point( struct lp_setup_context *setup ) 431415b271b5100d64579690111bc8eb549866865a7Keith Whitwell{ 4325286dd701640976ffc328e8e85fb3830746851a1Hui Qi Tay setup->point = lp_setup_point; 433415b271b5100d64579690111bc8eb549866865a7Keith Whitwell} 434415b271b5100d64579690111bc8eb549866865a7Keith Whitwell 435415b271b5100d64579690111bc8eb549866865a7Keith Whitwell 436