brw_eu_util.c revision 9b4053cabd8bda180b352d2d2047209f6ca5f6e8
1f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm/* 230dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm Copyright (C) Intel Corp. 2006. All Rights Reserved. 3f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to 4f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm develop this 3D driver. 5f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm 6f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm Permission is hereby granted, free of charge, to any person obtaining 7f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm a copy of this software and associated documentation files (the 8f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm "Software"), to deal in the Software without restriction, including 9f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm without limitation the rights to use, copy, modify, merge, publish, 10f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm distribute, sublicense, and/or sell copies of the Software, and to 11f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm permit persons to whom the Software is furnished to do so, subject to 12f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm the following conditions: 13f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm 14f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm The above copyright notice and this permission notice (including the 15f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm next paragraph) shall be included in all copies or substantial 16f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm portions of the Software. 17f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm 18f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 19f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 21f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 22f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 23f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 24f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm 26f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm **********************************************************************/ 2730dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm /* 2830dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm * Authors: 2930dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm * Keith Whitwell <keith@tungstengraphics.com> 3030dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm */ 31f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm 32f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm 33f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm#include "brw_context.h" 34f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm#include "brw_defines.h" 35f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm#include "brw_eu.h" 36f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm 3730dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm 3830dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidmvoid brw_math_invert( struct brw_compile *p, 3930dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm struct brw_reg dst, 4030dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm struct brw_reg src) 41f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm{ 42f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm brw_math( p, 43f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm dst, 44f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm BRW_MATH_FUNCTION_INV, 45f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm 0, 469fb355e096eef9a2f005e896727d25a5d4ed0141hp.com!davidm src, 4730dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm BRW_MATH_PRECISION_FULL, 48f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm BRW_MATH_DATA_VECTOR ); 499fb355e096eef9a2f005e896727d25a5d4ed0141hp.com!davidm} 50f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm 519fb355e096eef9a2f005e896727d25a5d4ed0141hp.com!davidm 529fb355e096eef9a2f005e896727d25a5d4ed0141hp.com!davidm 53f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidmvoid brw_copy4(struct brw_compile *p, 54f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm struct brw_reg dst, 55f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm struct brw_reg src, 569fb355e096eef9a2f005e896727d25a5d4ed0141hp.com!davidm GLuint count) 57f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm{ 58f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm GLuint i; 59f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm 60f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm dst = vec4(dst); 61f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm src = vec4(src); 62f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm 63f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm for (i = 0; i < count; i++) 64f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm { 6530dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm GLuint delta = i*32; 6630dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm brw_MOV(p, byte_offset(dst, delta), byte_offset(src, delta)); 679fb355e096eef9a2f005e896727d25a5d4ed0141hp.com!davidm brw_MOV(p, byte_offset(dst, delta+16), byte_offset(src, delta+16)); 689fb355e096eef9a2f005e896727d25a5d4ed0141hp.com!davidm } 699fb355e096eef9a2f005e896727d25a5d4ed0141hp.com!davidm} 709fb355e096eef9a2f005e896727d25a5d4ed0141hp.com!davidm 719fb355e096eef9a2f005e896727d25a5d4ed0141hp.com!davidm 72f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidmvoid brw_copy8(struct brw_compile *p, 73f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm struct brw_reg dst, 74f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm struct brw_reg src, 7530dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm GLuint count) 7630dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm{ 77f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm GLuint i; 7830dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm 7930dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm dst = vec8(dst); 8030dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm src = vec8(src); 8130dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm 8230dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm for (i = 0; i < count; i++) 8330dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm { 8430dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm GLuint delta = i*32; 8530dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm brw_MOV(p, byte_offset(dst, delta), byte_offset(src, delta)); 86f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm } 8730dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm} 88f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm 899fb355e096eef9a2f005e896727d25a5d4ed0141hp.com!davidm 909fb355e096eef9a2f005e896727d25a5d4ed0141hp.com!davidmvoid brw_copy_indirect_to_indirect(struct brw_compile *p, 91f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm struct brw_indirect dst_ptr, 92f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm struct brw_indirect src_ptr, 9330dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm GLuint count) 94f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm{ 959fb355e096eef9a2f005e896727d25a5d4ed0141hp.com!davidm GLuint i; 9630dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm 9730dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm for (i = 0; i < count; i++) 989fb355e096eef9a2f005e896727d25a5d4ed0141hp.com!davidm { 999fb355e096eef9a2f005e896727d25a5d4ed0141hp.com!davidm GLuint delta = i*32; 1005fedf3407c7c161d12ba4f600cbce12fef780ad7Tommi Rantala brw_MOV(p, deref_4f(dst_ptr, delta), deref_4f(src_ptr, delta)); 10130dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm brw_MOV(p, deref_4f(dst_ptr, delta+16), deref_4f(src_ptr, delta+16)); 10230dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm } 1039fb355e096eef9a2f005e896727d25a5d4ed0141hp.com!davidm} 104f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm 105f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm 10630dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidmvoid brw_copy_from_indirect(struct brw_compile *p, 10730dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm struct brw_reg dst, 108f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm struct brw_indirect ptr, 109f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm GLuint count) 110f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm{ 111f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm GLuint i; 112f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm 11330dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm dst = vec4(dst); 11430dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm 11530dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm for (i = 0; i < count; i++) 11630dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm { 11730dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm GLuint delta = i*32; 11830dec34c3a0bf851cdf41153528659ad347c0ccbhp.com!davidm brw_MOV(p, byte_offset(dst, delta), deref_4f(ptr, delta)); 119f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm brw_MOV(p, byte_offset(dst, delta+16), deref_4f(ptr, delta+16)); 120f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm } 1219fb355e096eef9a2f005e896727d25a5d4ed0141hp.com!davidm} 1229fb355e096eef9a2f005e896727d25a5d4ed0141hp.com!davidm 123f77ee147ace13e3d500dc3d4468cb1b0dec2b0a4hp.com!davidm 1249fb355e096eef9a2f005e896727d25a5d4ed0141hp.com!davidm 1259fb355e096eef9a2f005e896727d25a5d4ed0141hp.com!davidm 1269fb355e096eef9a2f005e896727d25a5d4ed0141hp.com!davidm