19f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt/*
29f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt Copyright (C) Intel Corp.  2006.  All Rights Reserved.
39f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
49f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt develop this 3D driver.
59f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
69f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt Permission is hereby granted, free of charge, to any person obtaining
79f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt a copy of this software and associated documentation files (the
89f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt "Software"), to deal in the Software without restriction, including
99f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt without limitation the rights to use, copy, modify, merge, publish,
109f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt distribute, sublicense, and/or sell copies of the Software, and to
119f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt permit persons to whom the Software is furnished to do so, subject to
129f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt the following conditions:
139f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
149f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt The above copyright notice and this permission notice (including the
159f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt next paragraph) shall be included in all copies or substantial
169f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt portions of the Software.
179f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
189f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
199f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
209f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
219f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
229f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
239f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
249f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
259f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
269f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt **********************************************************************/
279f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt /*
289f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt  * Authors:
299f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt  *   Keith Whitwell <keith@tungstengraphics.com>
309f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt  */
319f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
329f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
339f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt#include "brw_context.h"
349f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt#include "brw_defines.h"
359f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt#include "brw_eu.h"
369f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
372f0edc60f4bd2ae5999a6afa656e3bb3f181bf0fChad Versace#include "glsl/ralloc.h"
385936d96d33e767aa99f6afa92f2a6582ff04df23Kenneth Graunke
39811c147220d2630b769e505ce4d40ef9108fe034Eric Anholt/* Returns the corresponding conditional mod for swapping src0 and
40811c147220d2630b769e505ce4d40ef9108fe034Eric Anholt * src1 in e.g. CMP.
41811c147220d2630b769e505ce4d40ef9108fe034Eric Anholt */
42811c147220d2630b769e505ce4d40ef9108fe034Eric Anholtuint32_t
43811c147220d2630b769e505ce4d40ef9108fe034Eric Anholtbrw_swap_cmod(uint32_t cmod)
44811c147220d2630b769e505ce4d40ef9108fe034Eric Anholt{
45811c147220d2630b769e505ce4d40ef9108fe034Eric Anholt   switch (cmod) {
46811c147220d2630b769e505ce4d40ef9108fe034Eric Anholt   case BRW_CONDITIONAL_Z:
47811c147220d2630b769e505ce4d40ef9108fe034Eric Anholt   case BRW_CONDITIONAL_NZ:
48811c147220d2630b769e505ce4d40ef9108fe034Eric Anholt      return cmod;
49811c147220d2630b769e505ce4d40ef9108fe034Eric Anholt   case BRW_CONDITIONAL_G:
50811c147220d2630b769e505ce4d40ef9108fe034Eric Anholt      return BRW_CONDITIONAL_L;
515b83bdc154ec8d607a4c4d96171d0128e51abaecKenneth Graunke   case BRW_CONDITIONAL_GE:
525b83bdc154ec8d607a4c4d96171d0128e51abaecKenneth Graunke      return BRW_CONDITIONAL_LE;
53811c147220d2630b769e505ce4d40ef9108fe034Eric Anholt   case BRW_CONDITIONAL_L:
54811c147220d2630b769e505ce4d40ef9108fe034Eric Anholt      return BRW_CONDITIONAL_G;
555b83bdc154ec8d607a4c4d96171d0128e51abaecKenneth Graunke   case BRW_CONDITIONAL_LE:
565b83bdc154ec8d607a4c4d96171d0128e51abaecKenneth Graunke      return BRW_CONDITIONAL_GE;
57811c147220d2630b769e505ce4d40ef9108fe034Eric Anholt   default:
58811c147220d2630b769e505ce4d40ef9108fe034Eric Anholt      return ~0;
59811c147220d2630b769e505ce4d40ef9108fe034Eric Anholt   }
60811c147220d2630b769e505ce4d40ef9108fe034Eric Anholt}
619f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
629f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
639f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt/* How does predicate control work when execution_size != 8?  Do I
649f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt * need to test/set for 0xffff when execution_size is 16?
659f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt */
669f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtvoid brw_set_predicate_control_flag_value( struct brw_compile *p, GLuint value )
679f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
689f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   p->current->header.predicate_control = BRW_PREDICATE_NONE;
699f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
709f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   if (value != 0xff) {
719f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      if (value != p->flag_value) {
729f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 brw_push_insn_state(p);
739f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 brw_MOV(p, brw_flag_reg(), brw_imm_uw(value));
749f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 p->flag_value = value;
759f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt	 brw_pop_insn_state(p);
769f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      }
779f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
789f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      p->current->header.predicate_control = BRW_PREDICATE_NORMAL;
799f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   }
809f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt}
819f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
829f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtvoid brw_set_predicate_control( struct brw_compile *p, GLuint pc )
839f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
849f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   p->current->header.predicate_control = pc;
859f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt}
869f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
874847f802c28e595130bda14055cd52c9b1f51cd7Eric Anholtvoid brw_set_predicate_inverse(struct brw_compile *p, bool predicate_inverse)
884847f802c28e595130bda14055cd52c9b1f51cd7Eric Anholt{
894847f802c28e595130bda14055cd52c9b1f51cd7Eric Anholt   p->current->header.predicate_inverse = predicate_inverse;
904847f802c28e595130bda14055cd52c9b1f51cd7Eric Anholt}
914847f802c28e595130bda14055cd52c9b1f51cd7Eric Anholt
929f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtvoid brw_set_conditionalmod( struct brw_compile *p, GLuint conditional )
939f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
94b010814e9c7ed30cbdd60a49d81a6ea774c8c3a3Eric Anholt   p->current->header.destreg__conditionalmod = conditional;
959f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt}
969f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
979f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtvoid brw_set_access_mode( struct brw_compile *p, GLuint access_mode )
989f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
999f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   p->current->header.access_mode = access_mode;
1009f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt}
1019f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
1023f5e938a9ded42ae8dc9ae2486e8d5c8b64cfe07Kenneth Graunkevoid
1033f5e938a9ded42ae8dc9ae2486e8d5c8b64cfe07Kenneth Graunkebrw_set_compression_control(struct brw_compile *p,
1043f5e938a9ded42ae8dc9ae2486e8d5c8b64cfe07Kenneth Graunke			    enum brw_compression compression_control)
1059f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
106245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt   p->compressed = (compression_control == BRW_COMPRESSION_COMPRESSED);
107245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt
108245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt   if (p->brw->intel.gen >= 6) {
109245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt      /* Since we don't use the 32-wide support in gen6, we translate
110245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt       * the pre-gen6 compression control here.
111245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt       */
112245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt      switch (compression_control) {
113245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt      case BRW_COMPRESSION_NONE:
114245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt	 /* This is the "use the first set of bits of dmask/vmask/arf
115245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt	  * according to execsize" option.
116245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt	  */
117245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt	 p->current->header.compression_control = GEN6_COMPRESSION_1Q;
118245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt	 break;
119245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt      case BRW_COMPRESSION_2NDHALF:
120245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt	 /* For 8-wide, this is "use the second set of 8 bits." */
121245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt	 p->current->header.compression_control = GEN6_COMPRESSION_2Q;
122245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt	 break;
123245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt      case BRW_COMPRESSION_COMPRESSED:
124245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt	 /* For 16-wide instruction compression, use the first set of 16 bits
125245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt	  * since we don't do 32-wide dispatch.
126245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt	  */
127245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt	 p->current->header.compression_control = GEN6_COMPRESSION_1H;
128245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt	 break;
129245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt      default:
130245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt	 assert(!"not reached");
131245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt	 p->current->header.compression_control = GEN6_COMPRESSION_1H;
132245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt	 break;
133245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt      }
134245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt   } else {
135245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt      p->current->header.compression_control = compression_control;
136245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt   }
1379f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt}
1389f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
1399f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtvoid brw_set_mask_control( struct brw_compile *p, GLuint value )
1409f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
1419f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   p->current->header.mask_control = value;
1429f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt}
1439f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
14433dfdc735e052d9c9b33883350e926d40220b6acEric Anholtvoid brw_set_saturate( struct brw_compile *p, bool enable )
1459f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
14633dfdc735e052d9c9b33883350e926d40220b6acEric Anholt   p->current->header.saturate = enable;
1479f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt}
1489f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
14993ba0055c325007656c14ba38302e21be3dc599fZhenyu Wangvoid brw_set_acc_write_control(struct brw_compile *p, GLuint value)
15093ba0055c325007656c14ba38302e21be3dc599fZhenyu Wang{
15193ba0055c325007656c14ba38302e21be3dc599fZhenyu Wang   if (p->brw->intel.gen >= 6)
15293ba0055c325007656c14ba38302e21be3dc599fZhenyu Wang      p->current->header.acc_wr_control = value;
15393ba0055c325007656c14ba38302e21be3dc599fZhenyu Wang}
15493ba0055c325007656c14ba38302e21be3dc599fZhenyu Wang
1559f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtvoid brw_push_insn_state( struct brw_compile *p )
1569f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
1579f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   assert(p->current != &p->stack[BRW_EU_MAX_INSN_STACK-1]);
1589f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   memcpy(p->current+1, p->current, sizeof(struct brw_instruction));
159245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt   p->compressed_stack[p->current - p->stack] = p->compressed;
1609f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   p->current++;
1619f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt}
1629f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
1639f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtvoid brw_pop_insn_state( struct brw_compile *p )
1649f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
1659f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   assert(p->current != p->stack);
1669f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   p->current--;
167245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt   p->compressed = p->compressed_stack[p->current - p->stack];
1689f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt}
1699f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
1709f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
1719f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt/***********************************************************************
1729f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt */
173774fb90db3e83d5e7326b7a72e05ce805c306b24Kenneth Graunkevoid
174774fb90db3e83d5e7326b7a72e05ce805c306b24Kenneth Graunkebrw_init_compile(struct brw_context *brw, struct brw_compile *p, void *mem_ctx)
1759f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
1768e444fb9e2685e3eac42beb848b08e91dc20c88aXiang, Haihao   p->brw = brw;
1773aa3c3f75894ca0eb08087c0ec3dd114eeae4bb7Yuanhan Liu   /*
1783aa3c3f75894ca0eb08087c0ec3dd114eeae4bb7Yuanhan Liu    * Set the initial instruction store array size to 1024, if found that
1793aa3c3f75894ca0eb08087c0ec3dd114eeae4bb7Yuanhan Liu    * isn't enough, then it will double the store size at brw_next_insn()
1803aa3c3f75894ca0eb08087c0ec3dd114eeae4bb7Yuanhan Liu    * until out of memory.
1813aa3c3f75894ca0eb08087c0ec3dd114eeae4bb7Yuanhan Liu    */
1823aa3c3f75894ca0eb08087c0ec3dd114eeae4bb7Yuanhan Liu   p->store_size = 1024;
1833aa3c3f75894ca0eb08087c0ec3dd114eeae4bb7Yuanhan Liu   p->store = rzalloc_array(mem_ctx, struct brw_instruction, p->store_size);
1849f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   p->nr_insn = 0;
1859f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   p->current = p->stack;
186245662f3083795e272fe9ef5d4cbeb6d048cf0e5Eric Anholt   p->compressed = false;
1879f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   memset(p->current, 0, sizeof(p->current[0]));
1889f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
189774fb90db3e83d5e7326b7a72e05ce805c306b24Kenneth Graunke   p->mem_ctx = mem_ctx;
190774fb90db3e83d5e7326b7a72e05ce805c306b24Kenneth Graunke
1919f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   /* Some defaults?
1929f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt    */
1939f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   brw_set_mask_control(p, BRW_MASK_ENABLE); /* what does this do? */
1949f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   brw_set_saturate(p, 0);
1959f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   brw_set_compression_control(p, BRW_COMPRESSION_NONE);
1969f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   brw_set_predicate_control_flag_value(p, 0xff);
1975936d96d33e767aa99f6afa92f2a6582ff04df23Kenneth Graunke
1985936d96d33e767aa99f6afa92f2a6582ff04df23Kenneth Graunke   /* Set up control flow stack */
1995936d96d33e767aa99f6afa92f2a6582ff04df23Kenneth Graunke   p->if_stack_depth = 0;
2005936d96d33e767aa99f6afa92f2a6582ff04df23Kenneth Graunke   p->if_stack_array_size = 16;
2010a17093eaf84696b05d04a45d6d51281f7b2786bYuanhan Liu   p->if_stack = rzalloc_array(mem_ctx, int, p->if_stack_array_size);
20232118cfe37495738ed5931c6b1a71b8ee2ad189cEric Anholt
20332118cfe37495738ed5931c6b1a71b8ee2ad189cEric Anholt   p->loop_stack_depth = 0;
20432118cfe37495738ed5931c6b1a71b8ee2ad189cEric Anholt   p->loop_stack_array_size = 16;
20532118cfe37495738ed5931c6b1a71b8ee2ad189cEric Anholt   p->loop_stack = rzalloc_array(mem_ctx, int, p->loop_stack_array_size);
206f1d89638c02afafbf82ef657cd6ba9965dad6738Eric Anholt   p->if_depth_in_loop = rzalloc_array(mem_ctx, int, p->loop_stack_array_size);
2079f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt}
2089f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
2099f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
2109f344b3e7d6e23674dd4747faec253f103563b36Eric Anholtconst GLuint *brw_get_program( struct brw_compile *p,
2119f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt			       GLuint *sz )
2129f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt{
2139f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   GLuint i;
2149f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
2159f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   for (i = 0; i < 8; i++)
2169f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt      brw_NOP(p);
2179f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt
2189f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   *sz = p->nr_insn * sizeof(struct brw_instruction);
2199f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt   return (const GLuint *)p->store;
2209f344b3e7d6e23674dd4747faec253f103563b36Eric Anholt}
221