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