1bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke/*
2bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke * Copyright © 2011 Intel Corporation
3bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke *
4bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke * Permission is hereby granted, free of charge, to any person obtaining a
5bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke * copy of this software and associated documentation files (the "Software"),
6bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke * to deal in the Software without restriction, including without limitation
7bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke * and/or sell copies of the Software, and to permit persons to whom the
9bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke * Software is furnished to do so, subject to the following conditions:
10bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke *
11bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke * The above copyright notice and this permission notice (including the next
12bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke * paragraph) shall be included in all copies or substantial portions of the
13bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke * Software.
14bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke *
15bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke * IN THE SOFTWARE.
22bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke */
23bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke
24bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke#include "brw_context.h"
25bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke#include "brw_state.h"
26bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke#include "brw_defines.h"
27bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke#include "intel_batchbuffer.h"
28bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke
29bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunkestatic void
30bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunkedisable_stages(struct brw_context *brw)
31bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke{
32bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   struct intel_context *intel = &brw->intel;
33bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke
34c173541d9769d41a85cc899bc49699a3587df4bfEric Anholt   assert(!brw->gs.prog_active);
35bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke
36bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   /* Disable the Geometry Shader (GS) Unit */
37bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   BEGIN_BATCH(7);
38bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(_3DSTATE_CONSTANT_GS << 16 | (7 - 2));
39bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
40bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
41bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
42bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
43bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
44bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
45bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   ADVANCE_BATCH();
46bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke
47bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   BEGIN_BATCH(7);
48bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(_3DSTATE_GS << 16 | (7 - 2));
49bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0); /* prog_bo */
50bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH((0 << GEN6_GS_SAMPLER_COUNT_SHIFT) |
51bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke	     (0 << GEN6_GS_BINDING_TABLE_ENTRY_COUNT_SHIFT));
52bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0); /* scratch space base offset */
53bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH((1 << GEN6_GS_DISPATCH_START_GRF_SHIFT) |
54bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke	     (0 << GEN6_GS_URB_READ_LENGTH_SHIFT) |
55bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke	     GEN7_GS_INCLUDE_VERTEX_HANDLES |
56bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke	     (0 << GEN6_GS_URB_ENTRY_READ_OFFSET_SHIFT));
57bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH((0 << GEN6_GS_MAX_THREADS_SHIFT) |
58bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke	     GEN6_GS_STATISTICS_ENABLE);
59bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
60bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   ADVANCE_BATCH();
61bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke
62a94fe79464df088d8e26386d3f0db9a231bfdb61Kenneth Graunke   BEGIN_BATCH(2);
63a94fe79464df088d8e26386d3f0db9a231bfdb61Kenneth Graunke   OUT_BATCH(_3DSTATE_BINDING_TABLE_POINTERS_GS << 16 | (2 - 2));
64a94fe79464df088d8e26386d3f0db9a231bfdb61Kenneth Graunke   OUT_BATCH(0);
65a94fe79464df088d8e26386d3f0db9a231bfdb61Kenneth Graunke   ADVANCE_BATCH();
66a94fe79464df088d8e26386d3f0db9a231bfdb61Kenneth Graunke
67bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   /* Disable the HS Unit */
68bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   BEGIN_BATCH(7);
69bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(_3DSTATE_CONSTANT_HS << 16 | (7 - 2));
70bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
71bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
72bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
73bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
74bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
75bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
76bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   ADVANCE_BATCH();
77bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke
78bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   BEGIN_BATCH(7);
79bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(_3DSTATE_HS << 16 | (7 - 2));
80bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
81bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
82bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
83bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
84bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
85bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
86bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   ADVANCE_BATCH();
87bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke
88a94fe79464df088d8e26386d3f0db9a231bfdb61Kenneth Graunke   BEGIN_BATCH(2);
89a94fe79464df088d8e26386d3f0db9a231bfdb61Kenneth Graunke   OUT_BATCH(_3DSTATE_BINDING_TABLE_POINTERS_HS << 16 | (2 - 2));
90a94fe79464df088d8e26386d3f0db9a231bfdb61Kenneth Graunke   OUT_BATCH(0);
91a94fe79464df088d8e26386d3f0db9a231bfdb61Kenneth Graunke   ADVANCE_BATCH();
92a94fe79464df088d8e26386d3f0db9a231bfdb61Kenneth Graunke
93bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   /* Disable the TE */
94bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   BEGIN_BATCH(4);
95bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(_3DSTATE_TE << 16 | (4 - 2));
96bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
97bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
98bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
99bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   ADVANCE_BATCH();
100bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke
101bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   /* Disable the DS Unit */
102bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   BEGIN_BATCH(7);
103bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(_3DSTATE_CONSTANT_DS << 16 | (7 - 2));
104bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
105bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
106bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
107bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
108bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
109bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
110bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   ADVANCE_BATCH();
111bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke
112bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   BEGIN_BATCH(6);
113bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(_3DSTATE_DS << 16 | (6 - 2));
114bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
115bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
116bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
117bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
118bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   OUT_BATCH(0);
119bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   ADVANCE_BATCH();
120bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke
121a94fe79464df088d8e26386d3f0db9a231bfdb61Kenneth Graunke   BEGIN_BATCH(2);
122a94fe79464df088d8e26386d3f0db9a231bfdb61Kenneth Graunke   OUT_BATCH(_3DSTATE_BINDING_TABLE_POINTERS_DS << 16 | (2 - 2));
123a94fe79464df088d8e26386d3f0db9a231bfdb61Kenneth Graunke   OUT_BATCH(0);
124a94fe79464df088d8e26386d3f0db9a231bfdb61Kenneth Graunke   ADVANCE_BATCH();
125bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke}
126bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke
127bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunkeconst struct brw_tracked_state gen7_disable_stages = {
128bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   .dirty = {
129bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke      .mesa  = 0,
130bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke      .brw   = BRW_NEW_BATCH,
131bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke      .cache = 0,
132bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   },
133bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke   .emit = disable_stages,
134bac10b58de69108bdb2cc3358733e2648ab7c5d2Kenneth Graunke};
135