1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Copyright (C) Intel Corp. 2006. All Rights Reserved. 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org develop this 3D driver. 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Permission is hereby granted, free of charge, to any person obtaining 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org a copy of this software and associated documentation files (the 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "Software"), to deal in the Software without restriction, including 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org without limitation the rights to use, copy, modify, merge, publish, 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org distribute, sublicense, and/or sell copies of the Software, and to 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org permit persons to whom the Software is furnished to do so, subject to 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org the following conditions: 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org The above copyright notice and this permission notice (including the 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org next paragraph) shall be included in all copies or substantial 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org portions of the Software. 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **********************************************************************/ 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Authors: 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Keith Whitwell <keith@tungstengraphics.com> 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef BRWCONTEXT_INC 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRWCONTEXT_INC 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "intel_context.h" 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "brw_structs.h" 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/imports.h" 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef __cplusplus 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern "C" { 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Glossary: 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * URB - uniform resource buffer. A mid-sized buffer which is 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * partitioned between the fixed function units and used for passing 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * values (vertices, primitives, constants) between them. 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * CURBE - constant URB entry. An urb region (entry) used to hold 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * constant values which the fixed function units can be instructed to 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * preload into the GRF when spawning a thread. 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * VUE - vertex URB entry. An urb entry holding a vertex and usually 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * a vertex header. The header contains control information and 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * things like primitive type, Begin/end flags and clip codes. 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * PUE - primitive URB entry. An urb entry produced by the setup (SF) 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * unit holding rasterization and interpolation parameters. 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GRF - general register file. One of several register files 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * addressable by programmed threads. The inputs (r0, payload, curbe, 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * urb) of the thread are preloaded to this area before the thread is 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * spawned. The registers are individually 8 dwords wide and suitable 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * for general usage. Registers holding thread input values are not 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * special and may be overwritten. 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * MRF - message register file. Threads communicate (and terminate) 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * by sending messages. Message parameters are placed in contiguous 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * MRF registers. All program output is via these messages. URB 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * entries are populated by sending a message to the shared URB 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * function containing the new data, together with a control word, 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * often an unmodified copy of R0. 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * R0 - GRF register 0. Typically holds control information used when 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * sending messages to other threads. 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * EU or GEN4 EU: The name of the programmable subsystem of the 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * i965 hardware. Threads are executed by the EU, the registers 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * described above are part of the EU architecture. 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Fixed function units: 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * CS - Command streamer. Notional first unit, little software 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * interaction. Holds the URB entries used for constant data, ie the 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * CURBEs. 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * VF/VS - Vertex Fetch / Vertex Shader. The fixed function part of 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * this unit is responsible for pulling vertices out of vertex buffers 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * in vram and injecting them into the processing pipe as VUEs. If 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * enabled, it first passes them to a VS thread which is a good place 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * for the driver to implement any active vertex shader. 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GS - Geometry Shader. This corresponds to a new DX10 concept. If 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * enabled, incoming strips etc are passed to GS threads in individual 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * line/triangle/point units. The GS thread may perform arbitary 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * computation and emit whatever primtives with whatever vertices it 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * chooses. This makes GS an excellent place to implement GL's 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * unfilled polygon modes, though of course it is capable of much 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * more. Additionally, GS is used to translate away primitives not 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * handled by latter units, including Quads and Lineloops. 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * CS - Clipper. Mesa's clipping algorithms are imported to run on 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * this unit. The fixed function part performs cliptesting against 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the 6 fixed clipplanes and makes descisions on whether or not the 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * incoming primitive needs to be passed to a thread for clipping. 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * User clip planes are handled via cooperation with the VS thread. 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * SF - Strips Fans or Setup: Triangles are prepared for 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * rasterization. Interpolation coefficients are calculated. 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Flatshading and two-side lighting usually performed here. 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * WM - Windower. Interpolation of vertex attributes performed here. 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Fragment shader implemented here. SIMD aspects of EU taken full 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * advantage of, as pixels are processed in blocks of 16. 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * CC - Color Calculator. No EU threads associated with this unit. 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Handles blending and (presumably) depth and stencil testing. 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_MAX_CURBE (32*16) 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_context; 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_instruction; 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_vs_prog_key; 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_wm_prog_key; 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_wm_prog_data; 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgenum brw_state_id { 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_URB_FENCE, 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_FRAGMENT_PROGRAM, 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_VERTEX_PROGRAM, 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_INPUT_DIMENSIONS, 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_CURBE_OFFSETS, 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_REDUCED_PRIMITIVE, 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_PRIMITIVE, 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_CONTEXT, 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_WM_INPUT_DIMENSIONS, 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_PSP, 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_SURFACES, 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_VS_BINDING_TABLE, 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_GS_BINDING_TABLE, 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_PS_BINDING_TABLE, 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_INDICES, 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_VERTICES, 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_BATCH, 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_NR_WM_SURFACES, 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_NR_VS_SURFACES, 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_INDEX_BUFFER, 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_VS_CONSTBUF, 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_PROGRAM_CACHE, 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_STATE_BASE_ADDRESS, 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_STATE_SOL_INDICES, 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_NEW_URB_FENCE (1 << BRW_STATE_URB_FENCE) 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_NEW_FRAGMENT_PROGRAM (1 << BRW_STATE_FRAGMENT_PROGRAM) 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_NEW_VERTEX_PROGRAM (1 << BRW_STATE_VERTEX_PROGRAM) 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_NEW_INPUT_DIMENSIONS (1 << BRW_STATE_INPUT_DIMENSIONS) 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_NEW_CURBE_OFFSETS (1 << BRW_STATE_CURBE_OFFSETS) 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_NEW_REDUCED_PRIMITIVE (1 << BRW_STATE_REDUCED_PRIMITIVE) 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_NEW_PRIMITIVE (1 << BRW_STATE_PRIMITIVE) 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_NEW_CONTEXT (1 << BRW_STATE_CONTEXT) 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_NEW_WM_INPUT_DIMENSIONS (1 << BRW_STATE_WM_INPUT_DIMENSIONS) 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_NEW_PSP (1 << BRW_STATE_PSP) 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_NEW_SURFACES (1 << BRW_STATE_SURFACES) 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_NEW_VS_BINDING_TABLE (1 << BRW_STATE_VS_BINDING_TABLE) 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_NEW_GS_BINDING_TABLE (1 << BRW_STATE_GS_BINDING_TABLE) 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_NEW_PS_BINDING_TABLE (1 << BRW_STATE_PS_BINDING_TABLE) 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_NEW_INDICES (1 << BRW_STATE_INDICES) 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_NEW_VERTICES (1 << BRW_STATE_VERTICES) 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Used for any batch entry with a relocated pointer that will be used 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * by any 3D rendering. 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_NEW_BATCH (1 << BRW_STATE_BATCH) 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** \see brw.state.depth_region */ 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_NEW_INDEX_BUFFER (1 << BRW_STATE_INDEX_BUFFER) 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_NEW_VS_CONSTBUF (1 << BRW_STATE_VS_CONSTBUF) 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_NEW_PROGRAM_CACHE (1 << BRW_STATE_PROGRAM_CACHE) 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_NEW_STATE_BASE_ADDRESS (1 << BRW_STATE_STATE_BASE_ADDRESS) 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_NEW_SOL_INDICES (1 << BRW_STATE_SOL_INDICES) 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_state_flags { 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** State update flags signalled by mesa internals */ 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint mesa; 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * State update flags signalled as the result of brw_tracked_state updates 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint brw; 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** State update flags signalled by brw_state_cache.c searches */ 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint cache; 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define AUB_TRACE_TYPE_MASK 0x0000ff00 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define AUB_TRACE_TYPE_NOTYPE (0 << 8) 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define AUB_TRACE_TYPE_BATCH (1 << 8) 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define AUB_TRACE_TYPE_VERTEX_BUFFER (5 << 8) 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define AUB_TRACE_TYPE_2D_MAP (6 << 8) 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define AUB_TRACE_TYPE_CUBE_MAP (7 << 8) 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define AUB_TRACE_TYPE_VOLUME_MAP (9 << 8) 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define AUB_TRACE_TYPE_1D_MAP (10 << 8) 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define AUB_TRACE_TYPE_CONSTANT_BUFFER (11 << 8) 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define AUB_TRACE_TYPE_CONSTANT_URB (12 << 8) 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define AUB_TRACE_TYPE_INDEX_BUFFER (13 << 8) 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define AUB_TRACE_TYPE_GENERAL (14 << 8) 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define AUB_TRACE_TYPE_SURFACE (15 << 8) 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * state_struct_type enum values are encoded with the top 16 bits representing 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the type to be delivered to the .aub file, and the bottom 16 bits 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * representing the subtype. This macro performs the encoding. 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define ENCODE_SS_TYPE(type, subtype) (((type) << 16) | (subtype)) 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgenum state_struct_type { 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AUB_TRACE_VS_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 1), 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AUB_TRACE_GS_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 2), 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AUB_TRACE_CLIP_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 3), 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AUB_TRACE_SF_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 4), 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AUB_TRACE_WM_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 5), 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AUB_TRACE_CC_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 6), 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AUB_TRACE_CLIP_VP_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 7), 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AUB_TRACE_SF_VP_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 8), 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AUB_TRACE_CC_VP_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x9), 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AUB_TRACE_SAMPLER_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xa), 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AUB_TRACE_KERNEL_INSTRUCTIONS = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xb), 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AUB_TRACE_SCRATCH_SPACE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xc), 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AUB_TRACE_SAMPLER_DEFAULT_COLOR = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xd), 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AUB_TRACE_SCISSOR_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x15), 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AUB_TRACE_BLEND_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x16), 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AUB_TRACE_DEPTH_STENCIL_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x17), 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AUB_TRACE_VERTEX_BUFFER = ENCODE_SS_TYPE(AUB_TRACE_TYPE_VERTEX_BUFFER, 0), 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AUB_TRACE_BINDING_TABLE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_SURFACE, 0x100), 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AUB_TRACE_SURFACE_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_SURFACE, 0x200), 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AUB_TRACE_VS_CONSTANTS = ENCODE_SS_TYPE(AUB_TRACE_TYPE_CONSTANT_BUFFER, 0), 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org AUB_TRACE_WM_CONSTANTS = ENCODE_SS_TYPE(AUB_TRACE_TYPE_CONSTANT_BUFFER, 1), 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Decode a state_struct_type value to determine the type that should be 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * stored in the .aub file. 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic inline uint32_t AUB_TRACE_TYPE(enum state_struct_type ss_type) 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (ss_type & 0xFFFF0000) >> 16; 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Decode a state_struct_type value to determine the subtype that should be 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * stored in the .aub file. 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic inline uint32_t AUB_TRACE_SUBTYPE(enum state_struct_type ss_type) 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ss_type & 0xFFFF; 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Subclass of Mesa vertex program */ 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_vertex_program { 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_vertex_program program; 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint id; 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool use_const_buffer; 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Subclass of Mesa fragment program */ 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_fragment_program { 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_fragment_program program; 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint id; /**< serial no. to identify frag progs, never re-used */ 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_shader { 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_shader base; 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool compiled_once; 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Shader IR transformed for native compile, at link time. */ 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct exec_list *ir; 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_shader_program { 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_shader_program base; 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Data about a particular attempt to compile a program. Note that 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * there can be many of these, each in a different GL state 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * corresponding to a different brw_wm_prog_key struct, with different 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * compiled programs: 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_wm_prog_data { 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint curb_read_length; 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint urb_read_length; 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint first_curbe_grf; 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint first_curbe_grf_16; 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint reg_blocks; 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint reg_blocks_16; 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint total_scratch; 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint nr_params; /**< number of float params/constants */ 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint nr_pull_params; 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool error; 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool dual_src_blend; 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int dispatch_width; 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t prog_offset_16; 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Mask of which interpolation modes are required by the fragment shader. 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Used in hardware setup on gen6+. 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t barycentric_interp_modes; 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Pointer to tracked values (only valid once 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * _mesa_load_state_parameters has been called at runtime). 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const float *param[MAX_UNIFORMS * 4]; /* should be: BRW_MAX_CURBE */ 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const float *pull_param[MAX_UNIFORMS * 4]; 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Enum representing the i965-specific vertex results that don't correspond 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * exactly to any element of gl_vert_result. The values of this enum are 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * assigned such that they don't conflict with gl_vert_result. 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtypedef enum 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_VERT_RESULT_NDC = VERT_RESULT_MAX, 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_VERT_RESULT_HPOS_DUPLICATE, 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_VERT_RESULT_PAD, 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * It's actually not a vert_result but just a _mark_ to let sf aware that 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * he need do something special to handle gl_PointCoord builtin variable 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * correctly. see compile_sf_prog() for more info. 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_VERT_RESULT_PNTC, 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_VERT_RESULT_MAX 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} brw_vert_result; 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Data structure recording the relationship between the gl_vert_result enum 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and "slots" within the vertex URB entry (VUE). A "slot" is defined as a 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * single octaword within the VUE (128 bits). 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Note that each BRW register contains 256 bits (2 octawords), so when 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * accessing the VUE in URB_NOSWIZZLE mode, each register corresponds to two 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * consecutive VUE slots. When accessing the VUE in URB_INTERLEAVED mode (as 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * in a vertex shader), each register corresponds to a single VUE slot, since 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * it contains data for two separate vertices. 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_vue_map { 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Map from gl_vert_result value to VUE slot. For gl_vert_results that are 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * not stored in a slot (because they are not written, or because 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * additional processing is applied before storing them in the VUE), the 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * value is -1. 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int vert_result_to_slot[BRW_VERT_RESULT_MAX]; 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Map from VUE slot to gl_vert_result value. For slots that do not 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * directly correspond to a gl_vert_result, the value comes from 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * brw_vert_result. 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * For slots that are not in use, the value is BRW_VERT_RESULT_MAX (this 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * simplifies code that uses the value stored in slot_to_vert_result to 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * create a bit mask). 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int slot_to_vert_result[BRW_VERT_RESULT_MAX]; 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Total number of VUE slots in use 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int num_slots; 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Convert a VUE slot number into a byte offset within the VUE. 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic inline GLuint brw_vue_slot_to_offset(GLuint slot) 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 16*slot; 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Convert a vert_result into a byte offset within the VUE. 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic inline GLuint brw_vert_result_to_offset(struct brw_vue_map *vue_map, 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint vert_result) 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return brw_vue_slot_to_offset(vue_map->vert_result_to_slot[vert_result]); 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_sf_prog_data { 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint urb_read_length; 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint total_grf; 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Each vertex may have upto 12 attributes, 4 components each, 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * except WPOS which requires only 2. (11*4 + 2) == 44 ==> 11 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * rows. 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Actually we use 4 for each, so call it 12 rows. 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint urb_entry_size; 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_clip_prog_data { 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint curb_read_length; /* user planes? */ 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint clip_mode; 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint urb_read_length; 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint total_grf; 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_gs_prog_data { 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint urb_read_length; 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint total_grf; 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Gen6 transform feedback: Amount by which the streaming vertex buffer 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * indices should be incremented each time the GS is invoked. 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned svbi_postincrement_value; 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_vs_prog_data { 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_vue_map vue_map; 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint curb_read_length; 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint urb_read_length; 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint total_grf; 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield64 outputs_written; 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint nr_params; /**< number of float params/constants */ 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint nr_pull_params; /**< number of dwords referenced by pull_param[] */ 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint total_scratch; 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield64 inputs_read; 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Used for calculating urb partitions: 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint urb_entry_size; 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const float *param[MAX_UNIFORMS * 4]; /* should be: BRW_MAX_CURBE */ 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const float *pull_param[MAX_UNIFORMS * 4]; 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool uses_new_param_layout; 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool uses_vertexid; 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool userclip; 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int num_surfaces; 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Size == 0 if output either not written, or always [0,0,0,1] 458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_vs_ouput_sizes { 460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLubyte output_size[VERT_RESULT_MAX]; 461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Number of texture sampler units */ 465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_MAX_TEX_UNIT 16 466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Max number of render targets in a shader */ 468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_MAX_DRAW_BUFFERS 8 469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Max number of binding table entries used for stream output. 472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * From the OpenGL 3.0 spec, table 6.44 (Transform Feedback State), the 474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * minimum value of MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS is 64. 475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * On Gen6, the size of transform feedback data is limited not by the number 477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * of components but by the number of binding table entries we set aside. We 478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * use one binding table entry for a float, one entry for a vector, and one 479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * entry per matrix column. Since the only way we can communicate our 480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * transform feedback capabilities to the client is via 481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS, we need to plan for the 482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * worst case, in which all the varyings are floats, so we use up one binding 483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * table entry per component. Therefore we need to set aside at least 64 484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * binding table entries for use by transform feedback. 485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Note: since we don't currently pack varyings, it is currently impossible 487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * for the client to actually use up all of these binding table entries--if 488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * all of their varyings were floats, they would run out of varying slots and 489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * fail to link. But that's a bug, so it seems prudent to go ahead and 490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * allocate the number of binding table entries we will need once the bug is 491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * fixed. 492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_MAX_SOL_BINDINGS 64 494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Maximum number of actual buffers used for stream output */ 496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_MAX_SOL_BUFFERS 4 497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_MAX_WM_UBOS 12 499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_MAX_VS_UBOS 12 500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Helpers to create Surface Binding Table indexes for draw buffers, 503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * textures, and constant buffers. 504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Shader threads access surfaces via numeric handles, rather than directly 506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * using pointers. The binding table maps these numeric handles to the 507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * address of the actual buffer. 508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * For example, a shader might ask to sample from "surface 7." In this case, 510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * bind[7] would contain a pointer to a texture. 511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Currently, our WM binding tables are (arbitrarily) programmed as follows: 513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * +-------------------------------+ 515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | 0 | Draw buffer 0 | 516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | . | . | 517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | : | : | 518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | 7 | Draw buffer 7 | 519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * |-----|-------------------------| 520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | 8 | WM Pull Constant Buffer | 521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * |-----|-------------------------| 522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | 9 | Texture 0 | 523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | . | . | 524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | : | : | 525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | 24 | Texture 15 | 526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * |-----|-------------------------| 527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | 25 | UBO 0 | 528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | . | . | 529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | : | : | 530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | 36 | UBO 11 | 531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * +-------------------------------+ 532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Our VS binding tables are programmed as follows: 534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * +-----+-------------------------+ 536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | 0 | VS Pull Constant Buffer | 537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * +-----+-------------------------+ 538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | 1 | Texture 0 | 539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | . | . | 540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | : | : | 541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | 16 | Texture 15 | 542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * +-----+-------------------------+ 543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | 17 | UBO 0 | 544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | . | . | 545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | : | : | 546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | 28 | UBO 11 | 547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * +-------------------------------+ 548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Our (gen6) GS binding tables are programmed as follows: 550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * +-----+-------------------------+ 552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | 0 | SOL Binding 0 | 553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | . | . | 554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | : | : | 555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * | 63 | SOL Binding 63 | 556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * +-----+-------------------------+ 557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Note that nothing actually uses the SURF_INDEX_DRAW macro, so it has to be 559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the identity function or things will break. We do want to keep draw buffers 560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * first so we can use headerless render target writes for RT 0. 561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SURF_INDEX_DRAW(d) (d) 563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SURF_INDEX_FRAG_CONST_BUFFER (BRW_MAX_DRAW_BUFFERS + 1) 564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SURF_INDEX_TEXTURE(t) (BRW_MAX_DRAW_BUFFERS + 2 + (t)) 565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SURF_INDEX_WM_UBO(u) (SURF_INDEX_TEXTURE(BRW_MAX_TEX_UNIT) + u) 566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** Maximum size of the binding table. */ 568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_MAX_WM_SURFACES SURF_INDEX_WM_UBO(BRW_MAX_WM_UBOS) 569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SURF_INDEX_VERT_CONST_BUFFER (0) 571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SURF_INDEX_VS_TEXTURE(t) (SURF_INDEX_VERT_CONST_BUFFER + 1 + (t)) 572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SURF_INDEX_VS_UBO(u) (SURF_INDEX_VS_TEXTURE(BRW_MAX_TEX_UNIT) + u) 573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_MAX_VS_SURFACES SURF_INDEX_VS_UBO(BRW_MAX_VS_UBOS) 574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SURF_INDEX_SOL_BINDING(t) ((t)) 576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_MAX_GS_SURFACES SURF_INDEX_SOL_BINDING(BRW_MAX_SOL_BINDINGS) 577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgenum brw_cache_id { 579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_BLEND_STATE, 580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_DEPTH_STENCIL_STATE, 581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_COLOR_CALC_STATE, 582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_CC_VP, 583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_CC_UNIT, 584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_WM_PROG, 585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_BLORP_BLIT_PROG, 586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_SAMPLER, 587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_WM_UNIT, 588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_SF_PROG, 589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_SF_VP, 590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_SF_UNIT, /* scissor state on gen6 */ 591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_VS_UNIT, 592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_VS_PROG, 593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_GS_UNIT, 594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_GS_PROG, 595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_CLIP_VP, 596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_CLIP_UNIT, 597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_CLIP_PROG, 598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BRW_MAX_CACHE 600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_cache_item { 603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Effectively part of the key, cache_id identifies what kind of state 605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * buffer is involved, and also which brw->state.dirty.cache flag should 606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * be set when this cache item is chosen. 607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum brw_cache_id cache_id; 609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 32-bit hash of the key data */ 610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint hash; 611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint key_size; /* for variable-sized keys */ 612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint aux_size; 613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const void *key; 614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t offset; 616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t size; 617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_cache_item *next; 619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_cache { 624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_context *brw; 625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_cache_item **items; 627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo *bo; 628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint size, n_items; 629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t next_offset; 631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool bo_used_by_gpu; 632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Considered adding a member to this struct to document which flags 636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * an update might raise so that ordering of the state atoms can be 637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * checked or derived at runtime. Dropped the idea in favor of having 638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * a debug mode where the state is monitored for flags which are 639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * raised that have already been tested against. 640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_tracked_state { 642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_state_flags dirty; 643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*emit)( struct brw_context *brw ); 644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Flags for brw->state.cache. 647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CACHE_NEW_BLEND_STATE (1<<BRW_BLEND_STATE) 649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CACHE_NEW_DEPTH_STENCIL_STATE (1<<BRW_DEPTH_STENCIL_STATE) 650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CACHE_NEW_COLOR_CALC_STATE (1<<BRW_COLOR_CALC_STATE) 651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CACHE_NEW_CC_VP (1<<BRW_CC_VP) 652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CACHE_NEW_CC_UNIT (1<<BRW_CC_UNIT) 653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CACHE_NEW_WM_PROG (1<<BRW_WM_PROG) 654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CACHE_NEW_SAMPLER (1<<BRW_SAMPLER) 655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CACHE_NEW_WM_UNIT (1<<BRW_WM_UNIT) 656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CACHE_NEW_SF_PROG (1<<BRW_SF_PROG) 657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CACHE_NEW_SF_VP (1<<BRW_SF_VP) 658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CACHE_NEW_SF_UNIT (1<<BRW_SF_UNIT) 659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CACHE_NEW_VS_UNIT (1<<BRW_VS_UNIT) 660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CACHE_NEW_VS_PROG (1<<BRW_VS_PROG) 661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CACHE_NEW_GS_UNIT (1<<BRW_GS_UNIT) 662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CACHE_NEW_GS_PROG (1<<BRW_GS_PROG) 663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CACHE_NEW_CLIP_VP (1<<BRW_CLIP_VP) 664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CACHE_NEW_CLIP_UNIT (1<<BRW_CLIP_UNIT) 665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CACHE_NEW_CLIP_PROG (1<<BRW_CLIP_PROG) 666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_cached_batch_item { 668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct header *header; 669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint sz; 670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_cached_batch_item *next; 671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Protect against a future where VERT_ATTRIB_MAX > 32. Wouldn't life 676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * be easier if C allowed arrays of packed elements? 677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define ATTRIB_BIT_DWORDS ((VERT_ATTRIB_MAX+31)/32) 679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_vertex_buffer { 681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Buffer object containing the uploaded vertex data */ 682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo *bo; 683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t offset; 684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Byte stride between elements in the uploaded array */ 685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint stride; 686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint step_rate; 687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_vertex_element { 689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct gl_client_array *glarray; 690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int buffer; 692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** The corresponding Mesa vertex attribute */ 694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_vert_attrib attrib; 695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Size of a complete element */ 696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint element_size; 697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Offset of the first element within the buffer object */ 698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int offset; 699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_vertex_info { 704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint sizes[ATTRIB_BIT_DWORDS * 2]; /* sizes:2[VERT_ATTRIB_MAX] */ 705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_query_object { 708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_query_object Base; 709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Last query BO associated with this query. */ 711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo *bo; 712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** First index in bo with query data for this object. */ 713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int first_index; 714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Last index in bo with query data for this object. */ 715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int last_index; 716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * brw_context is derived from intel_context. 721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_context 723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_context intel; /**< base class, must be first field */ 725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint primitive; /**< Hardware primitive, such as _3DPRIM_TRILIST. */ 726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool emit_state_always; 728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool has_surface_tile_offset; 729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool has_compr4; 730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool has_negative_rhw_bug; 731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool has_aa_line_parameters; 732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool has_pln; 733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool precompile; 734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Some versions of Gen hardware don't do centroid interpolation correctly 737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * on unlit pixels, causing incorrect values for derivatives near triangle 738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * edges. Enabling this flag causes the fragment shader to use 739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * non-centroid interpolation for unlit pixels, at the expense of two extra 740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * fragment shader instructions. 741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool needs_unlit_centroid_workaround; 743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_state_flags dirty; 746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } state; 747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_cache cache; 749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_cached_batch_item *cached_batch_items; 750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_vertex_element inputs[VERT_ATTRIB_MAX]; 753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_vertex_buffer buffers[VERT_ATTRIB_MAX]; 754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t handle; 756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t offset; 757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t stride; 758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t step_rate; 759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } current_buffers[VERT_ATTRIB_MAX]; 760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_vertex_element *enabled[VERT_ATTRIB_MAX]; 762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint nr_enabled; 763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint nr_buffers, nr_current_buffers; 764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Summary of size and varying of active arrays, so we can check 766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * for changes to this state: 767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_vertex_info info; 769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int min_index, max_index; 770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Offset from start of vertex buffer so we can avoid redefining 772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the same VB packed over and over again. 773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int start_vertex_bias; 775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } vb; 776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Index buffer for this draw_prims call. 780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Updates are signaled by BRW_NEW_INDICES. 782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct _mesa_index_buffer *ib; 784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Updates are signaled by BRW_NEW_INDEX_BUFFER. */ 786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo *bo; 787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint type; 788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Offset to index buffer index to use in CMD_3D_PRIM so that we can 790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * avoid re-uploading the IB packet over and over if we're actually 791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * referencing the same index buffer. 792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned int start_vertex_offset; 794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } ib; 795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Active vertex program: 797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct gl_vertex_program *vertex_program; 799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct gl_fragment_program *fragment_program; 800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* hw-dependent 3DSTATE_VF_STATISTICS opcode */ 802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t CMD_VF_STATISTICS; 803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* hw-dependent 3DSTATE_PIPELINE_SELECT opcode */ 804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t CMD_PIPELINE_SELECT; 805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Platform specific constants containing the maximum number of threads 808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * for each pipeline stage. 809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int max_vs_threads; 811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int max_gs_threads; 812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int max_wm_threads; 813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* BRW_NEW_URB_ALLOCATIONS: 815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint vsize; /* vertex size plus header in urb registers */ 818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint csize; /* constant buffer size in urb registers */ 819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint sfsize; /* setup data size in urb registers */ 820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool constrained; 822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint max_vs_entries; /* Maximum number of VS entries */ 824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint max_gs_entries; /* Maximum number of GS entries */ 825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint nr_vs_entries; 827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint nr_gs_entries; 828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint nr_clip_entries; 829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint nr_sf_entries; 830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint nr_cs_entries; 831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* gen6: 833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The length of each URB entry owned by the VS (or GS), as 834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * a number of 1024-bit (128-byte) rows. Should be >= 1. 835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * gen7: Same meaning, but in 512-bit (64-byte) rows. 837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint vs_size; 839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint gs_size; 840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint vs_start; 842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint gs_start; 843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint clip_start; 844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint sf_start; 845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint cs_start; 846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint size; /* Hardware URB size, in KB. */ 847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* gen6: True if the most recently sent _3DSTATE_URB message allocated 849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * URB space for the GS. 850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool gen6_gs_previously_active; 852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } urb; 853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* BRW_NEW_CURBE_OFFSETS: 856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint wm_start; /**< pos of first wm const in CURBE buffer */ 859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint wm_size; /**< number of float[4] consts, multiple of 16 */ 860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint clip_start; 861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint clip_size; 862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint vs_start; 863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint vs_size; 864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint total_size; 865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo *curbe_bo; 867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Offset within curbe_bo of space for current curbe entry */ 868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint curbe_offset; 869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Offset within curbe_bo of space for next curbe entry */ 870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint curbe_next_offset; 871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copy of the last set of CURBEs uploaded. Frequently we'll end up 874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * in brw_curbe.c with the same set of constant data to be uploaded, 875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * so we'd rather not upload new constants in that case (it can cause 876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * a pipeline bubble since only up to 4 can be pipelined at a time). 877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat *last_buf; 879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Allocation for where to calculate the next set of CURBEs. 881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * It's a hot enough path that malloc/free of that data matters. 882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLfloat *next_buf; 884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint last_bufsz; 885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } curbe; 886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** SAMPLER_STATE count and offset */ 888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint count; 890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t offset; 891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } sampler; 892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_vs_prog_data *prog_data; 895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int8_t *constant_map; /* variable array following prog_data */ 896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo *scratch_bo; 898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo *const_bo; 899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Offset in the program cache to the VS program */ 900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t prog_offset; 901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t state_offset; 902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t push_const_offset; /* Offset in the batchbuffer */ 904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int push_const_size; /* in 256-bit register increments */ 905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** @{ register allocator */ 907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ra_regs *regs; 909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Array of the ra classes for the unaligned contiguous register 912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * block sizes used. 913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int *classes; 915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Mapping for register-allocated objects in *regs to the first 918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GRF for that object. 919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint8_t *ra_reg_to_grf; 921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** @} */ 922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t bind_bo_offset; 924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t surf_offset[BRW_MAX_VS_SURFACES]; 925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } vs; 926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_gs_prog_data *prog_data; 929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool prog_active; 931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Offset in the program cache to the CLIP program pre-gen6 */ 932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t prog_offset; 933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t state_offset; 934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t bind_bo_offset; 936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t surf_offset[BRW_MAX_GS_SURFACES]; 937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } gs; 938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_clip_prog_data *prog_data; 941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Offset in the program cache to the CLIP program pre-gen6 */ 943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t prog_offset; 944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Offset in the batch to the CLIP state on pre-gen6. */ 946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t state_offset; 947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* As of gen6, this is the offset in the batch to the CLIP VP, 949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * instead of vp_bo. 950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t vp_offset; 952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } clip; 953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_sf_prog_data *prog_data; 957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Offset in the program cache to the CLIP program pre-gen6 */ 959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t prog_offset; 960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t state_offset; 961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t vp_offset; 962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } sf; 963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_wm_prog_data *prog_data; 966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_wm_compile *compile_data; 967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Input sizes, calculated from active vertex program. 969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * One bit per fragment program input attribute. 970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield input_size_masks[4]; 972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** offsets in the batch to sampler default colors (texture border color) 974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t sdc_offset[BRW_MAX_TEX_UNIT]; 976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint render_surf; 978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo *scratch_bo; 980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Buffer object used in place of multisampled null render targets on 983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Gen6. See brw_update_null_renderbuffer_surface(). 984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo *multisampled_null_render_target_bo; 986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Offset in the program cache to the WM program */ 988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t prog_offset; 989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t state_offset; /* offset in batchbuffer to pre-gen6 WM state */ 991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo *const_bo; /* pull constant buffer. */ 993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is offset in the batch to the push constants on gen6. 995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Pre-gen6, push constants live in the CURBE. 997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t push_const_offset; 999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Binding table of pointers to surf_bo entries */ 1001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t bind_bo_offset; 1002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t surf_offset[BRW_MAX_WM_SURFACES]; 1003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** @{ register allocator */ 1005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ra_regs *regs; 1007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** Array of the ra classes for the unaligned contiguous 1009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * register block sizes used. 1010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int *classes; 1012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 1014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Mapping for register-allocated objects in *regs to the first 1015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GRF for that object. 1016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint8_t *ra_reg_to_grf; 1018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 1020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * ra class for the aligned pairs we use for PLN, which doesn't 1021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * appear in *classes. 1022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int aligned_pairs_class; 1024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** @} */ 1026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } wm; 1027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 1030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t state_offset; 1031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t blend_state_offset; 1032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t depth_stencil_state_offset; 1033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t vp_offset; 1034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } cc; 1035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 1037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_query_object *obj; 1038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo *bo; 1039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int index; 1040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool active; 1041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } query; 1042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Used to give every program string a unique id 1043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint program_id; 1045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int num_atoms; 1047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct brw_tracked_state **atoms; 1048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* If (INTEL_DEBUG & DEBUG_BATCH) */ 1050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 1051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t offset; 1052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t size; 1053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum state_struct_type type; 1054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } *state_batch_list; 1055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int state_batch_count; 1056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct brw_sol_state { 1058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t svbi_0_starting_index; 1059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t svbi_0_max_index; 1060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t offset_0_batch_start; 1061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t primitives_generated; 1062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t primitives_written; 1063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool counting_primitives_generated; 1064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool counting_primitives_written; 1065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } sol; 1066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t render_target_format[MESA_FORMAT_COUNT]; 1068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool format_supported_as_render_target[MESA_FORMAT_COUNT]; 1069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* PrimitiveRestart */ 1071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 1072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool in_progress; 1073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool enable_cut_index; 1074f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } prim_restart; 1075f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1076f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t num_instances; 1077f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1078f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1079f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1080f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1081f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define BRW_PACKCOLOR8888(r,g,b,a) ((r<<24) | (g<<16) | (b<<8) | a) 1082f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1083f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct brw_instruction_info { 1084f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org char *name; 1085f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int nsrc; 1086f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int ndst; 1087f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool is_arith; 1088f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 1089f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern const struct brw_instruction_info brw_opcodes[128]; 1090f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1091f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*====================================================================== 1092f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * brw_vtbl.c 1093f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1094f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid brwInitVtbl( struct brw_context *brw ); 1095f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1096f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*====================================================================== 1097f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * brw_context.c 1098f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1099f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbool brwCreateContext(int api, 1100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct gl_config *mesaVis, 1101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __DRIcontext *driContextPriv, 1102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned major_version, 1103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned minor_version, 1104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t flags, 1105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *error, 1106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *sharedContextPrivate); 1107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*====================================================================== 1109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * brw_queryobj.c 1110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid brw_init_queryobj_functions(struct dd_function_table *functions); 1112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid brw_prepare_query_begin(struct brw_context *brw); 1113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid brw_emit_query_begin(struct brw_context *brw); 1114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid brw_emit_query_end(struct brw_context *brw); 1115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*====================================================================== 1117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * brw_state_dump.c 1118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid brw_debug_batch(struct intel_context *intel); 1120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid brw_annotate_aub(struct intel_context *intel); 1121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*====================================================================== 1123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * brw_tex.c 1124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid brw_validate_textures( struct brw_context *brw ); 1126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*====================================================================== 1129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * brw_program.c 1130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid brwInitFragProgFuncs( struct dd_function_table *functions ); 1132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint brw_get_scratch_size(int size); 1134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid brw_get_scratch_bo(struct intel_context *intel, 1135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo **scratch_bo, int size); 1136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* brw_urb.c 1139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid brw_upload_urb_fence(struct brw_context *brw); 1141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* brw_curbe.c 1143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid brw_upload_cs_urb_state(struct brw_context *brw); 1145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* brw_disasm.c */ 1147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint brw_disasm (FILE *file, struct brw_instruction *inst, int gen); 1148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* brw_vs.c */ 1150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orggl_clip_plane *brw_select_clip_planes(struct gl_context *ctx); 1151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* brw_wm_surface_state.c */ 1153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid brw_init_surface_formats(struct brw_context *brw); 1154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 1155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_update_sol_surface(struct brw_context *brw, 1156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_buffer_object *buffer_obj, 1157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t *out_offset, unsigned num_vector_components, 1158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned stride_dwords, unsigned offset_dwords); 1159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid brw_upload_ubo_surfaces(struct brw_context *brw, 1160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_shader *shader, 1161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t *surf_offsets); 1162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* gen6_sol.c */ 1164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 1165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_begin_transform_feedback(struct gl_context *ctx, GLenum mode, 1166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_transform_feedback_object *obj); 1167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 1168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_end_transform_feedback(struct gl_context *ctx, 1169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_transform_feedback_object *obj); 1170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* gen7_sol_state.c */ 1172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 1173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orggen7_end_transform_feedback(struct gl_context *ctx, 1174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct gl_transform_feedback_object *obj); 1175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* brw_blorp_blit.cpp */ 1177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLbitfield 1178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_blorp_framebuffer(struct intel_context *intel, 1179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, 1180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, 1181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLbitfield mask, GLenum filter); 1182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* gen6_multisample_state.c */ 1184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 1185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orggen6_emit_3dstate_multisample(struct brw_context *brw, 1186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_samples); 1187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 1188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orggen6_emit_3dstate_sample_mask(struct brw_context *brw, 1189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_samples, float coverage, 1190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool coverage_invert); 1191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* gen7_urb.c */ 1193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 1194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orggen7_allocate_push_constants(struct brw_context *brw); 1195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 1197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orggen7_emit_urb_state(struct brw_context *brw, GLuint nr_vs_entries, 1198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org GLuint vs_size, GLuint vs_start); 1199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*====================================================================== 1203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Inline conversion functions. These are better-typed than the 1204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * macros used previously: 1205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct brw_context * 1207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_context( struct gl_context *ctx ) 1208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (struct brw_context *)ctx; 1210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct brw_vertex_program * 1213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_vertex_program(struct gl_vertex_program *p) 1214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (struct brw_vertex_program *) p; 1216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE const struct brw_vertex_program * 1219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_vertex_program_const(const struct gl_vertex_program *p) 1220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (const struct brw_vertex_program *) p; 1222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct brw_fragment_program * 1225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_fragment_program(struct gl_fragment_program *p) 1226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (struct brw_fragment_program *) p; 1228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE const struct brw_fragment_program * 1231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_fragment_program_const(const struct gl_fragment_program *p) 1232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (const struct brw_fragment_program *) p; 1234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 1237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Pre-gen6, the register file of the EUs was shared between threads, 1238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and each thread used some subset allocated on a 16-register block 1239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * granularity. The unit states wanted these block counts. 1240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 1241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic inline int 1242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_register_blocks(int reg_count) 1243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ALIGN(reg_count, 16) / 16 - 1; 1245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic inline uint32_t 1248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbrw_program_reloc(struct brw_context *brw, uint32_t state_offset, 1249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t prog_offset) 1250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct intel_context *intel = &brw->intel; 1252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (intel->gen >= 5) { 1254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Using state base address. */ 1255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return prog_offset; 1256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org drm_intel_bo_emit_reloc(intel->batch.bo, 1259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org state_offset, 1260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org brw->cache.bo, 1261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org prog_offset, 1262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I915_GEM_DOMAIN_INSTRUCTION, 0); 1263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return brw->cache.bo->offset + prog_offset; 1265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbool brw_do_cubemap_normalize(struct exec_list *instructions); 1268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbool brw_lower_texture_gradients(struct exec_list *instructions); 1269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef __cplusplus 1271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 1273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 1275