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