OSDN Git Service

i965: If control_data_header_size_bits is zero, don't do EndPrimitive
[android-x86/external-mesa.git] / src / mesa / drivers / dri / i965 / brw_vec4_gs_visitor.cpp
1 /*
2  * Copyright © 2013 Intel Corporation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21  * DEALINGS IN THE SOFTWARE.
22  */
23
24 /**
25  * \file brw_vec4_gs_visitor.cpp
26  *
27  * Geometry-shader-specific code derived from the vec4_visitor class.
28  */
29
30 #include "brw_vec4_gs_visitor.h"
31 #include "gen6_gs_visitor.h"
32 #include "brw_fs.h"
33 #include "brw_nir.h"
34
35 namespace brw {
36
37 vec4_gs_visitor::vec4_gs_visitor(const struct brw_compiler *compiler,
38                                  void *log_data,
39                                  struct brw_gs_compile *c,
40                                  struct brw_gs_prog_data *prog_data,
41                                  const nir_shader *shader,
42                                  void *mem_ctx,
43                                  bool no_spills,
44                                  int shader_time_index)
45    : vec4_visitor(compiler, log_data, &c->key.tex,
46                   &prog_data->base, shader,  mem_ctx,
47                   no_spills, shader_time_index),
48      c(c),
49      gs_prog_data(prog_data)
50 {
51 }
52
53
54 dst_reg *
55 vec4_gs_visitor::make_reg_for_system_value(int location)
56 {
57    dst_reg *reg = new(mem_ctx) dst_reg(this, glsl_type::int_type);
58
59    switch (location) {
60    case SYSTEM_VALUE_INVOCATION_ID:
61       this->current_annotation = "initialize gl_InvocationID";
62       emit(GS_OPCODE_GET_INSTANCE_ID, *reg);
63       break;
64    default:
65       unreachable("not reached");
66    }
67
68    return reg;
69 }
70
71
72 int
73 vec4_gs_visitor::setup_varying_inputs(int payload_reg, int *attribute_map,
74                                       int attributes_per_reg)
75 {
76    /* For geometry shaders there are N copies of the input attributes, where N
77     * is the number of input vertices.  attribute_map[BRW_VARYING_SLOT_COUNT *
78     * i + j] represents attribute j for vertex i.
79     *
80     * Note that GS inputs are read from the VUE 256 bits (2 vec4's) at a time,
81     * so the total number of input slots that will be delivered to the GS (and
82     * thus the stride of the input arrays) is urb_read_length * 2.
83     */
84    const unsigned num_input_vertices = nir->info.gs.vertices_in;
85    assert(num_input_vertices <= MAX_GS_INPUT_VERTICES);
86    unsigned input_array_stride = prog_data->urb_read_length * 2;
87
88    for (int slot = 0; slot < c->input_vue_map.num_slots; slot++) {
89       int varying = c->input_vue_map.slot_to_varying[slot];
90       for (unsigned vertex = 0; vertex < num_input_vertices; vertex++) {
91          attribute_map[BRW_VARYING_SLOT_COUNT * vertex + varying] =
92             attributes_per_reg * payload_reg + input_array_stride * vertex +
93             slot;
94       }
95    }
96
97    int regs_used = ALIGN(input_array_stride * num_input_vertices,
98                          attributes_per_reg) / attributes_per_reg;
99    return payload_reg + regs_used;
100 }
101
102
103 void
104 vec4_gs_visitor::setup_payload()
105 {
106    int attribute_map[BRW_VARYING_SLOT_COUNT * MAX_GS_INPUT_VERTICES];
107
108    /* If we are in dual instanced or single mode, then attributes are going
109     * to be interleaved, so one register contains two attribute slots.
110     */
111    int attributes_per_reg =
112       prog_data->dispatch_mode == DISPATCH_MODE_4X2_DUAL_OBJECT ? 1 : 2;
113
114    /* If a geometry shader tries to read from an input that wasn't written by
115     * the vertex shader, that produces undefined results, but it shouldn't
116     * crash anything.  So initialize attribute_map to zeros--that ensures that
117     * these undefined results are read from r0.
118     */
119    memset(attribute_map, 0, sizeof(attribute_map));
120
121    int reg = 0;
122
123    /* The payload always contains important data in r0, which contains
124     * the URB handles that are passed on to the URB write at the end
125     * of the thread.
126     */
127    reg++;
128
129    /* If the shader uses gl_PrimitiveIDIn, that goes in r1. */
130    if (gs_prog_data->include_primitive_id)
131       attribute_map[VARYING_SLOT_PRIMITIVE_ID] = attributes_per_reg * reg++;
132
133    reg = setup_uniforms(reg);
134
135    reg = setup_varying_inputs(reg, attribute_map, attributes_per_reg);
136
137    lower_attributes_to_hw_regs(attribute_map, attributes_per_reg > 1);
138
139    this->first_non_payload_grf = reg;
140 }
141
142
143 void
144 vec4_gs_visitor::emit_prolog()
145 {
146    /* In vertex shaders, r0.2 is guaranteed to be initialized to zero.  In
147     * geometry shaders, it isn't (it contains a bunch of information we don't
148     * need, like the input primitive type).  We need r0.2 to be zero in order
149     * to build scratch read/write messages correctly (otherwise this value
150     * will be interpreted as a global offset, causing us to do our scratch
151     * reads/writes to garbage memory).  So just set it to zero at the top of
152     * the shader.
153     */
154    this->current_annotation = "clear r0.2";
155    dst_reg r0(retype(brw_vec4_grf(0, 0), BRW_REGISTER_TYPE_UD));
156    vec4_instruction *inst = emit(GS_OPCODE_SET_DWORD_2, r0, brw_imm_ud(0u));
157    inst->force_writemask_all = true;
158
159    /* Create a virtual register to hold the vertex count */
160    this->vertex_count = src_reg(this, glsl_type::uint_type);
161
162    /* Initialize the vertex_count register to 0 */
163    this->current_annotation = "initialize vertex_count";
164    inst = emit(MOV(dst_reg(this->vertex_count), brw_imm_ud(0u)));
165    inst->force_writemask_all = true;
166
167    if (c->control_data_header_size_bits > 0) {
168       /* Create a virtual register to hold the current set of control data
169        * bits.
170        */
171       this->control_data_bits = src_reg(this, glsl_type::uint_type);
172
173       /* If we're outputting more than 32 control data bits, then EmitVertex()
174        * will set control_data_bits to 0 after emitting the first vertex.
175        * Otherwise, we need to initialize it to 0 here.
176        */
177       if (c->control_data_header_size_bits <= 32) {
178          this->current_annotation = "initialize control data bits";
179          inst = emit(MOV(dst_reg(this->control_data_bits), brw_imm_ud(0u)));
180          inst->force_writemask_all = true;
181       }
182    }
183
184    this->current_annotation = NULL;
185 }
186
187 void
188 vec4_gs_visitor::emit_thread_end()
189 {
190    if (c->control_data_header_size_bits > 0) {
191       /* During shader execution, we only ever call emit_control_data_bits()
192        * just prior to outputting a vertex.  Therefore, the control data bits
193        * corresponding to the most recently output vertex still need to be
194        * emitted.
195        */
196       current_annotation = "thread end: emit control data bits";
197       emit_control_data_bits();
198    }
199
200    /* MRF 0 is reserved for the debugger, so start with message header
201     * in MRF 1.
202     */
203    int base_mrf = 1;
204
205    bool static_vertex_count = gs_prog_data->static_vertex_count != -1;
206
207    /* If the previous instruction was a URB write, we don't need to issue
208     * a second one - we can just set the EOT bit on the previous write.
209     *
210     * Skip this on Gen8+ unless there's a static vertex count, as we also
211     * need to write the vertex count out, and combining the two may not be
212     * possible (or at least not straightforward).
213     */
214    vec4_instruction *last = (vec4_instruction *) instructions.get_tail();
215    if (last && last->opcode == GS_OPCODE_URB_WRITE &&
216        !(INTEL_DEBUG & DEBUG_SHADER_TIME) &&
217        devinfo->gen >= 8 && static_vertex_count) {
218       last->urb_write_flags = BRW_URB_WRITE_EOT | last->urb_write_flags;
219       return;
220    }
221
222    current_annotation = "thread end";
223    dst_reg mrf_reg(MRF, base_mrf);
224    src_reg r0(retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UD));
225    vec4_instruction *inst = emit(MOV(mrf_reg, r0));
226    inst->force_writemask_all = true;
227    if (devinfo->gen < 8 || !static_vertex_count)
228       emit(GS_OPCODE_SET_VERTEX_COUNT, mrf_reg, this->vertex_count);
229    if (INTEL_DEBUG & DEBUG_SHADER_TIME)
230       emit_shader_time_end();
231    inst = emit(GS_OPCODE_THREAD_END);
232    inst->base_mrf = base_mrf;
233    inst->mlen = devinfo->gen >= 8 && !static_vertex_count ? 2 : 1;
234 }
235
236
237 void
238 vec4_gs_visitor::emit_urb_write_header(int mrf)
239 {
240    /* The SEND instruction that writes the vertex data to the VUE will use
241     * per_slot_offset=true, which means that DWORDs 3 and 4 of the message
242     * header specify an offset (in multiples of 256 bits) into the URB entry
243     * at which the write should take place.
244     *
245     * So we have to prepare a message header with the appropriate offset
246     * values.
247     */
248    dst_reg mrf_reg(MRF, mrf);
249    src_reg r0(retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UD));
250    this->current_annotation = "URB write header";
251    vec4_instruction *inst = emit(MOV(mrf_reg, r0));
252    inst->force_writemask_all = true;
253    emit(GS_OPCODE_SET_WRITE_OFFSET, mrf_reg, this->vertex_count,
254         brw_imm_ud(gs_prog_data->output_vertex_size_hwords));
255 }
256
257
258 vec4_instruction *
259 vec4_gs_visitor::emit_urb_write_opcode(bool complete)
260 {
261    /* We don't care whether the vertex is complete, because in general
262     * geometry shaders output multiple vertices, and we don't terminate the
263     * thread until all vertices are complete.
264     */
265    (void) complete;
266
267    vec4_instruction *inst = emit(GS_OPCODE_URB_WRITE);
268    inst->offset = gs_prog_data->control_data_header_size_hwords;
269
270    /* We need to increment Global Offset by 1 to make room for Broadwell's
271     * extra "Vertex Count" payload at the beginning of the URB entry.
272     */
273    if (devinfo->gen >= 8 && gs_prog_data->static_vertex_count == -1)
274       inst->offset++;
275
276    inst->urb_write_flags = BRW_URB_WRITE_PER_SLOT_OFFSET;
277    return inst;
278 }
279
280
281 /**
282  * Write out a batch of 32 control data bits from the control_data_bits
283  * register to the URB.
284  *
285  * The current value of the vertex_count register determines which DWORD in
286  * the URB receives the control data bits.  The control_data_bits register is
287  * assumed to contain the correct data for the vertex that was most recently
288  * output, and all previous vertices that share the same DWORD.
289  *
290  * This function takes care of ensuring that if no vertices have been output
291  * yet, no control bits are emitted.
292  */
293 void
294 vec4_gs_visitor::emit_control_data_bits()
295 {
296    assert(c->control_data_bits_per_vertex != 0);
297
298    /* Since the URB_WRITE_OWORD message operates with 128-bit (vec4 sized)
299     * granularity, we need to use two tricks to ensure that the batch of 32
300     * control data bits is written to the appropriate DWORD in the URB.  To
301     * select which vec4 we are writing to, we use the "slot {0,1} offset"
302     * fields of the message header.  To select which DWORD in the vec4 we are
303     * writing to, we use the channel mask fields of the message header.  To
304     * avoid penalizing geometry shaders that emit a small number of vertices
305     * with extra bookkeeping, we only do each of these tricks when
306     * c->prog_data.control_data_header_size_bits is large enough to make it
307     * necessary.
308     *
309     * Note: this means that if we're outputting just a single DWORD of control
310     * data bits, we'll actually replicate it four times since we won't do any
311     * channel masking.  But that's not a problem since in this case the
312     * hardware only pays attention to the first DWORD.
313     */
314    enum brw_urb_write_flags urb_write_flags = BRW_URB_WRITE_OWORD;
315    if (c->control_data_header_size_bits > 32)
316       urb_write_flags = urb_write_flags | BRW_URB_WRITE_USE_CHANNEL_MASKS;
317    if (c->control_data_header_size_bits > 128)
318       urb_write_flags = urb_write_flags | BRW_URB_WRITE_PER_SLOT_OFFSET;
319
320    /* If we are using either channel masks or a per-slot offset, then we
321     * need to figure out which DWORD we are trying to write to, using the
322     * formula:
323     *
324     *     dword_index = (vertex_count - 1) * bits_per_vertex / 32
325     *
326     * Since bits_per_vertex is a power of two, and is known at compile
327     * time, this can be optimized to:
328     *
329     *     dword_index = (vertex_count - 1) >> (6 - log2(bits_per_vertex))
330     */
331    src_reg dword_index(this, glsl_type::uint_type);
332    if (urb_write_flags) {
333       src_reg prev_count(this, glsl_type::uint_type);
334       emit(ADD(dst_reg(prev_count), this->vertex_count,
335                brw_imm_ud(0xffffffffu)));
336       unsigned log2_bits_per_vertex =
337          _mesa_fls(c->control_data_bits_per_vertex);
338       emit(SHR(dst_reg(dword_index), prev_count,
339                brw_imm_ud(6 - log2_bits_per_vertex)));
340    }
341
342    /* Start building the URB write message.  The first MRF gets a copy of
343     * R0.
344     */
345    int base_mrf = 1;
346    dst_reg mrf_reg(MRF, base_mrf);
347    src_reg r0(retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UD));
348    vec4_instruction *inst = emit(MOV(mrf_reg, r0));
349    inst->force_writemask_all = true;
350
351    if (urb_write_flags & BRW_URB_WRITE_PER_SLOT_OFFSET) {
352       /* Set the per-slot offset to dword_index / 4, to that we'll write to
353        * the appropriate OWORD within the control data header.
354        */
355       src_reg per_slot_offset(this, glsl_type::uint_type);
356       emit(SHR(dst_reg(per_slot_offset), dword_index, brw_imm_ud(2u)));
357       emit(GS_OPCODE_SET_WRITE_OFFSET, mrf_reg, per_slot_offset,
358            brw_imm_ud(1u));
359    }
360
361    if (urb_write_flags & BRW_URB_WRITE_USE_CHANNEL_MASKS) {
362       /* Set the channel masks to 1 << (dword_index % 4), so that we'll
363        * write to the appropriate DWORD within the OWORD.  We need to do
364        * this computation with force_writemask_all, otherwise garbage data
365        * from invocation 0 might clobber the mask for invocation 1 when
366        * GS_OPCODE_PREPARE_CHANNEL_MASKS tries to OR the two masks
367        * together.
368        */
369       src_reg channel(this, glsl_type::uint_type);
370       inst = emit(AND(dst_reg(channel), dword_index, brw_imm_ud(3u)));
371       inst->force_writemask_all = true;
372       src_reg one(this, glsl_type::uint_type);
373       inst = emit(MOV(dst_reg(one), brw_imm_ud(1u)));
374       inst->force_writemask_all = true;
375       src_reg channel_mask(this, glsl_type::uint_type);
376       inst = emit(SHL(dst_reg(channel_mask), one, channel));
377       inst->force_writemask_all = true;
378       emit(GS_OPCODE_PREPARE_CHANNEL_MASKS, dst_reg(channel_mask),
379                                             channel_mask);
380       emit(GS_OPCODE_SET_CHANNEL_MASKS, mrf_reg, channel_mask);
381    }
382
383    /* Store the control data bits in the message payload and send it. */
384    dst_reg mrf_reg2(MRF, base_mrf + 1);
385    inst = emit(MOV(mrf_reg2, this->control_data_bits));
386    inst->force_writemask_all = true;
387    inst = emit(GS_OPCODE_URB_WRITE);
388    inst->urb_write_flags = urb_write_flags;
389    /* We need to increment Global Offset by 256-bits to make room for
390     * Broadwell's extra "Vertex Count" payload at the beginning of the
391     * URB entry.  Since this is an OWord message, Global Offset is counted
392     * in 128-bit units, so we must set it to 2.
393     */
394    if (devinfo->gen >= 8 && gs_prog_data->static_vertex_count == -1)
395       inst->offset = 2;
396    inst->base_mrf = base_mrf;
397    inst->mlen = 2;
398 }
399
400 void
401 vec4_gs_visitor::set_stream_control_data_bits(unsigned stream_id)
402 {
403    /* control_data_bits |= stream_id << ((2 * (vertex_count - 1)) % 32) */
404
405    /* Note: we are calling this *before* increasing vertex_count, so
406     * this->vertex_count == vertex_count - 1 in the formula above.
407     */
408
409    /* Stream mode uses 2 bits per vertex */
410    assert(c->control_data_bits_per_vertex == 2);
411
412    /* Must be a valid stream */
413    assert(stream_id >= 0 && stream_id < MAX_VERTEX_STREAMS);
414
415    /* Control data bits are initialized to 0 so we don't have to set any
416     * bits when sending vertices to stream 0.
417     */
418    if (stream_id == 0)
419       return;
420
421    /* reg::sid = stream_id */
422    src_reg sid(this, glsl_type::uint_type);
423    emit(MOV(dst_reg(sid), brw_imm_ud(stream_id)));
424
425    /* reg:shift_count = 2 * (vertex_count - 1) */
426    src_reg shift_count(this, glsl_type::uint_type);
427    emit(SHL(dst_reg(shift_count), this->vertex_count, brw_imm_ud(1u)));
428
429    /* Note: we're relying on the fact that the GEN SHL instruction only pays
430     * attention to the lower 5 bits of its second source argument, so on this
431     * architecture, stream_id << 2 * (vertex_count - 1) is equivalent to
432     * stream_id << ((2 * (vertex_count - 1)) % 32).
433     */
434    src_reg mask(this, glsl_type::uint_type);
435    emit(SHL(dst_reg(mask), sid, shift_count));
436    emit(OR(dst_reg(this->control_data_bits), this->control_data_bits, mask));
437 }
438
439 void
440 vec4_gs_visitor::gs_emit_vertex(int stream_id)
441 {
442    this->current_annotation = "emit vertex: safety check";
443
444    /* Haswell and later hardware ignores the "Render Stream Select" bits
445     * from the 3DSTATE_STREAMOUT packet when the SOL stage is disabled,
446     * and instead sends all primitives down the pipeline for rasterization.
447     * If the SOL stage is enabled, "Render Stream Select" is honored and
448     * primitives bound to non-zero streams are discarded after stream output.
449     *
450     * Since the only purpose of primives sent to non-zero streams is to
451     * be recorded by transform feedback, we can simply discard all geometry
452     * bound to these streams when transform feedback is disabled.
453     */
454    if (stream_id > 0 && !nir->info.has_transform_feedback_varyings)
455       return;
456
457    /* If we're outputting 32 control data bits or less, then we can wait
458     * until the shader is over to output them all.  Otherwise we need to
459     * output them as we go.  Now is the time to do it, since we're about to
460     * output the vertex_count'th vertex, so it's guaranteed that the
461     * control data bits associated with the (vertex_count - 1)th vertex are
462     * correct.
463     */
464    if (c->control_data_header_size_bits > 32) {
465       this->current_annotation = "emit vertex: emit control data bits";
466       /* Only emit control data bits if we've finished accumulating a batch
467        * of 32 bits.  This is the case when:
468        *
469        *     (vertex_count * bits_per_vertex) % 32 == 0
470        *
471        * (in other words, when the last 5 bits of vertex_count *
472        * bits_per_vertex are 0).  Assuming bits_per_vertex == 2^n for some
473        * integer n (which is always the case, since bits_per_vertex is
474        * always 1 or 2), this is equivalent to requiring that the last 5-n
475        * bits of vertex_count are 0:
476        *
477        *     vertex_count & (2^(5-n) - 1) == 0
478        *
479        * 2^(5-n) == 2^5 / 2^n == 32 / bits_per_vertex, so this is
480        * equivalent to:
481        *
482        *     vertex_count & (32 / bits_per_vertex - 1) == 0
483        */
484       vec4_instruction *inst =
485          emit(AND(dst_null_ud(), this->vertex_count,
486                   brw_imm_ud(32 / c->control_data_bits_per_vertex - 1)));
487       inst->conditional_mod = BRW_CONDITIONAL_Z;
488
489       emit(IF(BRW_PREDICATE_NORMAL));
490       {
491          /* If vertex_count is 0, then no control data bits have been
492           * accumulated yet, so we skip emitting them.
493           */
494          emit(CMP(dst_null_ud(), this->vertex_count, brw_imm_ud(0u),
495                   BRW_CONDITIONAL_NEQ));
496          emit(IF(BRW_PREDICATE_NORMAL));
497          emit_control_data_bits();
498          emit(BRW_OPCODE_ENDIF);
499
500          /* Reset control_data_bits to 0 so we can start accumulating a new
501           * batch.
502           *
503           * Note: in the case where vertex_count == 0, this neutralizes the
504           * effect of any call to EndPrimitive() that the shader may have
505           * made before outputting its first vertex.
506           */
507          inst = emit(MOV(dst_reg(this->control_data_bits), brw_imm_ud(0u)));
508          inst->force_writemask_all = true;
509       }
510       emit(BRW_OPCODE_ENDIF);
511    }
512
513    this->current_annotation = "emit vertex: vertex data";
514    emit_vertex();
515
516    /* In stream mode we have to set control data bits for all vertices
517     * unless we have disabled control data bits completely (which we do
518     * do for GL_POINTS outputs that don't use streams).
519     */
520    if (c->control_data_header_size_bits > 0 &&
521        gs_prog_data->control_data_format ==
522           GEN7_GS_CONTROL_DATA_FORMAT_GSCTL_SID) {
523        this->current_annotation = "emit vertex: Stream control data bits";
524        set_stream_control_data_bits(stream_id);
525    }
526
527    this->current_annotation = NULL;
528 }
529
530 void
531 vec4_gs_visitor::gs_end_primitive()
532 {
533    /* We can only do EndPrimitive() functionality when the control data
534     * consists of cut bits.  Fortunately, the only time it isn't is when the
535     * output type is points, in which case EndPrimitive() is a no-op.
536     */
537    if (gs_prog_data->control_data_format !=
538        GEN7_GS_CONTROL_DATA_FORMAT_GSCTL_CUT) {
539       return;
540    }
541
542    if (c->control_data_header_size_bits == 0)
543       return;
544
545    /* Cut bits use one bit per vertex. */
546    assert(c->control_data_bits_per_vertex == 1);
547
548    /* Cut bit n should be set to 1 if EndPrimitive() was called after emitting
549     * vertex n, 0 otherwise.  So all we need to do here is mark bit
550     * (vertex_count - 1) % 32 in the cut_bits register to indicate that
551     * EndPrimitive() was called after emitting vertex (vertex_count - 1);
552     * vec4_gs_visitor::emit_control_data_bits() will take care of the rest.
553     *
554     * Note that if EndPrimitve() is called before emitting any vertices, this
555     * will cause us to set bit 31 of the control_data_bits register to 1.
556     * That's fine because:
557     *
558     * - If max_vertices < 32, then vertex number 31 (zero-based) will never be
559     *   output, so the hardware will ignore cut bit 31.
560     *
561     * - If max_vertices == 32, then vertex number 31 is guaranteed to be the
562     *   last vertex, so setting cut bit 31 has no effect (since the primitive
563     *   is automatically ended when the GS terminates).
564     *
565     * - If max_vertices > 32, then the ir_emit_vertex visitor will reset the
566     *   control_data_bits register to 0 when the first vertex is emitted.
567     */
568
569    /* control_data_bits |= 1 << ((vertex_count - 1) % 32) */
570    src_reg one(this, glsl_type::uint_type);
571    emit(MOV(dst_reg(one), brw_imm_ud(1u)));
572    src_reg prev_count(this, glsl_type::uint_type);
573    emit(ADD(dst_reg(prev_count), this->vertex_count, brw_imm_ud(0xffffffffu)));
574    src_reg mask(this, glsl_type::uint_type);
575    /* Note: we're relying on the fact that the GEN SHL instruction only pays
576     * attention to the lower 5 bits of its second source argument, so on this
577     * architecture, 1 << (vertex_count - 1) is equivalent to 1 <<
578     * ((vertex_count - 1) % 32).
579     */
580    emit(SHL(dst_reg(mask), one, prev_count));
581    emit(OR(dst_reg(this->control_data_bits), this->control_data_bits, mask));
582 }
583
584 extern "C" const unsigned *
585 brw_compile_gs(const struct brw_compiler *compiler, void *log_data,
586                void *mem_ctx,
587                const struct brw_gs_prog_key *key,
588                struct brw_gs_prog_data *prog_data,
589                const nir_shader *src_shader,
590                struct gl_shader_program *shader_prog,
591                int shader_time_index,
592                unsigned *final_assembly_size,
593                char **error_str)
594 {
595    struct brw_gs_compile c;
596    memset(&c, 0, sizeof(c));
597    c.key = *key;
598
599    const bool is_scalar = compiler->scalar_stage[MESA_SHADER_GEOMETRY];
600    nir_shader *shader = nir_shader_clone(mem_ctx, src_shader);
601
602    /* The GLSL linker will have already matched up GS inputs and the outputs
603     * of prior stages.  The driver does extend VS outputs in some cases, but
604     * only for legacy OpenGL or Gen4-5 hardware, neither of which offer
605     * geometry shader support.  So we can safely ignore that.
606     *
607     * For SSO pipelines, we use a fixed VUE map layout based on variable
608     * locations, so we can rely on rendezvous-by-location making this work.
609     *
610     * However, we need to ignore VARYING_SLOT_PRIMITIVE_ID, as it's not
611     * written by previous stages and shows up via payload magic.
612     */
613    GLbitfield64 inputs_read =
614       shader->info.inputs_read & ~VARYING_BIT_PRIMITIVE_ID;
615    brw_compute_vue_map(compiler->devinfo,
616                        &c.input_vue_map, inputs_read,
617                        shader->info.separate_shader);
618
619    shader = brw_nir_apply_sampler_key(shader, compiler->devinfo, &key->tex,
620                                       is_scalar);
621    brw_nir_lower_vue_inputs(shader, is_scalar, &c.input_vue_map);
622    brw_nir_lower_vue_outputs(shader, is_scalar);
623    shader = brw_postprocess_nir(shader, compiler->devinfo, is_scalar);
624
625    prog_data->include_primitive_id =
626       (shader->info.inputs_read & VARYING_BIT_PRIMITIVE_ID) != 0;
627
628    prog_data->invocations = shader->info.gs.invocations;
629
630    if (compiler->devinfo->gen >= 8)
631       prog_data->static_vertex_count = nir_gs_count_vertices(shader);
632
633    if (compiler->devinfo->gen >= 7) {
634       if (shader->info.gs.output_primitive == GL_POINTS) {
635          /* When the output type is points, the geometry shader may output data
636           * to multiple streams, and EndPrimitive() has no effect.  So we
637           * configure the hardware to interpret the control data as stream ID.
638           */
639          prog_data->control_data_format = GEN7_GS_CONTROL_DATA_FORMAT_GSCTL_SID;
640
641          /* We only have to emit control bits if we are using streams */
642          if (shader_prog && shader_prog->Geom.UsesStreams)
643             c.control_data_bits_per_vertex = 2;
644          else
645             c.control_data_bits_per_vertex = 0;
646       } else {
647          /* When the output type is triangle_strip or line_strip, EndPrimitive()
648           * may be used to terminate the current strip and start a new one
649           * (similar to primitive restart), and outputting data to multiple
650           * streams is not supported.  So we configure the hardware to interpret
651           * the control data as EndPrimitive information (a.k.a. "cut bits").
652           */
653          prog_data->control_data_format = GEN7_GS_CONTROL_DATA_FORMAT_GSCTL_CUT;
654
655          /* We only need to output control data if the shader actually calls
656           * EndPrimitive().
657           */
658          c.control_data_bits_per_vertex =
659             shader->info.gs.uses_end_primitive ? 1 : 0;
660       }
661    } else {
662       /* There are no control data bits in gen6. */
663       c.control_data_bits_per_vertex = 0;
664
665       /* If it is using transform feedback, enable it */
666       if (shader->info.has_transform_feedback_varyings)
667          prog_data->gen6_xfb_enabled = true;
668       else
669          prog_data->gen6_xfb_enabled = false;
670    }
671    c.control_data_header_size_bits =
672       shader->info.gs.vertices_out * c.control_data_bits_per_vertex;
673
674    /* 1 HWORD = 32 bytes = 256 bits */
675    prog_data->control_data_header_size_hwords =
676       ALIGN(c.control_data_header_size_bits, 256) / 256;
677
678    /* Compute the output vertex size.
679     *
680     * From the Ivy Bridge PRM, Vol2 Part1 7.2.1.1 STATE_GS - Output Vertex
681     * Size (p168):
682     *
683     *     [0,62] indicating [1,63] 16B units
684     *
685     *     Specifies the size of each vertex stored in the GS output entry
686     *     (following any Control Header data) as a number of 128-bit units
687     *     (minus one).
688     *
689     *     Programming Restrictions: The vertex size must be programmed as a
690     *     multiple of 32B units with the following exception: Rendering is
691     *     disabled (as per SOL stage state) and the vertex size output by the
692     *     GS thread is 16B.
693     *
694     *     If rendering is enabled (as per SOL state) the vertex size must be
695     *     programmed as a multiple of 32B units. In other words, the only time
696     *     software can program a vertex size with an odd number of 16B units
697     *     is when rendering is disabled.
698     *
699     * Note: B=bytes in the above text.
700     *
701     * It doesn't seem worth the extra trouble to optimize the case where the
702     * vertex size is 16B (especially since this would require special-casing
703     * the GEN assembly that writes to the URB).  So we just set the vertex
704     * size to a multiple of 32B (2 vec4's) in all cases.
705     *
706     * The maximum output vertex size is 62*16 = 992 bytes (31 hwords).  We
707     * budget that as follows:
708     *
709     *   512 bytes for varyings (a varying component is 4 bytes and
710     *             gl_MaxGeometryOutputComponents = 128)
711     *    16 bytes overhead for VARYING_SLOT_PSIZ (each varying slot is 16
712     *             bytes)
713     *    16 bytes overhead for gl_Position (we allocate it a slot in the VUE
714     *             even if it's not used)
715     *    32 bytes overhead for gl_ClipDistance (we allocate it 2 VUE slots
716     *             whenever clip planes are enabled, even if the shader doesn't
717     *             write to gl_ClipDistance)
718     *    16 bytes overhead since the VUE size must be a multiple of 32 bytes
719     *             (see below)--this causes up to 1 VUE slot to be wasted
720     *   400 bytes available for varying packing overhead
721     *
722     * Worst-case varying packing overhead is 3/4 of a varying slot (12 bytes)
723     * per interpolation type, so this is plenty.
724     *
725     */
726    unsigned output_vertex_size_bytes = prog_data->base.vue_map.num_slots * 16;
727    assert(compiler->devinfo->gen == 6 ||
728           output_vertex_size_bytes <= GEN7_MAX_GS_OUTPUT_VERTEX_SIZE_BYTES);
729    prog_data->output_vertex_size_hwords =
730       ALIGN(output_vertex_size_bytes, 32) / 32;
731
732    /* Compute URB entry size.  The maximum allowed URB entry size is 32k.
733     * That divides up as follows:
734     *
735     *     64 bytes for the control data header (cut indices or StreamID bits)
736     *   4096 bytes for varyings (a varying component is 4 bytes and
737     *              gl_MaxGeometryTotalOutputComponents = 1024)
738     *   4096 bytes overhead for VARYING_SLOT_PSIZ (each varying slot is 16
739     *              bytes/vertex and gl_MaxGeometryOutputVertices is 256)
740     *   4096 bytes overhead for gl_Position (we allocate it a slot in the VUE
741     *              even if it's not used)
742     *   8192 bytes overhead for gl_ClipDistance (we allocate it 2 VUE slots
743     *              whenever clip planes are enabled, even if the shader doesn't
744     *              write to gl_ClipDistance)
745     *   4096 bytes overhead since the VUE size must be a multiple of 32
746     *              bytes (see above)--this causes up to 1 VUE slot to be wasted
747     *   8128 bytes available for varying packing overhead
748     *
749     * Worst-case varying packing overhead is 3/4 of a varying slot per
750     * interpolation type, which works out to 3072 bytes, so this would allow
751     * us to accommodate 2 interpolation types without any danger of running
752     * out of URB space.
753     *
754     * In practice, the risk of running out of URB space is very small, since
755     * the above figures are all worst-case, and most of them scale with the
756     * number of output vertices.  So we'll just calculate the amount of space
757     * we need, and if it's too large, fail to compile.
758     *
759     * The above is for gen7+ where we have a single URB entry that will hold
760     * all the output. In gen6, we will have to allocate URB entries for every
761     * vertex we emit, so our URB entries only need to be large enough to hold
762     * a single vertex. Also, gen6 does not have a control data header.
763     */
764    unsigned output_size_bytes;
765    if (compiler->devinfo->gen >= 7) {
766       output_size_bytes =
767          prog_data->output_vertex_size_hwords * 32 * shader->info.gs.vertices_out;
768       output_size_bytes += 32 * prog_data->control_data_header_size_hwords;
769    } else {
770       output_size_bytes = prog_data->output_vertex_size_hwords * 32;
771    }
772
773    /* Broadwell stores "Vertex Count" as a full 8 DWord (32 byte) URB output,
774     * which comes before the control header.
775     */
776    if (compiler->devinfo->gen >= 8)
777       output_size_bytes += 32;
778
779    assert(output_size_bytes >= 1);
780    unsigned max_output_size_bytes = GEN7_MAX_GS_URB_ENTRY_SIZE_BYTES;
781    if (compiler->devinfo->gen == 6)
782       max_output_size_bytes = GEN6_MAX_GS_URB_ENTRY_SIZE_BYTES;
783    if (output_size_bytes > max_output_size_bytes)
784       return NULL;
785
786
787    /* URB entry sizes are stored as a multiple of 64 bytes in gen7+ and
788     * a multiple of 128 bytes in gen6.
789     */
790    if (compiler->devinfo->gen >= 7)
791       prog_data->base.urb_entry_size = ALIGN(output_size_bytes, 64) / 64;
792    else
793       prog_data->base.urb_entry_size = ALIGN(output_size_bytes, 128) / 128;
794
795    prog_data->output_topology =
796       get_hw_prim_for_gl_prim(shader->info.gs.output_primitive);
797
798    prog_data->vertices_in = shader->info.gs.vertices_in;
799
800    /* GS inputs are read from the VUE 256 bits (2 vec4's) at a time, so we
801     * need to program a URB read length of ceiling(num_slots / 2).
802     */
803    prog_data->base.urb_read_length = (c.input_vue_map.num_slots + 1) / 2;
804
805    /* Now that prog_data setup is done, we are ready to actually compile the
806     * program.
807     */
808    if (unlikely(INTEL_DEBUG & DEBUG_GS)) {
809       fprintf(stderr, "GS Input ");
810       brw_print_vue_map(stderr, &c.input_vue_map);
811       fprintf(stderr, "GS Output ");
812       brw_print_vue_map(stderr, &prog_data->base.vue_map);
813    }
814
815    if (is_scalar) {
816       fs_visitor v(compiler, log_data, mem_ctx, &c, prog_data, shader,
817                    shader_time_index);
818       if (v.run_gs()) {
819          prog_data->base.dispatch_mode = DISPATCH_MODE_SIMD8;
820          prog_data->base.base.dispatch_grf_start_reg = v.payload.num_regs;
821
822          fs_generator g(compiler, log_data, mem_ctx, &c.key,
823                         &prog_data->base.base, v.promoted_constants,
824                         false, MESA_SHADER_GEOMETRY);
825          if (unlikely(INTEL_DEBUG & DEBUG_GS)) {
826             const char *label =
827                shader->info.label ? shader->info.label : "unnamed";
828             char *name = ralloc_asprintf(mem_ctx, "%s geometry shader %s",
829                                          label, shader->info.name);
830             g.enable_debug(name);
831          }
832          g.generate_code(v.cfg, 8);
833          return g.get_assembly(final_assembly_size);
834       }
835    }
836
837    if (compiler->devinfo->gen >= 7) {
838       /* Compile the geometry shader in DUAL_OBJECT dispatch mode, if we can do
839        * so without spilling. If the GS invocations count > 1, then we can't use
840        * dual object mode.
841        */
842       if (prog_data->invocations <= 1 &&
843           likely(!(INTEL_DEBUG & DEBUG_NO_DUAL_OBJECT_GS))) {
844          prog_data->base.dispatch_mode = DISPATCH_MODE_4X2_DUAL_OBJECT;
845
846          vec4_gs_visitor v(compiler, log_data, &c, prog_data, shader,
847                            mem_ctx, true /* no_spills */, shader_time_index);
848          if (v.run()) {
849             return brw_vec4_generate_assembly(compiler, log_data, mem_ctx,
850                                               shader, &prog_data->base, v.cfg,
851                                               final_assembly_size);
852          }
853       }
854    }
855
856    /* Either we failed to compile in DUAL_OBJECT mode (probably because it
857     * would have required spilling) or DUAL_OBJECT mode is disabled.  So fall
858     * back to DUAL_INSTANCED or SINGLE mode, which consumes fewer registers.
859     *
860     * FIXME: Single dispatch mode requires that the driver can handle
861     * interleaving of input registers, but this is already supported (dual
862     * instance mode has the same requirement). However, to take full advantage
863     * of single dispatch mode to reduce register pressure we would also need to
864     * do interleaved outputs, but currently, the vec4 visitor and generator
865     * classes do not support this, so at the moment register pressure in
866     * single and dual instance modes is the same.
867     *
868     * From the Ivy Bridge PRM, Vol2 Part1 7.2.1.1 "3DSTATE_GS"
869     * "If InstanceCount>1, DUAL_OBJECT mode is invalid. Software will likely
870     * want to use DUAL_INSTANCE mode for higher performance, but SINGLE mode
871     * is also supported. When InstanceCount=1 (one instance per object) software
872     * can decide which dispatch mode to use. DUAL_OBJECT mode would likely be
873     * the best choice for performance, followed by SINGLE mode."
874     *
875     * So SINGLE mode is more performant when invocations == 1 and DUAL_INSTANCE
876     * mode is more performant when invocations > 1. Gen6 only supports
877     * SINGLE mode.
878     */
879    if (prog_data->invocations <= 1 || compiler->devinfo->gen < 7)
880       prog_data->base.dispatch_mode = DISPATCH_MODE_4X1_SINGLE;
881    else
882       prog_data->base.dispatch_mode = DISPATCH_MODE_4X2_DUAL_INSTANCE;
883
884    vec4_gs_visitor *gs = NULL;
885    const unsigned *ret = NULL;
886
887    if (compiler->devinfo->gen >= 7)
888       gs = new vec4_gs_visitor(compiler, log_data, &c, prog_data,
889                                shader, mem_ctx, false /* no_spills */,
890                                shader_time_index);
891    else
892       gs = new gen6_gs_visitor(compiler, log_data, &c, prog_data, shader_prog,
893                                shader, mem_ctx, false /* no_spills */,
894                                shader_time_index);
895
896    if (!gs->run()) {
897       if (error_str)
898          *error_str = ralloc_strdup(mem_ctx, gs->fail_msg);
899    } else {
900       ret = brw_vec4_generate_assembly(compiler, log_data, mem_ctx, shader,
901                                        &prog_data->base, gs->cfg,
902                                        final_assembly_size);
903    }
904
905    delete gs;
906    return ret;
907 }
908
909
910 } /* namespace brw */