xref: /aosp_15_r20/external/igt-gpu-tools/lib/gpgpu_fill.c (revision d83cc019efdc2edc6c4b16e9034a3ceb8d35d77c)
1*d83cc019SAndroid Build Coastguard Worker /*
2*d83cc019SAndroid Build Coastguard Worker  * Copyright © 2015 Intel Corporation
3*d83cc019SAndroid Build Coastguard Worker  *
4*d83cc019SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
5*d83cc019SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
6*d83cc019SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
7*d83cc019SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*d83cc019SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
9*d83cc019SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
10*d83cc019SAndroid Build Coastguard Worker  *
11*d83cc019SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the next
12*d83cc019SAndroid Build Coastguard Worker  * paragraph) shall be included in all copies or substantial portions of the
13*d83cc019SAndroid Build Coastguard Worker  * Software.
14*d83cc019SAndroid Build Coastguard Worker  *
15*d83cc019SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*d83cc019SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*d83cc019SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18*d83cc019SAndroid Build Coastguard Worker  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*d83cc019SAndroid Build Coastguard Worker  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20*d83cc019SAndroid Build Coastguard Worker  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21*d83cc019SAndroid Build Coastguard Worker  * IN THE SOFTWARE.
22*d83cc019SAndroid Build Coastguard Worker  *
23*d83cc019SAndroid Build Coastguard Worker  * Authors:
24*d83cc019SAndroid Build Coastguard Worker  *  Zhenyu Wang <[email protected]>
25*d83cc019SAndroid Build Coastguard Worker  *  Dominik Zeromski <[email protected]>
26*d83cc019SAndroid Build Coastguard Worker  */
27*d83cc019SAndroid Build Coastguard Worker 
28*d83cc019SAndroid Build Coastguard Worker #include <intel_bufmgr.h>
29*d83cc019SAndroid Build Coastguard Worker #include <i915_drm.h>
30*d83cc019SAndroid Build Coastguard Worker 
31*d83cc019SAndroid Build Coastguard Worker #include "intel_reg.h"
32*d83cc019SAndroid Build Coastguard Worker #include "drmtest.h"
33*d83cc019SAndroid Build Coastguard Worker 
34*d83cc019SAndroid Build Coastguard Worker #include "gpgpu_fill.h"
35*d83cc019SAndroid Build Coastguard Worker #include "gpu_cmds.h"
36*d83cc019SAndroid Build Coastguard Worker 
37*d83cc019SAndroid Build Coastguard Worker /* lib/i915/shaders/gpgpu/gpgpu_fill.gxa */
38*d83cc019SAndroid Build Coastguard Worker static const uint32_t gen7_gpgpu_kernel[][4] = {
39*d83cc019SAndroid Build Coastguard Worker 	{ 0x00400001, 0x20200231, 0x00000020, 0x00000000 },
40*d83cc019SAndroid Build Coastguard Worker 	{ 0x00000041, 0x20400c21, 0x00000004, 0x00000010 },
41*d83cc019SAndroid Build Coastguard Worker 	{ 0x00000001, 0x20440021, 0x00000018, 0x00000000 },
42*d83cc019SAndroid Build Coastguard Worker 	{ 0x00600001, 0x20800021, 0x008d0000, 0x00000000 },
43*d83cc019SAndroid Build Coastguard Worker 	{ 0x00200001, 0x20800021, 0x00450040, 0x00000000 },
44*d83cc019SAndroid Build Coastguard Worker 	{ 0x00000001, 0x20880061, 0x00000000, 0x0000000f },
45*d83cc019SAndroid Build Coastguard Worker 	{ 0x00800001, 0x20a00021, 0x00000020, 0x00000000 },
46*d83cc019SAndroid Build Coastguard Worker 	{ 0x05800031, 0x24001ca8, 0x00000080, 0x060a8000 },
47*d83cc019SAndroid Build Coastguard Worker 	{ 0x00600001, 0x2e000021, 0x008d0000, 0x00000000 },
48*d83cc019SAndroid Build Coastguard Worker 	{ 0x07800031, 0x20001ca8, 0x00000e00, 0x82000010 },
49*d83cc019SAndroid Build Coastguard Worker };
50*d83cc019SAndroid Build Coastguard Worker 
51*d83cc019SAndroid Build Coastguard Worker static const uint32_t gen8_gpgpu_kernel[][4] = {
52*d83cc019SAndroid Build Coastguard Worker 	{ 0x00400001, 0x20202288, 0x00000020, 0x00000000 },
53*d83cc019SAndroid Build Coastguard Worker 	{ 0x00000041, 0x20400208, 0x06000004, 0x00000010 },
54*d83cc019SAndroid Build Coastguard Worker 	{ 0x00000001, 0x20440208, 0x00000018, 0x00000000 },
55*d83cc019SAndroid Build Coastguard Worker 	{ 0x00600001, 0x20800208, 0x008d0000, 0x00000000 },
56*d83cc019SAndroid Build Coastguard Worker 	{ 0x00200001, 0x20800208, 0x00450040, 0x00000000 },
57*d83cc019SAndroid Build Coastguard Worker 	{ 0x00000001, 0x20880608, 0x00000000, 0x0000000f },
58*d83cc019SAndroid Build Coastguard Worker 	{ 0x00800001, 0x20a00208, 0x00000020, 0x00000000 },
59*d83cc019SAndroid Build Coastguard Worker 	{ 0x0c800031, 0x24000a40, 0x0e000080, 0x060a8000 },
60*d83cc019SAndroid Build Coastguard Worker 	{ 0x00600001, 0x2e000208, 0x008d0000, 0x00000000 },
61*d83cc019SAndroid Build Coastguard Worker 	{ 0x07800031, 0x20000a40, 0x0e000e00, 0x82000010 },
62*d83cc019SAndroid Build Coastguard Worker };
63*d83cc019SAndroid Build Coastguard Worker 
64*d83cc019SAndroid Build Coastguard Worker static const uint32_t gen9_gpgpu_kernel[][4] = {
65*d83cc019SAndroid Build Coastguard Worker 	{ 0x00400001, 0x20202288, 0x00000020, 0x00000000 },
66*d83cc019SAndroid Build Coastguard Worker 	{ 0x00000041, 0x20400208, 0x06000004, 0x00000010 },
67*d83cc019SAndroid Build Coastguard Worker 	{ 0x00000001, 0x20440208, 0x00000018, 0x00000000 },
68*d83cc019SAndroid Build Coastguard Worker 	{ 0x00600001, 0x20800208, 0x008d0000, 0x00000000 },
69*d83cc019SAndroid Build Coastguard Worker 	{ 0x00200001, 0x20800208, 0x00450040, 0x00000000 },
70*d83cc019SAndroid Build Coastguard Worker 	{ 0x00000001, 0x20880608, 0x00000000, 0x0000000f },
71*d83cc019SAndroid Build Coastguard Worker 	{ 0x00800001, 0x20a00208, 0x00000020, 0x00000000 },
72*d83cc019SAndroid Build Coastguard Worker 	{ 0x0c800031, 0x24000a40, 0x06000080, 0x060a8000 },
73*d83cc019SAndroid Build Coastguard Worker 	{ 0x00600001, 0x2e000208, 0x008d0000, 0x00000000 },
74*d83cc019SAndroid Build Coastguard Worker 	{ 0x07800031, 0x20000a40, 0x06000e00, 0x82000010 },
75*d83cc019SAndroid Build Coastguard Worker };
76*d83cc019SAndroid Build Coastguard Worker 
77*d83cc019SAndroid Build Coastguard Worker static const uint32_t gen11_gpgpu_kernel[][4] = {
78*d83cc019SAndroid Build Coastguard Worker 	{ 0x00400001, 0x20202288, 0x00000020, 0x00000000 },
79*d83cc019SAndroid Build Coastguard Worker 	{ 0x00000009, 0x20400208, 0x06000004, 0x00000004 },
80*d83cc019SAndroid Build Coastguard Worker 	{ 0x00000001, 0x20440208, 0x00000018, 0x00000000 },
81*d83cc019SAndroid Build Coastguard Worker 	{ 0x00600001, 0x20800208, 0x008d0000, 0x00000000 },
82*d83cc019SAndroid Build Coastguard Worker 	{ 0x00200001, 0x20800208, 0x00450040, 0x00000000 },
83*d83cc019SAndroid Build Coastguard Worker 	{ 0x00000001, 0x20880608, 0x00000000, 0x0000000f },
84*d83cc019SAndroid Build Coastguard Worker 	{ 0x00800001, 0x20a00208, 0x00000020, 0x00000000 },
85*d83cc019SAndroid Build Coastguard Worker 	{ 0x0c800031, 0x24000a40, 0x06000080, 0x040a8000 },
86*d83cc019SAndroid Build Coastguard Worker 	{ 0x00600001, 0x2e000208, 0x008d0000, 0x00000000 },
87*d83cc019SAndroid Build Coastguard Worker 	{ 0x07800031, 0x20000a40, 0x06000e00, 0x82000010 },
88*d83cc019SAndroid Build Coastguard Worker };
89*d83cc019SAndroid Build Coastguard Worker 
90*d83cc019SAndroid Build Coastguard Worker /*
91*d83cc019SAndroid Build Coastguard Worker  * This sets up the gpgpu pipeline,
92*d83cc019SAndroid Build Coastguard Worker  *
93*d83cc019SAndroid Build Coastguard Worker  * +---------------+ <---- 4096
94*d83cc019SAndroid Build Coastguard Worker  * |       ^       |
95*d83cc019SAndroid Build Coastguard Worker  * |       |       |
96*d83cc019SAndroid Build Coastguard Worker  * |    various    |
97*d83cc019SAndroid Build Coastguard Worker  * |      state    |
98*d83cc019SAndroid Build Coastguard Worker  * |       |       |
99*d83cc019SAndroid Build Coastguard Worker  * |_______|_______| <---- 2048 + ?
100*d83cc019SAndroid Build Coastguard Worker  * |       ^       |
101*d83cc019SAndroid Build Coastguard Worker  * |       |       |
102*d83cc019SAndroid Build Coastguard Worker  * |   batch       |
103*d83cc019SAndroid Build Coastguard Worker  * |    commands   |
104*d83cc019SAndroid Build Coastguard Worker  * |       |       |
105*d83cc019SAndroid Build Coastguard Worker  * |       |       |
106*d83cc019SAndroid Build Coastguard Worker  * +---------------+ <---- 0 + ?
107*d83cc019SAndroid Build Coastguard Worker  *
108*d83cc019SAndroid Build Coastguard Worker  */
109*d83cc019SAndroid Build Coastguard Worker 
110*d83cc019SAndroid Build Coastguard Worker #define BATCH_STATE_SPLIT 2048
111*d83cc019SAndroid Build Coastguard Worker /* VFE STATE params */
112*d83cc019SAndroid Build Coastguard Worker #define THREADS 1
113*d83cc019SAndroid Build Coastguard Worker #define GEN7_GPGPU_URB_ENTRIES 0
114*d83cc019SAndroid Build Coastguard Worker #define GEN8_GPGPU_URB_ENTRIES 1
115*d83cc019SAndroid Build Coastguard Worker #define GPGPU_URB_SIZE 0
116*d83cc019SAndroid Build Coastguard Worker #define GPGPU_CURBE_SIZE 1
117*d83cc019SAndroid Build Coastguard Worker #define GEN7_VFE_STATE_GPGPU_MODE 1
118*d83cc019SAndroid Build Coastguard Worker 
119*d83cc019SAndroid Build Coastguard Worker void
gen7_gpgpu_fillfunc(struct intel_batchbuffer * batch,const struct igt_buf * dst,unsigned int x,unsigned int y,unsigned int width,unsigned int height,uint8_t color)120*d83cc019SAndroid Build Coastguard Worker gen7_gpgpu_fillfunc(struct intel_batchbuffer *batch,
121*d83cc019SAndroid Build Coastguard Worker 		    const struct igt_buf *dst,
122*d83cc019SAndroid Build Coastguard Worker 		    unsigned int x, unsigned int y,
123*d83cc019SAndroid Build Coastguard Worker 		    unsigned int width, unsigned int height,
124*d83cc019SAndroid Build Coastguard Worker 		    uint8_t color)
125*d83cc019SAndroid Build Coastguard Worker {
126*d83cc019SAndroid Build Coastguard Worker 	uint32_t curbe_buffer, interface_descriptor;
127*d83cc019SAndroid Build Coastguard Worker 	uint32_t batch_end;
128*d83cc019SAndroid Build Coastguard Worker 
129*d83cc019SAndroid Build Coastguard Worker 	intel_batchbuffer_flush(batch);
130*d83cc019SAndroid Build Coastguard Worker 
131*d83cc019SAndroid Build Coastguard Worker 	/* setup states */
132*d83cc019SAndroid Build Coastguard Worker 	batch->ptr = &batch->buffer[BATCH_STATE_SPLIT];
133*d83cc019SAndroid Build Coastguard Worker 
134*d83cc019SAndroid Build Coastguard Worker 	/*
135*d83cc019SAndroid Build Coastguard Worker 	 * const buffer needs to fill for every thread, but as we have just 1
136*d83cc019SAndroid Build Coastguard Worker 	 * thread per every group, so need only one curbe data.
137*d83cc019SAndroid Build Coastguard Worker 	 * For each thread, just use thread group ID for buffer offset.
138*d83cc019SAndroid Build Coastguard Worker 	 */
139*d83cc019SAndroid Build Coastguard Worker 	curbe_buffer = gen7_fill_curbe_buffer_data(batch, color);
140*d83cc019SAndroid Build Coastguard Worker 
141*d83cc019SAndroid Build Coastguard Worker 	interface_descriptor = gen7_fill_interface_descriptor(batch, dst,
142*d83cc019SAndroid Build Coastguard Worker 				gen7_gpgpu_kernel, sizeof(gen7_gpgpu_kernel));
143*d83cc019SAndroid Build Coastguard Worker 
144*d83cc019SAndroid Build Coastguard Worker 	igt_assert(batch->ptr < &batch->buffer[4095]);
145*d83cc019SAndroid Build Coastguard Worker 
146*d83cc019SAndroid Build Coastguard Worker 	batch->ptr = batch->buffer;
147*d83cc019SAndroid Build Coastguard Worker 
148*d83cc019SAndroid Build Coastguard Worker 	/* GPGPU pipeline */
149*d83cc019SAndroid Build Coastguard Worker 	OUT_BATCH(GEN7_PIPELINE_SELECT | PIPELINE_SELECT_GPGPU);
150*d83cc019SAndroid Build Coastguard Worker 
151*d83cc019SAndroid Build Coastguard Worker 	gen7_emit_state_base_address(batch);
152*d83cc019SAndroid Build Coastguard Worker 	gen7_emit_vfe_state(batch, THREADS, GEN7_GPGPU_URB_ENTRIES,
153*d83cc019SAndroid Build Coastguard Worker 			    GPGPU_URB_SIZE, GPGPU_CURBE_SIZE,
154*d83cc019SAndroid Build Coastguard Worker 			    GEN7_VFE_STATE_GPGPU_MODE);
155*d83cc019SAndroid Build Coastguard Worker 	gen7_emit_curbe_load(batch, curbe_buffer);
156*d83cc019SAndroid Build Coastguard Worker 	gen7_emit_interface_descriptor_load(batch, interface_descriptor);
157*d83cc019SAndroid Build Coastguard Worker 	gen7_emit_gpgpu_walk(batch, x, y, width, height);
158*d83cc019SAndroid Build Coastguard Worker 
159*d83cc019SAndroid Build Coastguard Worker 	OUT_BATCH(MI_BATCH_BUFFER_END);
160*d83cc019SAndroid Build Coastguard Worker 
161*d83cc019SAndroid Build Coastguard Worker 	batch_end = intel_batchbuffer_align(batch, 8);
162*d83cc019SAndroid Build Coastguard Worker 	igt_assert(batch_end < BATCH_STATE_SPLIT);
163*d83cc019SAndroid Build Coastguard Worker 
164*d83cc019SAndroid Build Coastguard Worker 	gen7_render_flush(batch, batch_end);
165*d83cc019SAndroid Build Coastguard Worker 	intel_batchbuffer_reset(batch);
166*d83cc019SAndroid Build Coastguard Worker }
167*d83cc019SAndroid Build Coastguard Worker 
168*d83cc019SAndroid Build Coastguard Worker void
gen8_gpgpu_fillfunc(struct intel_batchbuffer * batch,const struct igt_buf * dst,unsigned int x,unsigned int y,unsigned int width,unsigned int height,uint8_t color)169*d83cc019SAndroid Build Coastguard Worker gen8_gpgpu_fillfunc(struct intel_batchbuffer *batch,
170*d83cc019SAndroid Build Coastguard Worker 		    const struct igt_buf *dst,
171*d83cc019SAndroid Build Coastguard Worker 		    unsigned int x, unsigned int y,
172*d83cc019SAndroid Build Coastguard Worker 		    unsigned int width, unsigned int height,
173*d83cc019SAndroid Build Coastguard Worker 		    uint8_t color)
174*d83cc019SAndroid Build Coastguard Worker {
175*d83cc019SAndroid Build Coastguard Worker 	uint32_t curbe_buffer, interface_descriptor;
176*d83cc019SAndroid Build Coastguard Worker 	uint32_t batch_end;
177*d83cc019SAndroid Build Coastguard Worker 
178*d83cc019SAndroid Build Coastguard Worker 	intel_batchbuffer_flush(batch);
179*d83cc019SAndroid Build Coastguard Worker 
180*d83cc019SAndroid Build Coastguard Worker 	/* setup states */
181*d83cc019SAndroid Build Coastguard Worker 	batch->ptr = &batch->buffer[BATCH_STATE_SPLIT];
182*d83cc019SAndroid Build Coastguard Worker 
183*d83cc019SAndroid Build Coastguard Worker 	/*
184*d83cc019SAndroid Build Coastguard Worker 	 * const buffer needs to fill for every thread, but as we have just 1
185*d83cc019SAndroid Build Coastguard Worker 	 * thread per every group, so need only one curbe data.
186*d83cc019SAndroid Build Coastguard Worker 	 * For each thread, just use thread group ID for buffer offset.
187*d83cc019SAndroid Build Coastguard Worker 	 */
188*d83cc019SAndroid Build Coastguard Worker 	curbe_buffer = gen7_fill_curbe_buffer_data(batch, color);
189*d83cc019SAndroid Build Coastguard Worker 
190*d83cc019SAndroid Build Coastguard Worker 	interface_descriptor = gen8_fill_interface_descriptor(batch, dst,
191*d83cc019SAndroid Build Coastguard Worker 				gen8_gpgpu_kernel, sizeof(gen8_gpgpu_kernel));
192*d83cc019SAndroid Build Coastguard Worker 
193*d83cc019SAndroid Build Coastguard Worker 	igt_assert(batch->ptr < &batch->buffer[4095]);
194*d83cc019SAndroid Build Coastguard Worker 
195*d83cc019SAndroid Build Coastguard Worker 	batch->ptr = batch->buffer;
196*d83cc019SAndroid Build Coastguard Worker 
197*d83cc019SAndroid Build Coastguard Worker 	/* GPGPU pipeline */
198*d83cc019SAndroid Build Coastguard Worker 	OUT_BATCH(GEN7_PIPELINE_SELECT | PIPELINE_SELECT_GPGPU);
199*d83cc019SAndroid Build Coastguard Worker 
200*d83cc019SAndroid Build Coastguard Worker 	gen8_emit_state_base_address(batch);
201*d83cc019SAndroid Build Coastguard Worker 	gen8_emit_vfe_state(batch, THREADS, GEN8_GPGPU_URB_ENTRIES,
202*d83cc019SAndroid Build Coastguard Worker 			    GPGPU_URB_SIZE, GPGPU_CURBE_SIZE);
203*d83cc019SAndroid Build Coastguard Worker 	gen7_emit_curbe_load(batch, curbe_buffer);
204*d83cc019SAndroid Build Coastguard Worker 	gen7_emit_interface_descriptor_load(batch, interface_descriptor);
205*d83cc019SAndroid Build Coastguard Worker 	gen8_emit_gpgpu_walk(batch, x, y, width, height);
206*d83cc019SAndroid Build Coastguard Worker 
207*d83cc019SAndroid Build Coastguard Worker 	OUT_BATCH(MI_BATCH_BUFFER_END);
208*d83cc019SAndroid Build Coastguard Worker 
209*d83cc019SAndroid Build Coastguard Worker 	batch_end = intel_batchbuffer_align(batch, 8);
210*d83cc019SAndroid Build Coastguard Worker 	igt_assert(batch_end < BATCH_STATE_SPLIT);
211*d83cc019SAndroid Build Coastguard Worker 
212*d83cc019SAndroid Build Coastguard Worker 	gen7_render_flush(batch, batch_end);
213*d83cc019SAndroid Build Coastguard Worker 	intel_batchbuffer_reset(batch);
214*d83cc019SAndroid Build Coastguard Worker }
215*d83cc019SAndroid Build Coastguard Worker 
216*d83cc019SAndroid Build Coastguard Worker static void
__gen9_gpgpu_fillfunc(struct intel_batchbuffer * batch,const struct igt_buf * dst,unsigned int x,unsigned int y,unsigned int width,unsigned int height,uint8_t color,const uint32_t kernel[][4],size_t kernel_size)217*d83cc019SAndroid Build Coastguard Worker __gen9_gpgpu_fillfunc(struct intel_batchbuffer *batch,
218*d83cc019SAndroid Build Coastguard Worker 		      const struct igt_buf *dst,
219*d83cc019SAndroid Build Coastguard Worker 		      unsigned int x, unsigned int y,
220*d83cc019SAndroid Build Coastguard Worker 		      unsigned int width, unsigned int height,
221*d83cc019SAndroid Build Coastguard Worker 		      uint8_t color, const uint32_t kernel[][4],
222*d83cc019SAndroid Build Coastguard Worker 		      size_t kernel_size)
223*d83cc019SAndroid Build Coastguard Worker {
224*d83cc019SAndroid Build Coastguard Worker 	uint32_t curbe_buffer, interface_descriptor;
225*d83cc019SAndroid Build Coastguard Worker 	uint32_t batch_end;
226*d83cc019SAndroid Build Coastguard Worker 
227*d83cc019SAndroid Build Coastguard Worker 	intel_batchbuffer_flush(batch);
228*d83cc019SAndroid Build Coastguard Worker 
229*d83cc019SAndroid Build Coastguard Worker 	/* setup states */
230*d83cc019SAndroid Build Coastguard Worker 	batch->ptr = &batch->buffer[BATCH_STATE_SPLIT];
231*d83cc019SAndroid Build Coastguard Worker 
232*d83cc019SAndroid Build Coastguard Worker 	/*
233*d83cc019SAndroid Build Coastguard Worker 	 * const buffer needs to fill for every thread, but as we have just 1
234*d83cc019SAndroid Build Coastguard Worker 	 * thread per every group, so need only one curbe data.
235*d83cc019SAndroid Build Coastguard Worker 	 * For each thread, just use thread group ID for buffer offset.
236*d83cc019SAndroid Build Coastguard Worker 	 */
237*d83cc019SAndroid Build Coastguard Worker 	curbe_buffer = gen7_fill_curbe_buffer_data(batch, color);
238*d83cc019SAndroid Build Coastguard Worker 
239*d83cc019SAndroid Build Coastguard Worker 	interface_descriptor = gen8_fill_interface_descriptor(batch, dst,
240*d83cc019SAndroid Build Coastguard Worker 				kernel, kernel_size);
241*d83cc019SAndroid Build Coastguard Worker 
242*d83cc019SAndroid Build Coastguard Worker 	igt_assert(batch->ptr < &batch->buffer[4095]);
243*d83cc019SAndroid Build Coastguard Worker 
244*d83cc019SAndroid Build Coastguard Worker 	batch->ptr = batch->buffer;
245*d83cc019SAndroid Build Coastguard Worker 
246*d83cc019SAndroid Build Coastguard Worker 	/* GPGPU pipeline */
247*d83cc019SAndroid Build Coastguard Worker 	OUT_BATCH(GEN7_PIPELINE_SELECT | GEN9_PIPELINE_SELECTION_MASK |
248*d83cc019SAndroid Build Coastguard Worker 		  PIPELINE_SELECT_GPGPU);
249*d83cc019SAndroid Build Coastguard Worker 
250*d83cc019SAndroid Build Coastguard Worker 	gen9_emit_state_base_address(batch);
251*d83cc019SAndroid Build Coastguard Worker 	gen8_emit_vfe_state(batch, THREADS, GEN8_GPGPU_URB_ENTRIES,
252*d83cc019SAndroid Build Coastguard Worker 			    GPGPU_URB_SIZE, GPGPU_CURBE_SIZE);
253*d83cc019SAndroid Build Coastguard Worker 	gen7_emit_curbe_load(batch, curbe_buffer);
254*d83cc019SAndroid Build Coastguard Worker 	gen7_emit_interface_descriptor_load(batch, interface_descriptor);
255*d83cc019SAndroid Build Coastguard Worker 	gen8_emit_gpgpu_walk(batch, x, y, width, height);
256*d83cc019SAndroid Build Coastguard Worker 
257*d83cc019SAndroid Build Coastguard Worker 	OUT_BATCH(MI_BATCH_BUFFER_END);
258*d83cc019SAndroid Build Coastguard Worker 
259*d83cc019SAndroid Build Coastguard Worker 	batch_end = intel_batchbuffer_align(batch, 8);
260*d83cc019SAndroid Build Coastguard Worker 	igt_assert(batch_end < BATCH_STATE_SPLIT);
261*d83cc019SAndroid Build Coastguard Worker 
262*d83cc019SAndroid Build Coastguard Worker 	gen7_render_flush(batch, batch_end);
263*d83cc019SAndroid Build Coastguard Worker 	intel_batchbuffer_reset(batch);
264*d83cc019SAndroid Build Coastguard Worker }
265*d83cc019SAndroid Build Coastguard Worker 
gen9_gpgpu_fillfunc(struct intel_batchbuffer * batch,const struct igt_buf * dst,unsigned int x,unsigned int y,unsigned int width,unsigned int height,uint8_t color)266*d83cc019SAndroid Build Coastguard Worker void gen9_gpgpu_fillfunc(struct intel_batchbuffer *batch,
267*d83cc019SAndroid Build Coastguard Worker 			 const struct igt_buf *dst,
268*d83cc019SAndroid Build Coastguard Worker 			 unsigned int x, unsigned int y,
269*d83cc019SAndroid Build Coastguard Worker 			 unsigned int width, unsigned int height,
270*d83cc019SAndroid Build Coastguard Worker 			 uint8_t color)
271*d83cc019SAndroid Build Coastguard Worker {
272*d83cc019SAndroid Build Coastguard Worker 	__gen9_gpgpu_fillfunc(batch, dst, x, y, width, height, color,
273*d83cc019SAndroid Build Coastguard Worker 			      gen9_gpgpu_kernel, sizeof(gen9_gpgpu_kernel));
274*d83cc019SAndroid Build Coastguard Worker }
275*d83cc019SAndroid Build Coastguard Worker 
gen11_gpgpu_fillfunc(struct intel_batchbuffer * batch,const struct igt_buf * dst,unsigned int x,unsigned int y,unsigned int width,unsigned int height,uint8_t color)276*d83cc019SAndroid Build Coastguard Worker void gen11_gpgpu_fillfunc(struct intel_batchbuffer *batch,
277*d83cc019SAndroid Build Coastguard Worker 			  const struct igt_buf *dst,
278*d83cc019SAndroid Build Coastguard Worker 			  unsigned int x, unsigned int y,
279*d83cc019SAndroid Build Coastguard Worker 			  unsigned int width, unsigned int height,
280*d83cc019SAndroid Build Coastguard Worker 			  uint8_t color)
281*d83cc019SAndroid Build Coastguard Worker {
282*d83cc019SAndroid Build Coastguard Worker 	__gen9_gpgpu_fillfunc(batch, dst, x, y, width, height, color,
283*d83cc019SAndroid Build Coastguard Worker 			      gen11_gpgpu_kernel, sizeof(gen11_gpgpu_kernel));
284*d83cc019SAndroid Build Coastguard Worker }
285