i915_state_dynamic.c revision e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6
17c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell/************************************************************************** 2f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz * 37c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. 47c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * All Rights Reserved. 5f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz * 67c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a 77c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * copy of this software and associated documentation files (the 87c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * "Software"), to deal in the Software without restriction, including 97c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * without limitation the rights to use, copy, modify, merge, publish, 107c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * distribute, sub license, and/or sell copies of the Software, and to 117c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * permit persons to whom the Software is furnished to do so, subject to 127c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * the following conditions: 13f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz * 147c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * The above copyright notice and this permission notice (including the 157c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * next paragraph) shall be included in all copies or substantial portions 167c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * of the Software. 17f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz * 187c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 197c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 207c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 217c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 227c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 237c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 247c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz * 267c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell **************************************************************************/ 277c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 287c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell#include "i915_batch.h" 297c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell#include "i915_state_inlines.h" 307c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell#include "i915_context.h" 317c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell#include "i915_reg.h" 327c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell#include "i915_state.h" 334f25420bdd834e81a3e22733304efc5261c2998aBrian Paul#include "util/u_math.h" 344f25420bdd834e81a3e22733304efc5261c2998aBrian Paul#include "util/u_memory.h" 354f25420bdd834e81a3e22733304efc5261c2998aBrian Paul#include "util/u_pack_color.h" 367c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 377c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell#define FILE_DEBUG_FLAG DEBUG_STATE 387c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 397c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell/* State that we have chosen to store in the DYNAMIC segment of the 40f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz * i915 indirect state mechanism. 417c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * 427c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * Can't cache these in the way we do the static state, as there is no 437c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * start/size in the command packet, instead an 'end' value that gets 447c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * incremented. 457c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * 467c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * Additionally, there seems to be a requirement to re-issue the full 477c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * (active) state every time a 4kb boundary is crossed. 487c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell */ 497c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 50f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantzstatic INLINE void set_dynamic_indirect(struct i915_context *i915, 51f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz unsigned offset, 52f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz const unsigned *src, 53f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz unsigned dwords) 547c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell{ 555961732c1b59403b4e736fa354a64d4a0e5d8af2Michal unsigned i; 567c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 577c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell for (i = 0; i < dwords; i++) 587c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell i915->current.dynamic[offset + i] = src[i]; 597c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 607c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell i915->hardware_dirty |= I915_HW_DYNAMIC; 617c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell} 627c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 637c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 64f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz 657c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell/*********************************************************************** 66f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz * Modes4: stencil masks and logicop 677c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell */ 68f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantzstatic void upload_MODES4(struct i915_context *i915) 697c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell{ 7040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned modes4 = 0; 717c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 72f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz /* I915_NEW_STENCIL 73f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz */ 741d8c31b47bd34a43e1f78a9f21a0c02c57c58479Zack Rusin modes4 |= i915->depth_stencil->stencil_modes4; 75f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz 76f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz /* I915_NEW_BLEND 77f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz */ 78b6d50abd7d483029469a0faaa28e8e2f2f742c6dZack Rusin modes4 |= i915->blend->modes4; 79b6d50abd7d483029469a0faaa28e8e2f2f742c6dZack Rusin 80f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz /* Always, so that we know when state is in-active: 817c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell */ 82f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz set_dynamic_indirect(i915, 83f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz I915_DYNAMIC_MODES4, 84f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz &modes4, 85f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz 1); 867c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell} 877c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 887c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwellconst struct i915_tracked_state i915_upload_MODES4 = { 89e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz "MODES4", 90e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz upload_MODES4, 91e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz I915_NEW_BLEND | I915_NEW_DEPTH_STENCIL 927c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell}; 937c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 947c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 957c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 967c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell/*********************************************************************** 977c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell */ 98f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantzstatic void upload_BFO(struct i915_context *i915) 997c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell{ 100388109c04dc92ed81d1dbe6209120c95bdbc83cdRoland Scheidegger unsigned bfo[2]; 101388109c04dc92ed81d1dbe6209120c95bdbc83cdRoland Scheidegger bfo[0] = i915->depth_stencil->bfo[0]; 102388109c04dc92ed81d1dbe6209120c95bdbc83cdRoland Scheidegger bfo[1] = i915->depth_stencil->bfo[1]; 103388109c04dc92ed81d1dbe6209120c95bdbc83cdRoland Scheidegger /* I don't get it only allowed to set a ref mask when the enable bit is set? */ 104388109c04dc92ed81d1dbe6209120c95bdbc83cdRoland Scheidegger if (bfo[0] & BFO_ENABLE_STENCIL_REF) { 105388109c04dc92ed81d1dbe6209120c95bdbc83cdRoland Scheidegger bfo[0] |= i915->stencil_ref.ref_value[1] << BFO_STENCIL_REF_SHIFT; 106388109c04dc92ed81d1dbe6209120c95bdbc83cdRoland Scheidegger } 107f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz 108f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz set_dynamic_indirect(i915, 109f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz I915_DYNAMIC_BFO_0, 110f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz &(bfo[0]), 111f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz 2); 1127c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell} 1137c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 1147c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwellconst struct i915_tracked_state i915_upload_BFO = { 115e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz "BFO", 116e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz upload_BFO, 117e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz I915_NEW_DEPTH_STENCIL 1187c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell}; 1197c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 1207c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 121f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz 1227c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell/*********************************************************************** 1237c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell */ 124f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantzstatic void upload_BLENDCOLOR(struct i915_context *i915) 1257c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell{ 12640a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned bc[2]; 1277c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 128f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz memset(bc, 0, sizeof(bc)); 1297c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 130f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz /* I915_NEW_BLEND 1317c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell */ 1327c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell { 13340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell const float *color = i915->blend_color.color; 1347c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 13540a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell bc[0] = _3DSTATE_CONST_BLEND_COLOR_CMD; 136f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz bc[1] = pack_ui32_float4(color[0], 137f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz color[1], 138f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz color[2], 139f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz color[3]); 1407c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell } 1417c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 142f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz set_dynamic_indirect(i915, 143f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz I915_DYNAMIC_BC_0, 144f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz bc, 145f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz 2); 1467c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell} 1477c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 1487c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwellconst struct i915_tracked_state i915_upload_BLENDCOLOR = { 149e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz "BLENDCOLOR", 150e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz upload_BLENDCOLOR, 151e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz I915_NEW_BLEND 1527c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell}; 1537c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 1547c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 1557c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 156f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz/*********************************************************************** 157f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz */ 158f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantzstatic void upload_IAB(struct i915_context *i915) 1597c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell{ 160b6d50abd7d483029469a0faaa28e8e2f2f742c6dZack Rusin unsigned iab = i915->blend->iab; 1617c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 162f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz set_dynamic_indirect(i915, 163f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz I915_DYNAMIC_IAB, 164f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz &iab, 165f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz 1); 1667c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell} 1677c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 1687c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwellconst struct i915_tracked_state i915_upload_IAB = { 169e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz "IAB", 170e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz upload_IAB, 171e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz I915_NEW_BLEND 1727c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell}; 1737c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 1747c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 175f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz 1767c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell/*********************************************************************** 1777c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell */ 178f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantzstatic void upload_DEPTHSCALE(struct i915_context *i915) 1797c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell{ 180f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz set_dynamic_indirect(i915, 181f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz I915_DYNAMIC_DEPTHSCALE_0, 182f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz &(i915->rasterizer->ds[0].u), 183f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz 2); 1847c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell} 1857c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 1867c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwellconst struct i915_tracked_state i915_upload_DEPTHSCALE = { 187e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz "DEPTHSCALE", 188e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz upload_DEPTHSCALE, 189e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz I915_NEW_RASTERIZER 1907c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell}; 1917c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 1927c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 1937c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 1947c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell/*********************************************************************** 1957c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * Polygon stipple 1967c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * 1977c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * The i915 supports a 4x4 stipple natively, GL wants 32x32. 1987c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * Fortunately stipple is usually a repeating pattern. 1997c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * 2007c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * XXX: does stipple pattern need to be adjusted according to 2017c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * the window position? 2027c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * 203f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz * XXX: possibly need workaround for conform paths test. 2047c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell */ 205f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantzstatic void upload_STIPPLE(struct i915_context *i915) 2067c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell{ 20740a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell unsigned st[2]; 2087c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 2097c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell st[0] = _3DSTATE_STIPPLE; 2107c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell st[1] = 0; 211cc2629f5912d1c608f830ab63f6c4e0875d2fcefZack Rusin 212cc2629f5912d1c608f830ab63f6c4e0875d2fcefZack Rusin /* I915_NEW_RASTERIZER 2137c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell */ 214cc2629f5912d1c608f830ab63f6c4e0875d2fcefZack Rusin st[1] |= i915->rasterizer->st; 2157c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 2167c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell /* I915_NEW_STIPPLE 2177c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell */ 2187c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell { 21940a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell const ubyte *mask = (const ubyte *)i915->poly_stipple.stipple; 22040a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell ubyte p[4]; 2217c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 2227c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell p[0] = mask[12] & 0xf; 2237c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell p[1] = mask[8] & 0xf; 2247c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell p[2] = mask[4] & 0xf; 2257c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell p[3] = mask[0] & 0xf; 2267c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 2277c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell /* Not sure what to do about fallbacks, so for now just dont: 2287c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell */ 2297c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell st[1] |= ((p[0] << 0) | 230f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz (p[1] << 4) | 231f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz (p[2] << 8) | 232f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz (p[3] << 12)); 2337c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell } 2347c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 235f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz set_dynamic_indirect(i915, 236f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz I915_DYNAMIC_STP_0, 237f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz &st[0], 238f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz 2); 2397c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell} 2407c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 2417c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwellconst struct i915_tracked_state i915_upload_STIPPLE = { 242e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz "STIPPLE", 243e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz upload_STIPPLE, 244e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz I915_NEW_RASTERIZER | I915_NEW_STIPPLE 2457c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell}; 2467c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 2477c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 2487c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 2497c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell/*********************************************************************** 250f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz * Scissor enable 2517c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell */ 2527c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwellstatic void upload_SCISSOR_ENABLE( struct i915_context *i915 ) 2537c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell{ 254f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz set_dynamic_indirect(i915, 255f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz I915_DYNAMIC_SC_ENA_0, 256f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz &(i915->rasterizer->sc[0]), 257f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz 1); 2587c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell} 2597c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 2607c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwellconst struct i915_tracked_state i915_upload_SCISSOR_ENABLE = { 261f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz "SCISSOR ENABLE", 262f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz upload_SCISSOR_ENABLE, 263f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz I915_NEW_RASTERIZER 2647c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell}; 2657c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 2667c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 2677c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 268f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz/*********************************************************************** 269f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz * Scissor rect 270f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz */ 271f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantzstatic void upload_SCISSOR_RECT(struct i915_context *i915) 2727c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell{ 2737c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell unsigned x1 = i915->scissor.minx; 2747c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell unsigned y1 = i915->scissor.miny; 2757c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell unsigned x2 = i915->scissor.maxx; 2767c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell unsigned y2 = i915->scissor.maxy; 2777c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell unsigned sc[3]; 278f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz 2797c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell sc[0] = _3DSTATE_SCISSOR_RECT_0_CMD; 2807c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell sc[1] = (y1 << 16) | (x1 & 0xffff); 2817c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell sc[2] = (y2 << 16) | (x2 & 0xffff); 2827c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 283f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz set_dynamic_indirect(i915, 284f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz I915_DYNAMIC_SC_RECT_0, 285f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz &sc[0], 286f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz 3); 2877c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell} 2887c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 2897c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwellconst struct i915_tracked_state i915_upload_SCISSOR_RECT = { 290e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz "SCISSOR RECT", 291e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz upload_SCISSOR_RECT, 292e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz I915_NEW_SCISSOR 2937c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell}; 2947c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 2957c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 2967c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 297f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz/*********************************************************************** 298f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz */ 2997c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwellstatic const struct i915_tracked_state *atoms[] = { 3007c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell &i915_upload_MODES4, 3017c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell &i915_upload_BFO, 3027c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell &i915_upload_BLENDCOLOR, 3037c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell &i915_upload_IAB, 3047c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell &i915_upload_DEPTHSCALE, 3057c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell &i915_upload_STIPPLE, 3067c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell &i915_upload_SCISSOR_ENABLE, 3077c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell &i915_upload_SCISSOR_RECT 3087c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell}; 3097c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 3107c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell/* These will be dynamic indirect state commands, but for now just end 3117c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell * up on the batch buffer with everything else. 3127c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell */ 313e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantzstatic void update_dynamic(struct i915_context *i915) 3147c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell{ 3157c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell int i; 3167c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell 3177c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell for (i = 0; i < Elements(atoms); i++) 3187c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell if (i915->dirty & atoms[i]->dirty) 319f93e378bfb55f3609779f0981246e040c9aa08eaJakob Bornecrantz atoms[i]->update(i915); 3207c9a1357beabd6d0df88142d31cd5d77a012e85aKeith Whitwell} 321e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz 322e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantzstruct i915_tracked_state i915_hw_dynamic = { 323e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz "dynamic", 324e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz update_dynamic, 325e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz ~0 /* all state atoms, becuase we do internal checking */ 326e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6Jakob Bornecrantz}; 327