i965_3d.c revision 428d7b3d
1428d7b3dSmrg/* 2428d7b3dSmrg * Copyright � 2011 Intel Corporation 3428d7b3dSmrg * 4428d7b3dSmrg * Permission is hereby granted, free of charge, to any person obtaining a 5428d7b3dSmrg * copy of this software and associated documentation files (the "Software"), 6428d7b3dSmrg * to deal in the Software without restriction, including without limitation 7428d7b3dSmrg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8428d7b3dSmrg * and/or sell copies of the Software, and to permit persons to whom the 9428d7b3dSmrg * Software is furnished to do so, subject to the following conditions: 10428d7b3dSmrg * 11428d7b3dSmrg * The above copyright notice and this permission notice (including the next 12428d7b3dSmrg * paragraph) shall be included in all copies or substantial portions of the 13428d7b3dSmrg * Software. 14428d7b3dSmrg * 15428d7b3dSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16428d7b3dSmrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17428d7b3dSmrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18428d7b3dSmrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19428d7b3dSmrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20428d7b3dSmrg * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21428d7b3dSmrg * DEALINGS IN THE SOFTWARE. 22428d7b3dSmrg */ 23428d7b3dSmrg 24428d7b3dSmrg#ifdef HAVE_CONFIG_H 25428d7b3dSmrg#include "config.h" 26428d7b3dSmrg#endif 27428d7b3dSmrg 28428d7b3dSmrg#include <string.h> 29428d7b3dSmrg 30428d7b3dSmrg#include "intel.h" 31428d7b3dSmrg#include "intel_uxa.h" 32428d7b3dSmrg#include "i965_reg.h" 33428d7b3dSmrg#include "brw_defines.h" 34428d7b3dSmrg 35428d7b3dSmrgvoid 36428d7b3dSmrggen6_upload_invariant_states(intel_screen_private *intel) 37428d7b3dSmrg{ 38428d7b3dSmrg Bool ivb = INTEL_INFO(intel)->gen >= 070; 39428d7b3dSmrg 40428d7b3dSmrg OUT_BATCH(BRW_PIPE_CONTROL | (4 - 2)); 41428d7b3dSmrg OUT_BATCH(BRW_PIPE_CONTROL_IS_FLUSH | 42428d7b3dSmrg BRW_PIPE_CONTROL_WC_FLUSH | 43428d7b3dSmrg BRW_PIPE_CONTROL_DEPTH_CACHE_FLUSH | 44428d7b3dSmrg BRW_PIPE_CONTROL_NOWRITE); 45428d7b3dSmrg OUT_BATCH(0); /* write address */ 46428d7b3dSmrg OUT_BATCH(0); /* write data */ 47428d7b3dSmrg 48428d7b3dSmrg OUT_BATCH(NEW_PIPELINE_SELECT | PIPELINE_SELECT_3D); 49428d7b3dSmrg 50428d7b3dSmrg OUT_BATCH(GEN6_3DSTATE_MULTISAMPLE | ((ivb ? 4 : 3) - 2)); 51428d7b3dSmrg OUT_BATCH(GEN6_3DSTATE_MULTISAMPLE_PIXEL_LOCATION_CENTER | 52428d7b3dSmrg GEN6_3DSTATE_MULTISAMPLE_NUMSAMPLES_1); /* 1 sample/pixel */ 53428d7b3dSmrg OUT_BATCH(0); 54428d7b3dSmrg if (ivb) 55428d7b3dSmrg OUT_BATCH(0); 56428d7b3dSmrg 57428d7b3dSmrg OUT_BATCH(GEN6_3DSTATE_SAMPLE_MASK | (2 - 2)); 58428d7b3dSmrg OUT_BATCH(1); 59428d7b3dSmrg 60428d7b3dSmrg /* Set system instruction pointer */ 61428d7b3dSmrg OUT_BATCH(BRW_STATE_SIP | 0); 62428d7b3dSmrg OUT_BATCH(0); 63428d7b3dSmrg} 64428d7b3dSmrg 65428d7b3dSmrgvoid 66428d7b3dSmrggen6_upload_viewport_state_pointers(intel_screen_private *intel, 67428d7b3dSmrg drm_intel_bo *cc_vp_bo) 68428d7b3dSmrg{ 69428d7b3dSmrg OUT_BATCH(GEN6_3DSTATE_VIEWPORT_STATE_POINTERS | 70428d7b3dSmrg GEN6_3DSTATE_VIEWPORT_STATE_MODIFY_CC | 71428d7b3dSmrg (4 - 2)); 72428d7b3dSmrg OUT_BATCH(0); 73428d7b3dSmrg OUT_BATCH(0); 74428d7b3dSmrg OUT_RELOC(cc_vp_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); 75428d7b3dSmrg} 76428d7b3dSmrg 77428d7b3dSmrgvoid 78428d7b3dSmrggen7_upload_viewport_state_pointers(intel_screen_private *intel, 79428d7b3dSmrg drm_intel_bo *cc_vp_bo) 80428d7b3dSmrg{ 81428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_CC | (2 - 2)); 82428d7b3dSmrg OUT_RELOC(cc_vp_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); 83428d7b3dSmrg 84428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CL | (2 - 2)); 85428d7b3dSmrg OUT_BATCH(0); 86428d7b3dSmrg} 87428d7b3dSmrg 88428d7b3dSmrgvoid 89428d7b3dSmrggen6_upload_urb(intel_screen_private *intel) 90428d7b3dSmrg{ 91428d7b3dSmrg OUT_BATCH(GEN6_3DSTATE_URB | (3 - 2)); 92428d7b3dSmrg OUT_BATCH(((1 - 1) << GEN6_3DSTATE_URB_VS_SIZE_SHIFT) | 93428d7b3dSmrg (24 << GEN6_3DSTATE_URB_VS_ENTRIES_SHIFT)); /* at least 24 on GEN6 */ 94428d7b3dSmrg OUT_BATCH((0 << GEN6_3DSTATE_URB_GS_SIZE_SHIFT) | 95428d7b3dSmrg (0 << GEN6_3DSTATE_URB_GS_ENTRIES_SHIFT)); /* no GS thread */ 96428d7b3dSmrg} 97428d7b3dSmrg 98428d7b3dSmrg/* 99428d7b3dSmrg * URB layout on GEN7 100428d7b3dSmrg * ---------------------------------------- 101428d7b3dSmrg * | PS Push Constants (8KB) | VS entries | 102428d7b3dSmrg * ---------------------------------------- 103428d7b3dSmrg */ 104428d7b3dSmrgvoid 105428d7b3dSmrggen7_upload_urb(intel_screen_private *intel) 106428d7b3dSmrg{ 107428d7b3dSmrg unsigned int num_urb_entries = 32; 108428d7b3dSmrg 109428d7b3dSmrg if (IS_HSW(intel)) 110428d7b3dSmrg num_urb_entries = 64; 111428d7b3dSmrg 112428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_PS | (2 - 2)); 113428d7b3dSmrg OUT_BATCH(8); /* in 1KBs */ 114428d7b3dSmrg 115428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_URB_VS | (2 - 2)); 116428d7b3dSmrg OUT_BATCH( 117428d7b3dSmrg (num_urb_entries << GEN7_URB_ENTRY_NUMBER_SHIFT) | 118428d7b3dSmrg (2 - 1) << GEN7_URB_ENTRY_SIZE_SHIFT | 119428d7b3dSmrg (1 << GEN7_URB_STARTING_ADDRESS_SHIFT)); 120428d7b3dSmrg 121428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_URB_GS | (2 - 2)); 122428d7b3dSmrg OUT_BATCH((0 << GEN7_URB_ENTRY_SIZE_SHIFT) | 123428d7b3dSmrg (1 << GEN7_URB_STARTING_ADDRESS_SHIFT)); 124428d7b3dSmrg 125428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_URB_HS | (2 - 2)); 126428d7b3dSmrg OUT_BATCH((0 << GEN7_URB_ENTRY_SIZE_SHIFT) | 127428d7b3dSmrg (2 << GEN7_URB_STARTING_ADDRESS_SHIFT)); 128428d7b3dSmrg 129428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_URB_DS | (2 - 2)); 130428d7b3dSmrg OUT_BATCH((0 << GEN7_URB_ENTRY_SIZE_SHIFT) | 131428d7b3dSmrg (2 << GEN7_URB_STARTING_ADDRESS_SHIFT)); 132428d7b3dSmrg} 133428d7b3dSmrg 134428d7b3dSmrgvoid 135428d7b3dSmrggen6_upload_cc_state_pointers(intel_screen_private *intel, 136428d7b3dSmrg drm_intel_bo *blend_bo, 137428d7b3dSmrg drm_intel_bo *cc_bo, 138428d7b3dSmrg drm_intel_bo *depth_stencil_bo, 139428d7b3dSmrg uint32_t blend_offset) 140428d7b3dSmrg{ 141428d7b3dSmrg OUT_BATCH(GEN6_3DSTATE_CC_STATE_POINTERS | (4 - 2)); 142428d7b3dSmrg if (blend_bo) 143428d7b3dSmrg OUT_RELOC(blend_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 144428d7b3dSmrg blend_offset | 1); 145428d7b3dSmrg else 146428d7b3dSmrg OUT_BATCH(0); 147428d7b3dSmrg 148428d7b3dSmrg if (depth_stencil_bo) 149428d7b3dSmrg OUT_RELOC(depth_stencil_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1); 150428d7b3dSmrg else 151428d7b3dSmrg OUT_BATCH(0); 152428d7b3dSmrg 153428d7b3dSmrg if (cc_bo) 154428d7b3dSmrg OUT_RELOC(cc_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1); 155428d7b3dSmrg else 156428d7b3dSmrg OUT_BATCH(0); 157428d7b3dSmrg} 158428d7b3dSmrg 159428d7b3dSmrgvoid 160428d7b3dSmrggen7_upload_cc_state_pointers(intel_screen_private *intel, 161428d7b3dSmrg drm_intel_bo *blend_bo, 162428d7b3dSmrg drm_intel_bo *cc_bo, 163428d7b3dSmrg drm_intel_bo *depth_stencil_bo, 164428d7b3dSmrg uint32_t blend_offset) 165428d7b3dSmrg{ 166428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_BLEND_STATE_POINTERS | (2 - 2)); 167428d7b3dSmrg if (blend_bo) 168428d7b3dSmrg OUT_RELOC(blend_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 169428d7b3dSmrg blend_offset | 1); 170428d7b3dSmrg else 171428d7b3dSmrg OUT_BATCH(0); 172428d7b3dSmrg 173428d7b3dSmrg OUT_BATCH(GEN6_3DSTATE_CC_STATE_POINTERS | (2 - 2)); 174428d7b3dSmrg if (cc_bo) 175428d7b3dSmrg OUT_RELOC(cc_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1); 176428d7b3dSmrg else 177428d7b3dSmrg OUT_BATCH(0); 178428d7b3dSmrg 179428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_DEPTH_STENCIL_STATE_POINTERS | (2 - 2)); 180428d7b3dSmrg if (depth_stencil_bo) 181428d7b3dSmrg OUT_RELOC(depth_stencil_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1); 182428d7b3dSmrg else 183428d7b3dSmrg OUT_BATCH(0); 184428d7b3dSmrg} 185428d7b3dSmrg 186428d7b3dSmrgvoid 187428d7b3dSmrggen6_upload_sampler_state_pointers(intel_screen_private *intel, 188428d7b3dSmrg drm_intel_bo *sampler_bo) 189428d7b3dSmrg{ 190428d7b3dSmrg OUT_BATCH(GEN6_3DSTATE_SAMPLER_STATE_POINTERS | 191428d7b3dSmrg GEN6_3DSTATE_SAMPLER_STATE_MODIFY_PS | 192428d7b3dSmrg (4 - 2)); 193428d7b3dSmrg OUT_BATCH(0); /* VS */ 194428d7b3dSmrg OUT_BATCH(0); /* GS */ 195428d7b3dSmrg OUT_RELOC(sampler_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); 196428d7b3dSmrg} 197428d7b3dSmrg 198428d7b3dSmrgvoid 199428d7b3dSmrggen7_upload_sampler_state_pointers(intel_screen_private *intel, 200428d7b3dSmrg drm_intel_bo *sampler_bo) 201428d7b3dSmrg{ 202428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_SAMPLER_STATE_POINTERS_PS | (2 - 2)); 203428d7b3dSmrg OUT_RELOC(sampler_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0); 204428d7b3dSmrg} 205428d7b3dSmrg 206428d7b3dSmrgvoid 207428d7b3dSmrggen7_upload_bypass_states(intel_screen_private *intel) 208428d7b3dSmrg{ 209428d7b3dSmrg /* bypass GS */ 210428d7b3dSmrg OUT_BATCH(GEN6_3DSTATE_CONSTANT_GS | (7 - 2)); 211428d7b3dSmrg OUT_BATCH(0); 212428d7b3dSmrg OUT_BATCH(0); 213428d7b3dSmrg OUT_BATCH(0); 214428d7b3dSmrg OUT_BATCH(0); 215428d7b3dSmrg OUT_BATCH(0); 216428d7b3dSmrg OUT_BATCH(0); 217428d7b3dSmrg 218428d7b3dSmrg OUT_BATCH(GEN6_3DSTATE_GS | (7 - 2)); 219428d7b3dSmrg OUT_BATCH(0); /* without GS kernel */ 220428d7b3dSmrg OUT_BATCH(0); 221428d7b3dSmrg OUT_BATCH(0); 222428d7b3dSmrg OUT_BATCH(0); 223428d7b3dSmrg OUT_BATCH(0); 224428d7b3dSmrg OUT_BATCH(0); /* pass-through */ 225428d7b3dSmrg 226428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_BINDING_TABLE_POINTERS_GS | (2 - 2)); 227428d7b3dSmrg OUT_BATCH(0); 228428d7b3dSmrg 229428d7b3dSmrg /* disable HS */ 230428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_CONSTANT_HS | (7 - 2)); 231428d7b3dSmrg OUT_BATCH(0); 232428d7b3dSmrg OUT_BATCH(0); 233428d7b3dSmrg OUT_BATCH(0); 234428d7b3dSmrg OUT_BATCH(0); 235428d7b3dSmrg OUT_BATCH(0); 236428d7b3dSmrg OUT_BATCH(0); 237428d7b3dSmrg 238428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_HS | (7 - 2)); 239428d7b3dSmrg OUT_BATCH(0); 240428d7b3dSmrg OUT_BATCH(0); 241428d7b3dSmrg OUT_BATCH(0); 242428d7b3dSmrg OUT_BATCH(0); 243428d7b3dSmrg OUT_BATCH(0); 244428d7b3dSmrg OUT_BATCH(0); 245428d7b3dSmrg 246428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_BINDING_TABLE_POINTERS_HS | (2 - 2)); 247428d7b3dSmrg OUT_BATCH(0); 248428d7b3dSmrg 249428d7b3dSmrg /* Disable TE */ 250428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_TE | (4 - 2)); 251428d7b3dSmrg OUT_BATCH(0); 252428d7b3dSmrg OUT_BATCH(0); 253428d7b3dSmrg OUT_BATCH(0); 254428d7b3dSmrg 255428d7b3dSmrg /* Disable DS */ 256428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_CONSTANT_DS | (7 - 2)); 257428d7b3dSmrg OUT_BATCH(0); 258428d7b3dSmrg OUT_BATCH(0); 259428d7b3dSmrg OUT_BATCH(0); 260428d7b3dSmrg OUT_BATCH(0); 261428d7b3dSmrg OUT_BATCH(0); 262428d7b3dSmrg OUT_BATCH(0); 263428d7b3dSmrg 264428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_DS | (6 - 2)); 265428d7b3dSmrg OUT_BATCH(0); 266428d7b3dSmrg OUT_BATCH(0); 267428d7b3dSmrg OUT_BATCH(0); 268428d7b3dSmrg OUT_BATCH(0); 269428d7b3dSmrg OUT_BATCH(0); 270428d7b3dSmrg 271428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_BINDING_TABLE_POINTERS_DS | (2 - 2)); 272428d7b3dSmrg OUT_BATCH(0); 273428d7b3dSmrg 274428d7b3dSmrg /* Disable STREAMOUT */ 275428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_STREAMOUT | (3 - 2)); 276428d7b3dSmrg OUT_BATCH(0); 277428d7b3dSmrg OUT_BATCH(0); 278428d7b3dSmrg} 279428d7b3dSmrg 280428d7b3dSmrgvoid 281428d7b3dSmrggen6_upload_vs_state(intel_screen_private *intel) 282428d7b3dSmrg{ 283428d7b3dSmrg Bool ivb = INTEL_INFO(intel)->gen >= 070; 284428d7b3dSmrg /* disable VS constant buffer */ 285428d7b3dSmrg OUT_BATCH(GEN6_3DSTATE_CONSTANT_VS | ((ivb ? 7 : 5) - 2)); 286428d7b3dSmrg OUT_BATCH(0); 287428d7b3dSmrg OUT_BATCH(0); 288428d7b3dSmrg OUT_BATCH(0); 289428d7b3dSmrg OUT_BATCH(0); 290428d7b3dSmrg if (ivb) { 291428d7b3dSmrg OUT_BATCH(0); 292428d7b3dSmrg OUT_BATCH(0); 293428d7b3dSmrg } 294428d7b3dSmrg 295428d7b3dSmrg OUT_BATCH(GEN6_3DSTATE_VS | (6 - 2)); 296428d7b3dSmrg OUT_BATCH(0); /* without VS kernel */ 297428d7b3dSmrg OUT_BATCH(0); 298428d7b3dSmrg OUT_BATCH(0); 299428d7b3dSmrg OUT_BATCH(0); 300428d7b3dSmrg OUT_BATCH(0); /* pass-through */ 301428d7b3dSmrg} 302428d7b3dSmrg 303428d7b3dSmrgvoid 304428d7b3dSmrggen6_upload_gs_state(intel_screen_private *intel) 305428d7b3dSmrg{ 306428d7b3dSmrg /* disable GS constant buffer */ 307428d7b3dSmrg OUT_BATCH(GEN6_3DSTATE_CONSTANT_GS | (5 - 2)); 308428d7b3dSmrg OUT_BATCH(0); 309428d7b3dSmrg OUT_BATCH(0); 310428d7b3dSmrg OUT_BATCH(0); 311428d7b3dSmrg OUT_BATCH(0); 312428d7b3dSmrg 313428d7b3dSmrg OUT_BATCH(GEN6_3DSTATE_GS | (7 - 2)); 314428d7b3dSmrg OUT_BATCH(0); /* without GS kernel */ 315428d7b3dSmrg OUT_BATCH(0); 316428d7b3dSmrg OUT_BATCH(0); 317428d7b3dSmrg OUT_BATCH(0); 318428d7b3dSmrg OUT_BATCH(0); 319428d7b3dSmrg OUT_BATCH(0); /* pass-through */ 320428d7b3dSmrg} 321428d7b3dSmrg 322428d7b3dSmrgvoid 323428d7b3dSmrggen6_upload_clip_state(intel_screen_private *intel) 324428d7b3dSmrg{ 325428d7b3dSmrg OUT_BATCH(GEN6_3DSTATE_CLIP | (4 - 2)); 326428d7b3dSmrg OUT_BATCH(0); 327428d7b3dSmrg OUT_BATCH(0); /* pass-through */ 328428d7b3dSmrg OUT_BATCH(0); 329428d7b3dSmrg} 330428d7b3dSmrg 331428d7b3dSmrgvoid 332428d7b3dSmrggen6_upload_sf_state(intel_screen_private *intel, 333428d7b3dSmrg int num_sf_outputs, 334428d7b3dSmrg int read_offset) 335428d7b3dSmrg{ 336428d7b3dSmrg OUT_BATCH(GEN6_3DSTATE_SF | (20 - 2)); 337428d7b3dSmrg OUT_BATCH((num_sf_outputs << GEN6_3DSTATE_SF_NUM_OUTPUTS_SHIFT) | 338428d7b3dSmrg (1 << GEN6_3DSTATE_SF_URB_ENTRY_READ_LENGTH_SHIFT) | 339428d7b3dSmrg (read_offset << GEN6_3DSTATE_SF_URB_ENTRY_READ_OFFSET_SHIFT)); 340428d7b3dSmrg OUT_BATCH(0); 341428d7b3dSmrg OUT_BATCH(GEN6_3DSTATE_SF_CULL_NONE); 342428d7b3dSmrg OUT_BATCH(2 << GEN6_3DSTATE_SF_TRIFAN_PROVOKE_SHIFT); /* DW4 */ 343428d7b3dSmrg OUT_BATCH(0); 344428d7b3dSmrg OUT_BATCH(0); 345428d7b3dSmrg OUT_BATCH(0); 346428d7b3dSmrg OUT_BATCH(0); 347428d7b3dSmrg OUT_BATCH(0); /* DW9 */ 348428d7b3dSmrg OUT_BATCH(0); 349428d7b3dSmrg OUT_BATCH(0); 350428d7b3dSmrg OUT_BATCH(0); 351428d7b3dSmrg OUT_BATCH(0); 352428d7b3dSmrg OUT_BATCH(0); /* DW14 */ 353428d7b3dSmrg OUT_BATCH(0); 354428d7b3dSmrg OUT_BATCH(0); 355428d7b3dSmrg OUT_BATCH(0); 356428d7b3dSmrg OUT_BATCH(0); 357428d7b3dSmrg OUT_BATCH(0); /* DW19 */ 358428d7b3dSmrg} 359428d7b3dSmrg 360428d7b3dSmrgvoid 361428d7b3dSmrggen7_upload_sf_state(intel_screen_private *intel, 362428d7b3dSmrg int num_sf_outputs, 363428d7b3dSmrg int read_offset) 364428d7b3dSmrg{ 365428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_SBE | (14 - 2)); 366428d7b3dSmrg OUT_BATCH((num_sf_outputs << GEN7_SBE_NUM_OUTPUTS_SHIFT) | 367428d7b3dSmrg (1 << GEN7_SBE_URB_ENTRY_READ_LENGTH_SHIFT) | 368428d7b3dSmrg (read_offset << GEN7_SBE_URB_ENTRY_READ_OFFSET_SHIFT)); 369428d7b3dSmrg OUT_BATCH(0); 370428d7b3dSmrg OUT_BATCH(0); 371428d7b3dSmrg OUT_BATCH(0); /* DW4 */ 372428d7b3dSmrg OUT_BATCH(0); 373428d7b3dSmrg OUT_BATCH(0); 374428d7b3dSmrg OUT_BATCH(0); 375428d7b3dSmrg OUT_BATCH(0); 376428d7b3dSmrg OUT_BATCH(0); /* DW9 */ 377428d7b3dSmrg OUT_BATCH(0); 378428d7b3dSmrg OUT_BATCH(0); 379428d7b3dSmrg OUT_BATCH(0); 380428d7b3dSmrg OUT_BATCH(0); 381428d7b3dSmrg 382428d7b3dSmrg OUT_BATCH(GEN6_3DSTATE_SF | (7 - 2)); 383428d7b3dSmrg OUT_BATCH(0); 384428d7b3dSmrg OUT_BATCH(GEN6_3DSTATE_SF_CULL_NONE); 385428d7b3dSmrg OUT_BATCH(2 << GEN6_3DSTATE_SF_TRIFAN_PROVOKE_SHIFT); 386428d7b3dSmrg OUT_BATCH(0); 387428d7b3dSmrg OUT_BATCH(0); 388428d7b3dSmrg OUT_BATCH(0); 389428d7b3dSmrg} 390428d7b3dSmrg 391428d7b3dSmrgvoid 392428d7b3dSmrggen6_upload_binding_table(intel_screen_private *intel, 393428d7b3dSmrg uint32_t ps_binding_table_offset) 394428d7b3dSmrg{ 395428d7b3dSmrg /* Binding table pointers */ 396428d7b3dSmrg OUT_BATCH(BRW_3DSTATE_BINDING_TABLE_POINTERS | 397428d7b3dSmrg GEN6_3DSTATE_BINDING_TABLE_MODIFY_PS | 398428d7b3dSmrg (4 - 2)); 399428d7b3dSmrg OUT_BATCH(0); /* VS */ 400428d7b3dSmrg OUT_BATCH(0); /* GS */ 401428d7b3dSmrg /* Only the PS uses the binding table */ 402428d7b3dSmrg OUT_BATCH(ps_binding_table_offset); 403428d7b3dSmrg} 404428d7b3dSmrg 405428d7b3dSmrgvoid 406428d7b3dSmrggen7_upload_binding_table(intel_screen_private *intel, 407428d7b3dSmrg uint32_t ps_binding_table_offset) 408428d7b3dSmrg{ 409428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_BINDING_TABLE_POINTERS_PS | (2 - 2)); 410428d7b3dSmrg OUT_BATCH(ps_binding_table_offset); 411428d7b3dSmrg} 412428d7b3dSmrg 413428d7b3dSmrgvoid 414428d7b3dSmrggen6_upload_depth_buffer_state(intel_screen_private *intel) 415428d7b3dSmrg{ 416428d7b3dSmrg OUT_BATCH(BRW_3DSTATE_DEPTH_BUFFER | (7 - 2)); 417428d7b3dSmrg OUT_BATCH((BRW_SURFACE_NULL << BRW_3DSTATE_DEPTH_BUFFER_TYPE_SHIFT) | 418428d7b3dSmrg (BRW_DEPTHFORMAT_D32_FLOAT << BRW_3DSTATE_DEPTH_BUFFER_FORMAT_SHIFT)); 419428d7b3dSmrg OUT_BATCH(0); 420428d7b3dSmrg OUT_BATCH(0); 421428d7b3dSmrg OUT_BATCH(0); 422428d7b3dSmrg OUT_BATCH(0); 423428d7b3dSmrg OUT_BATCH(0); 424428d7b3dSmrg 425428d7b3dSmrg OUT_BATCH(BRW_3DSTATE_CLEAR_PARAMS | (2 - 2)); 426428d7b3dSmrg OUT_BATCH(0); 427428d7b3dSmrg} 428428d7b3dSmrg 429428d7b3dSmrgvoid 430428d7b3dSmrggen7_upload_depth_buffer_state(intel_screen_private *intel) 431428d7b3dSmrg{ 432428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_DEPTH_BUFFER | (7 - 2)); 433428d7b3dSmrg OUT_BATCH((BRW_DEPTHFORMAT_D32_FLOAT << 18) | (BRW_SURFACE_NULL << 29)); 434428d7b3dSmrg OUT_BATCH(0); 435428d7b3dSmrg OUT_BATCH(0); 436428d7b3dSmrg OUT_BATCH(0); 437428d7b3dSmrg OUT_BATCH(0); 438428d7b3dSmrg OUT_BATCH(0); 439428d7b3dSmrg 440428d7b3dSmrg OUT_BATCH(GEN7_3DSTATE_CLEAR_PARAMS | (3 - 2)); 441428d7b3dSmrg OUT_BATCH(0); 442428d7b3dSmrg OUT_BATCH(0); 443428d7b3dSmrg} 444