1b8e80941Smrg/* 2b8e80941Smrg Copyright (C) Intel Corp. 2006. All Rights Reserved. 3b8e80941Smrg Intel funded Tungsten Graphics to 4b8e80941Smrg develop this 3D driver. 5b8e80941Smrg 6b8e80941Smrg Permission is hereby granted, free of charge, to any person obtaining 7b8e80941Smrg a copy of this software and associated documentation files (the 8b8e80941Smrg "Software"), to deal in the Software without restriction, including 9b8e80941Smrg without limitation the rights to use, copy, modify, merge, publish, 10b8e80941Smrg distribute, sublicense, and/or sell copies of the Software, and to 11b8e80941Smrg permit persons to whom the Software is furnished to do so, subject to 12b8e80941Smrg the following conditions: 13b8e80941Smrg 14b8e80941Smrg The above copyright notice and this permission notice (including the 15b8e80941Smrg next paragraph) shall be included in all copies or substantial 16b8e80941Smrg portions of the Software. 17b8e80941Smrg 18b8e80941Smrg THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 19b8e80941Smrg EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20b8e80941Smrg MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 21b8e80941Smrg IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 22b8e80941Smrg LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 23b8e80941Smrg OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 24b8e80941Smrg WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25b8e80941Smrg 26b8e80941Smrg **********************************************************************/ 27b8e80941Smrg /* 28b8e80941Smrg * Authors: 29b8e80941Smrg * Keith Whitwell <keithw@vmware.com> 30b8e80941Smrg */ 31b8e80941Smrg 32b8e80941Smrg#ifndef BRW_EU_DEFINES_H 33b8e80941Smrg#define BRW_EU_DEFINES_H 34b8e80941Smrg 35b8e80941Smrg#include "util/macros.h" 36b8e80941Smrg 37b8e80941Smrg/* The following hunk, up-to "Execution Unit" is used by both the 38b8e80941Smrg * intel/compiler and i965 codebase. */ 39b8e80941Smrg 40b8e80941Smrg#define INTEL_MASK(high, low) (((1u<<((high)-(low)+1))-1)<<(low)) 41b8e80941Smrg/* Using the GNU statement expression extension */ 42b8e80941Smrg#define SET_FIELD(value, field) \ 43b8e80941Smrg ({ \ 44b8e80941Smrg uint32_t fieldval = (uint32_t)(value) << field ## _SHIFT; \ 45b8e80941Smrg assert((fieldval & ~ field ## _MASK) == 0); \ 46b8e80941Smrg fieldval & field ## _MASK; \ 47b8e80941Smrg }) 48b8e80941Smrg 49b8e80941Smrg#define SET_BITS(value, high, low) \ 50b8e80941Smrg ({ \ 51b8e80941Smrg const uint32_t fieldval = (uint32_t)(value) << (low); \ 52b8e80941Smrg assert((fieldval & ~INTEL_MASK(high, low)) == 0); \ 53b8e80941Smrg fieldval & INTEL_MASK(high, low); \ 54b8e80941Smrg }) 55b8e80941Smrg 56b8e80941Smrg#define GET_BITS(data, high, low) ((data & INTEL_MASK((high), (low))) >> (low)) 57b8e80941Smrg#define GET_FIELD(word, field) (((word) & field ## _MASK) >> field ## _SHIFT) 58b8e80941Smrg 59b8e80941Smrg#define _3DPRIM_POINTLIST 0x01 60b8e80941Smrg#define _3DPRIM_LINELIST 0x02 61b8e80941Smrg#define _3DPRIM_LINESTRIP 0x03 62b8e80941Smrg#define _3DPRIM_TRILIST 0x04 63b8e80941Smrg#define _3DPRIM_TRISTRIP 0x05 64b8e80941Smrg#define _3DPRIM_TRIFAN 0x06 65b8e80941Smrg#define _3DPRIM_QUADLIST 0x07 66b8e80941Smrg#define _3DPRIM_QUADSTRIP 0x08 67b8e80941Smrg#define _3DPRIM_LINELIST_ADJ 0x09 /* G45+ */ 68b8e80941Smrg#define _3DPRIM_LINESTRIP_ADJ 0x0A /* G45+ */ 69b8e80941Smrg#define _3DPRIM_TRILIST_ADJ 0x0B /* G45+ */ 70b8e80941Smrg#define _3DPRIM_TRISTRIP_ADJ 0x0C /* G45+ */ 71b8e80941Smrg#define _3DPRIM_TRISTRIP_REVERSE 0x0D 72b8e80941Smrg#define _3DPRIM_POLYGON 0x0E 73b8e80941Smrg#define _3DPRIM_RECTLIST 0x0F 74b8e80941Smrg#define _3DPRIM_LINELOOP 0x10 75b8e80941Smrg#define _3DPRIM_POINTLIST_BF 0x11 76b8e80941Smrg#define _3DPRIM_LINESTRIP_CONT 0x12 77b8e80941Smrg#define _3DPRIM_LINESTRIP_BF 0x13 78b8e80941Smrg#define _3DPRIM_LINESTRIP_CONT_BF 0x14 79b8e80941Smrg#define _3DPRIM_TRIFAN_NOSTIPPLE 0x16 80b8e80941Smrg#define _3DPRIM_PATCHLIST(n) ({ assert(n > 0 && n <= 32); 0x20 + (n - 1); }) 81b8e80941Smrg 82b8e80941Smrg/* Bitfields for the URB_WRITE message, DW2 of message header: */ 83b8e80941Smrg#define URB_WRITE_PRIM_END 0x1 84b8e80941Smrg#define URB_WRITE_PRIM_START 0x2 85b8e80941Smrg#define URB_WRITE_PRIM_TYPE_SHIFT 2 86b8e80941Smrg 87b8e80941Smrg#define BRW_SPRITE_POINT_ENABLE 16 88b8e80941Smrg 89b8e80941Smrg# define GEN7_GS_CONTROL_DATA_FORMAT_GSCTL_CUT 0 90b8e80941Smrg# define GEN7_GS_CONTROL_DATA_FORMAT_GSCTL_SID 1 91b8e80941Smrg 92b8e80941Smrg/* Execution Unit (EU) defines 93b8e80941Smrg */ 94b8e80941Smrg 95b8e80941Smrg#define BRW_ALIGN_1 0 96b8e80941Smrg#define BRW_ALIGN_16 1 97b8e80941Smrg 98b8e80941Smrg#define BRW_ADDRESS_DIRECT 0 99b8e80941Smrg#define BRW_ADDRESS_REGISTER_INDIRECT_REGISTER 1 100b8e80941Smrg 101b8e80941Smrg#define BRW_CHANNEL_X 0 102b8e80941Smrg#define BRW_CHANNEL_Y 1 103b8e80941Smrg#define BRW_CHANNEL_Z 2 104b8e80941Smrg#define BRW_CHANNEL_W 3 105b8e80941Smrg 106b8e80941Smrgenum brw_compression { 107b8e80941Smrg BRW_COMPRESSION_NONE = 0, 108b8e80941Smrg BRW_COMPRESSION_2NDHALF = 1, 109b8e80941Smrg BRW_COMPRESSION_COMPRESSED = 2, 110b8e80941Smrg}; 111b8e80941Smrg 112b8e80941Smrg#define GEN6_COMPRESSION_1Q 0 113b8e80941Smrg#define GEN6_COMPRESSION_2Q 1 114b8e80941Smrg#define GEN6_COMPRESSION_3Q 2 115b8e80941Smrg#define GEN6_COMPRESSION_4Q 3 116b8e80941Smrg#define GEN6_COMPRESSION_1H 0 117b8e80941Smrg#define GEN6_COMPRESSION_2H 2 118b8e80941Smrg 119b8e80941Smrgenum PACKED brw_conditional_mod { 120b8e80941Smrg BRW_CONDITIONAL_NONE = 0, 121b8e80941Smrg BRW_CONDITIONAL_Z = 1, 122b8e80941Smrg BRW_CONDITIONAL_NZ = 2, 123b8e80941Smrg BRW_CONDITIONAL_EQ = 1, /* Z */ 124b8e80941Smrg BRW_CONDITIONAL_NEQ = 2, /* NZ */ 125b8e80941Smrg BRW_CONDITIONAL_G = 3, 126b8e80941Smrg BRW_CONDITIONAL_GE = 4, 127b8e80941Smrg BRW_CONDITIONAL_L = 5, 128b8e80941Smrg BRW_CONDITIONAL_LE = 6, 129b8e80941Smrg BRW_CONDITIONAL_R = 7, /* Gen <= 5 */ 130b8e80941Smrg BRW_CONDITIONAL_O = 8, 131b8e80941Smrg BRW_CONDITIONAL_U = 9, 132b8e80941Smrg}; 133b8e80941Smrg 134b8e80941Smrg#define BRW_DEBUG_NONE 0 135b8e80941Smrg#define BRW_DEBUG_BREAKPOINT 1 136b8e80941Smrg 137b8e80941Smrg#define BRW_DEPENDENCY_NORMAL 0 138b8e80941Smrg#define BRW_DEPENDENCY_NOTCLEARED 1 139b8e80941Smrg#define BRW_DEPENDENCY_NOTCHECKED 2 140b8e80941Smrg#define BRW_DEPENDENCY_DISABLE 3 141b8e80941Smrg 142b8e80941Smrgenum PACKED brw_execution_size { 143b8e80941Smrg BRW_EXECUTE_1 = 0, 144b8e80941Smrg BRW_EXECUTE_2 = 1, 145b8e80941Smrg BRW_EXECUTE_4 = 2, 146b8e80941Smrg BRW_EXECUTE_8 = 3, 147b8e80941Smrg BRW_EXECUTE_16 = 4, 148b8e80941Smrg BRW_EXECUTE_32 = 5, 149b8e80941Smrg}; 150b8e80941Smrg 151b8e80941Smrgenum PACKED brw_horizontal_stride { 152b8e80941Smrg BRW_HORIZONTAL_STRIDE_0 = 0, 153b8e80941Smrg BRW_HORIZONTAL_STRIDE_1 = 1, 154b8e80941Smrg BRW_HORIZONTAL_STRIDE_2 = 2, 155b8e80941Smrg BRW_HORIZONTAL_STRIDE_4 = 3, 156b8e80941Smrg}; 157b8e80941Smrg 158b8e80941Smrgenum PACKED gen10_align1_3src_src_horizontal_stride { 159b8e80941Smrg BRW_ALIGN1_3SRC_SRC_HORIZONTAL_STRIDE_0 = 0, 160b8e80941Smrg BRW_ALIGN1_3SRC_SRC_HORIZONTAL_STRIDE_1 = 1, 161b8e80941Smrg BRW_ALIGN1_3SRC_SRC_HORIZONTAL_STRIDE_2 = 2, 162b8e80941Smrg BRW_ALIGN1_3SRC_SRC_HORIZONTAL_STRIDE_4 = 3, 163b8e80941Smrg}; 164b8e80941Smrg 165b8e80941Smrgenum PACKED gen10_align1_3src_dst_horizontal_stride { 166b8e80941Smrg BRW_ALIGN1_3SRC_DST_HORIZONTAL_STRIDE_1 = 0, 167b8e80941Smrg BRW_ALIGN1_3SRC_DST_HORIZONTAL_STRIDE_2 = 1, 168b8e80941Smrg}; 169b8e80941Smrg 170b8e80941Smrg#define BRW_INSTRUCTION_NORMAL 0 171b8e80941Smrg#define BRW_INSTRUCTION_SATURATE 1 172b8e80941Smrg 173b8e80941Smrg#define BRW_MASK_ENABLE 0 174b8e80941Smrg#define BRW_MASK_DISABLE 1 175b8e80941Smrg 176b8e80941Smrg/** @{ 177b8e80941Smrg * 178b8e80941Smrg * Gen6 has replaced "mask enable/disable" with WECtrl, which is 179b8e80941Smrg * effectively the same but much simpler to think about. Now, there 180b8e80941Smrg * are two contributors ANDed together to whether channels are 181b8e80941Smrg * executed: The predication on the instruction, and the channel write 182b8e80941Smrg * enable. 183b8e80941Smrg */ 184b8e80941Smrg/** 185b8e80941Smrg * This is the default value. It means that a channel's write enable is set 186b8e80941Smrg * if the per-channel IP is pointing at this instruction. 187b8e80941Smrg */ 188b8e80941Smrg#define BRW_WE_NORMAL 0 189b8e80941Smrg/** 190b8e80941Smrg * This is used like BRW_MASK_DISABLE, and causes all channels to have 191b8e80941Smrg * their write enable set. Note that predication still contributes to 192b8e80941Smrg * whether the channel actually gets written. 193b8e80941Smrg */ 194b8e80941Smrg#define BRW_WE_ALL 1 195b8e80941Smrg/** @} */ 196b8e80941Smrg 197b8e80941Smrgenum opcode { 198b8e80941Smrg /* These are the actual hardware opcodes. */ 199b8e80941Smrg BRW_OPCODE_ILLEGAL = 0, 200b8e80941Smrg BRW_OPCODE_MOV = 1, 201b8e80941Smrg BRW_OPCODE_SEL = 2, 202b8e80941Smrg BRW_OPCODE_MOVI = 3, /**< G45+ */ 203b8e80941Smrg BRW_OPCODE_NOT = 4, 204b8e80941Smrg BRW_OPCODE_AND = 5, 205b8e80941Smrg BRW_OPCODE_OR = 6, 206b8e80941Smrg BRW_OPCODE_XOR = 7, 207b8e80941Smrg BRW_OPCODE_SHR = 8, 208b8e80941Smrg BRW_OPCODE_SHL = 9, 209b8e80941Smrg BRW_OPCODE_DIM = 10, /**< Gen7.5 only */ /* Reused */ 210b8e80941Smrg BRW_OPCODE_SMOV = 10, /**< Gen8+ */ /* Reused */ 211b8e80941Smrg /* Reserved - 11 */ 212b8e80941Smrg BRW_OPCODE_ASR = 12, 213b8e80941Smrg /* Reserved - 13-15 */ 214b8e80941Smrg BRW_OPCODE_CMP = 16, 215b8e80941Smrg BRW_OPCODE_CMPN = 17, 216b8e80941Smrg BRW_OPCODE_CSEL = 18, /**< Gen8+ */ 217b8e80941Smrg BRW_OPCODE_F32TO16 = 19, /**< Gen7 only */ 218b8e80941Smrg BRW_OPCODE_F16TO32 = 20, /**< Gen7 only */ 219b8e80941Smrg /* Reserved - 21-22 */ 220b8e80941Smrg BRW_OPCODE_BFREV = 23, /**< Gen7+ */ 221b8e80941Smrg BRW_OPCODE_BFE = 24, /**< Gen7+ */ 222b8e80941Smrg BRW_OPCODE_BFI1 = 25, /**< Gen7+ */ 223b8e80941Smrg BRW_OPCODE_BFI2 = 26, /**< Gen7+ */ 224b8e80941Smrg /* Reserved - 27-31 */ 225b8e80941Smrg BRW_OPCODE_JMPI = 32, 226b8e80941Smrg BRW_OPCODE_BRD = 33, /**< Gen7+ */ 227b8e80941Smrg BRW_OPCODE_IF = 34, 228b8e80941Smrg BRW_OPCODE_IFF = 35, /**< Pre-Gen6 */ /* Reused */ 229b8e80941Smrg BRW_OPCODE_BRC = 35, /**< Gen7+ */ /* Reused */ 230b8e80941Smrg BRW_OPCODE_ELSE = 36, 231b8e80941Smrg BRW_OPCODE_ENDIF = 37, 232b8e80941Smrg BRW_OPCODE_DO = 38, /**< Pre-Gen6 */ /* Reused */ 233b8e80941Smrg BRW_OPCODE_CASE = 38, /**< Gen6 only */ /* Reused */ 234b8e80941Smrg BRW_OPCODE_WHILE = 39, 235b8e80941Smrg BRW_OPCODE_BREAK = 40, 236b8e80941Smrg BRW_OPCODE_CONTINUE = 41, 237b8e80941Smrg BRW_OPCODE_HALT = 42, 238b8e80941Smrg BRW_OPCODE_CALLA = 43, /**< Gen7.5+ */ 239b8e80941Smrg BRW_OPCODE_MSAVE = 44, /**< Pre-Gen6 */ /* Reused */ 240b8e80941Smrg BRW_OPCODE_CALL = 44, /**< Gen6+ */ /* Reused */ 241b8e80941Smrg BRW_OPCODE_MREST = 45, /**< Pre-Gen6 */ /* Reused */ 242b8e80941Smrg BRW_OPCODE_RET = 45, /**< Gen6+ */ /* Reused */ 243b8e80941Smrg BRW_OPCODE_PUSH = 46, /**< Pre-Gen6 */ /* Reused */ 244b8e80941Smrg BRW_OPCODE_FORK = 46, /**< Gen6 only */ /* Reused */ 245b8e80941Smrg BRW_OPCODE_GOTO = 46, /**< Gen8+ */ /* Reused */ 246b8e80941Smrg BRW_OPCODE_POP = 47, /**< Pre-Gen6 */ 247b8e80941Smrg BRW_OPCODE_WAIT = 48, 248b8e80941Smrg BRW_OPCODE_SEND = 49, 249b8e80941Smrg BRW_OPCODE_SENDC = 50, 250b8e80941Smrg BRW_OPCODE_SENDS = 51, /**< Gen9+ */ 251b8e80941Smrg BRW_OPCODE_SENDSC = 52, /**< Gen9+ */ 252b8e80941Smrg /* Reserved 53-55 */ 253b8e80941Smrg BRW_OPCODE_MATH = 56, /**< Gen6+ */ 254b8e80941Smrg /* Reserved 57-63 */ 255b8e80941Smrg BRW_OPCODE_ADD = 64, 256b8e80941Smrg BRW_OPCODE_MUL = 65, 257b8e80941Smrg BRW_OPCODE_AVG = 66, 258b8e80941Smrg BRW_OPCODE_FRC = 67, 259b8e80941Smrg BRW_OPCODE_RNDU = 68, 260b8e80941Smrg BRW_OPCODE_RNDD = 69, 261b8e80941Smrg BRW_OPCODE_RNDE = 70, 262b8e80941Smrg BRW_OPCODE_RNDZ = 71, 263b8e80941Smrg BRW_OPCODE_MAC = 72, 264b8e80941Smrg BRW_OPCODE_MACH = 73, 265b8e80941Smrg BRW_OPCODE_LZD = 74, 266b8e80941Smrg BRW_OPCODE_FBH = 75, /**< Gen7+ */ 267b8e80941Smrg BRW_OPCODE_FBL = 76, /**< Gen7+ */ 268b8e80941Smrg BRW_OPCODE_CBIT = 77, /**< Gen7+ */ 269b8e80941Smrg BRW_OPCODE_ADDC = 78, /**< Gen7+ */ 270b8e80941Smrg BRW_OPCODE_SUBB = 79, /**< Gen7+ */ 271b8e80941Smrg BRW_OPCODE_SAD2 = 80, 272b8e80941Smrg BRW_OPCODE_SADA2 = 81, 273b8e80941Smrg /* Reserved 82-83 */ 274b8e80941Smrg BRW_OPCODE_DP4 = 84, 275b8e80941Smrg BRW_OPCODE_DPH = 85, 276b8e80941Smrg BRW_OPCODE_DP3 = 86, 277b8e80941Smrg BRW_OPCODE_DP2 = 87, 278b8e80941Smrg /* Reserved 88 */ 279b8e80941Smrg BRW_OPCODE_LINE = 89, 280b8e80941Smrg BRW_OPCODE_PLN = 90, /**< G45+ */ 281b8e80941Smrg BRW_OPCODE_MAD = 91, /**< Gen6+ */ 282b8e80941Smrg BRW_OPCODE_LRP = 92, /**< Gen6+ */ 283b8e80941Smrg BRW_OPCODE_MADM = 93, /**< Gen8+ */ 284b8e80941Smrg /* Reserved 94-124 */ 285b8e80941Smrg BRW_OPCODE_NENOP = 125, /**< G45 only */ 286b8e80941Smrg BRW_OPCODE_NOP = 126, 287b8e80941Smrg /* Reserved 127 */ 288b8e80941Smrg 289b8e80941Smrg /* These are compiler backend opcodes that get translated into other 290b8e80941Smrg * instructions. 291b8e80941Smrg */ 292b8e80941Smrg FS_OPCODE_FB_WRITE = 128, 293b8e80941Smrg 294b8e80941Smrg /** 295b8e80941Smrg * Same as FS_OPCODE_FB_WRITE but expects its arguments separately as 296b8e80941Smrg * individual sources instead of as a single payload blob. The 297b8e80941Smrg * position/ordering of the arguments are defined by the enum 298b8e80941Smrg * fb_write_logical_srcs. 299b8e80941Smrg */ 300b8e80941Smrg FS_OPCODE_FB_WRITE_LOGICAL, 301b8e80941Smrg 302b8e80941Smrg FS_OPCODE_REP_FB_WRITE, 303b8e80941Smrg 304b8e80941Smrg FS_OPCODE_FB_READ, 305b8e80941Smrg FS_OPCODE_FB_READ_LOGICAL, 306b8e80941Smrg 307b8e80941Smrg SHADER_OPCODE_RCP, 308b8e80941Smrg SHADER_OPCODE_RSQ, 309b8e80941Smrg SHADER_OPCODE_SQRT, 310b8e80941Smrg SHADER_OPCODE_EXP2, 311b8e80941Smrg SHADER_OPCODE_LOG2, 312b8e80941Smrg SHADER_OPCODE_POW, 313b8e80941Smrg SHADER_OPCODE_INT_QUOTIENT, 314b8e80941Smrg SHADER_OPCODE_INT_REMAINDER, 315b8e80941Smrg SHADER_OPCODE_SIN, 316b8e80941Smrg SHADER_OPCODE_COS, 317b8e80941Smrg 318b8e80941Smrg /** 319b8e80941Smrg * A generic "send" opcode. The first two sources are the message 320b8e80941Smrg * descriptor and extended message descriptor respectively. The third 321b8e80941Smrg * and optional fourth sources are the message payload 322b8e80941Smrg */ 323b8e80941Smrg SHADER_OPCODE_SEND, 324b8e80941Smrg 325b8e80941Smrg /** 326b8e80941Smrg * Texture sampling opcodes. 327b8e80941Smrg * 328b8e80941Smrg * LOGICAL opcodes are eventually translated to the matching non-LOGICAL 329b8e80941Smrg * opcode but instead of taking a single payload blob they expect their 330b8e80941Smrg * arguments separately as individual sources. The position/ordering of the 331b8e80941Smrg * arguments are defined by the enum tex_logical_srcs. 332b8e80941Smrg */ 333b8e80941Smrg SHADER_OPCODE_TEX, 334b8e80941Smrg SHADER_OPCODE_TEX_LOGICAL, 335b8e80941Smrg SHADER_OPCODE_TXD, 336b8e80941Smrg SHADER_OPCODE_TXD_LOGICAL, 337b8e80941Smrg SHADER_OPCODE_TXF, 338b8e80941Smrg SHADER_OPCODE_TXF_LOGICAL, 339b8e80941Smrg SHADER_OPCODE_TXF_LZ, 340b8e80941Smrg SHADER_OPCODE_TXL, 341b8e80941Smrg SHADER_OPCODE_TXL_LOGICAL, 342b8e80941Smrg SHADER_OPCODE_TXL_LZ, 343b8e80941Smrg SHADER_OPCODE_TXS, 344b8e80941Smrg SHADER_OPCODE_TXS_LOGICAL, 345b8e80941Smrg FS_OPCODE_TXB, 346b8e80941Smrg FS_OPCODE_TXB_LOGICAL, 347b8e80941Smrg SHADER_OPCODE_TXF_CMS, 348b8e80941Smrg SHADER_OPCODE_TXF_CMS_LOGICAL, 349b8e80941Smrg SHADER_OPCODE_TXF_CMS_W, 350b8e80941Smrg SHADER_OPCODE_TXF_CMS_W_LOGICAL, 351b8e80941Smrg SHADER_OPCODE_TXF_UMS, 352b8e80941Smrg SHADER_OPCODE_TXF_UMS_LOGICAL, 353b8e80941Smrg SHADER_OPCODE_TXF_MCS, 354b8e80941Smrg SHADER_OPCODE_TXF_MCS_LOGICAL, 355b8e80941Smrg SHADER_OPCODE_LOD, 356b8e80941Smrg SHADER_OPCODE_LOD_LOGICAL, 357b8e80941Smrg SHADER_OPCODE_TG4, 358b8e80941Smrg SHADER_OPCODE_TG4_LOGICAL, 359b8e80941Smrg SHADER_OPCODE_TG4_OFFSET, 360b8e80941Smrg SHADER_OPCODE_TG4_OFFSET_LOGICAL, 361b8e80941Smrg SHADER_OPCODE_SAMPLEINFO, 362b8e80941Smrg SHADER_OPCODE_SAMPLEINFO_LOGICAL, 363b8e80941Smrg 364b8e80941Smrg SHADER_OPCODE_IMAGE_SIZE_LOGICAL, 365b8e80941Smrg 366b8e80941Smrg /** 367b8e80941Smrg * Combines multiple sources of size 1 into a larger virtual GRF. 368b8e80941Smrg * For example, parameters for a send-from-GRF message. Or, updating 369b8e80941Smrg * channels of a size 4 VGRF used to store vec4s such as texturing results. 370b8e80941Smrg * 371b8e80941Smrg * This will be lowered into MOVs from each source to consecutive offsets 372b8e80941Smrg * of the destination VGRF. 373b8e80941Smrg * 374b8e80941Smrg * src[0] may be BAD_FILE. If so, the lowering pass skips emitting the MOV, 375b8e80941Smrg * but still reserves the first channel of the destination VGRF. This can be 376b8e80941Smrg * used to reserve space for, say, a message header set up by the generators. 377b8e80941Smrg */ 378b8e80941Smrg SHADER_OPCODE_LOAD_PAYLOAD, 379b8e80941Smrg 380b8e80941Smrg /** 381b8e80941Smrg * Packs a number of sources into a single value. Unlike LOAD_PAYLOAD, this 382b8e80941Smrg * acts intra-channel, obtaining the final value for each channel by 383b8e80941Smrg * combining the sources values for the same channel, the first source 384b8e80941Smrg * occupying the lowest bits and the last source occupying the highest 385b8e80941Smrg * bits. 386b8e80941Smrg */ 387b8e80941Smrg FS_OPCODE_PACK, 388b8e80941Smrg 389b8e80941Smrg SHADER_OPCODE_SHADER_TIME_ADD, 390b8e80941Smrg 391b8e80941Smrg /** 392b8e80941Smrg * Typed and untyped surface access opcodes. 393b8e80941Smrg * 394b8e80941Smrg * LOGICAL opcodes are eventually translated to the matching non-LOGICAL 395b8e80941Smrg * opcode but instead of taking a single payload blob they expect their 396b8e80941Smrg * arguments separately as individual sources: 397b8e80941Smrg * 398b8e80941Smrg * Source 0: [required] Surface coordinates. 399b8e80941Smrg * Source 1: [optional] Operation source. 400b8e80941Smrg * Source 2: [required] Surface index. 401b8e80941Smrg * Source 3: [required] Number of coordinate components (as UD immediate). 402b8e80941Smrg * Source 4: [required] Opcode-specific control immediate, same as source 2 403b8e80941Smrg * of the matching non-LOGICAL opcode. 404b8e80941Smrg */ 405b8e80941Smrg VEC4_OPCODE_UNTYPED_ATOMIC, 406b8e80941Smrg SHADER_OPCODE_UNTYPED_ATOMIC_LOGICAL, 407b8e80941Smrg SHADER_OPCODE_UNTYPED_ATOMIC_FLOAT_LOGICAL, 408b8e80941Smrg VEC4_OPCODE_UNTYPED_SURFACE_READ, 409b8e80941Smrg SHADER_OPCODE_UNTYPED_SURFACE_READ_LOGICAL, 410b8e80941Smrg VEC4_OPCODE_UNTYPED_SURFACE_WRITE, 411b8e80941Smrg SHADER_OPCODE_UNTYPED_SURFACE_WRITE_LOGICAL, 412b8e80941Smrg 413b8e80941Smrg /** 414b8e80941Smrg * Untyped A64 surface access opcodes. 415b8e80941Smrg * 416b8e80941Smrg * Source 0: 64-bit address 417b8e80941Smrg * Source 1: Operational source 418b8e80941Smrg * Source 2: [required] Opcode-specific control immediate, same as source 2 419b8e80941Smrg * of the matching non-LOGICAL opcode. 420b8e80941Smrg */ 421b8e80941Smrg SHADER_OPCODE_A64_UNTYPED_READ_LOGICAL, 422b8e80941Smrg SHADER_OPCODE_A64_UNTYPED_WRITE_LOGICAL, 423b8e80941Smrg SHADER_OPCODE_A64_BYTE_SCATTERED_READ_LOGICAL, 424b8e80941Smrg SHADER_OPCODE_A64_BYTE_SCATTERED_WRITE_LOGICAL, 425b8e80941Smrg SHADER_OPCODE_A64_UNTYPED_ATOMIC_LOGICAL, 426b8e80941Smrg SHADER_OPCODE_A64_UNTYPED_ATOMIC_INT64_LOGICAL, 427b8e80941Smrg SHADER_OPCODE_A64_UNTYPED_ATOMIC_FLOAT_LOGICAL, 428b8e80941Smrg 429b8e80941Smrg SHADER_OPCODE_TYPED_ATOMIC_LOGICAL, 430b8e80941Smrg SHADER_OPCODE_TYPED_SURFACE_READ_LOGICAL, 431b8e80941Smrg SHADER_OPCODE_TYPED_SURFACE_WRITE_LOGICAL, 432b8e80941Smrg 433b8e80941Smrg SHADER_OPCODE_RND_MODE, 434b8e80941Smrg 435b8e80941Smrg /** 436b8e80941Smrg * Byte scattered write/read opcodes. 437b8e80941Smrg * 438b8e80941Smrg * LOGICAL opcodes are eventually translated to the matching non-LOGICAL 439b8e80941Smrg * opcode, but instead of taking a single payload blog they expect their 440b8e80941Smrg * arguments separately as individual sources, like untyped write/read. 441b8e80941Smrg */ 442b8e80941Smrg SHADER_OPCODE_BYTE_SCATTERED_READ_LOGICAL, 443b8e80941Smrg SHADER_OPCODE_BYTE_SCATTERED_WRITE_LOGICAL, 444b8e80941Smrg 445b8e80941Smrg SHADER_OPCODE_MEMORY_FENCE, 446b8e80941Smrg 447b8e80941Smrg SHADER_OPCODE_GEN4_SCRATCH_READ, 448b8e80941Smrg SHADER_OPCODE_GEN4_SCRATCH_WRITE, 449b8e80941Smrg SHADER_OPCODE_GEN7_SCRATCH_READ, 450b8e80941Smrg 451b8e80941Smrg /** 452b8e80941Smrg * Gen8+ SIMD8 URB Read messages. 453b8e80941Smrg */ 454b8e80941Smrg SHADER_OPCODE_URB_READ_SIMD8, 455b8e80941Smrg SHADER_OPCODE_URB_READ_SIMD8_PER_SLOT, 456b8e80941Smrg 457b8e80941Smrg SHADER_OPCODE_URB_WRITE_SIMD8, 458b8e80941Smrg SHADER_OPCODE_URB_WRITE_SIMD8_PER_SLOT, 459b8e80941Smrg SHADER_OPCODE_URB_WRITE_SIMD8_MASKED, 460b8e80941Smrg SHADER_OPCODE_URB_WRITE_SIMD8_MASKED_PER_SLOT, 461b8e80941Smrg 462b8e80941Smrg /** 463b8e80941Smrg * Return the index of an arbitrary live channel (i.e. one of the channels 464b8e80941Smrg * enabled in the current execution mask) and assign it to the first 465b8e80941Smrg * component of the destination. Expected to be used as input for the 466b8e80941Smrg * BROADCAST pseudo-opcode. 467b8e80941Smrg */ 468b8e80941Smrg SHADER_OPCODE_FIND_LIVE_CHANNEL, 469b8e80941Smrg 470b8e80941Smrg /** 471b8e80941Smrg * Pick the channel from its first source register given by the index 472b8e80941Smrg * specified as second source. Useful for variable indexing of surfaces. 473b8e80941Smrg * 474b8e80941Smrg * Note that because the result of this instruction is by definition 475b8e80941Smrg * uniform and it can always be splatted to multiple channels using a 476b8e80941Smrg * scalar regioning mode, only the first channel of the destination region 477b8e80941Smrg * is guaranteed to be updated, which implies that BROADCAST instructions 478b8e80941Smrg * should usually be marked force_writemask_all. 479b8e80941Smrg */ 480b8e80941Smrg SHADER_OPCODE_BROADCAST, 481b8e80941Smrg 482b8e80941Smrg /* Pick the channel from its first source register given by the index 483b8e80941Smrg * specified as second source. 484b8e80941Smrg * 485b8e80941Smrg * This is similar to the BROADCAST instruction except that it takes a 486b8e80941Smrg * dynamic index and potentially puts a different value in each output 487b8e80941Smrg * channel. 488b8e80941Smrg */ 489b8e80941Smrg SHADER_OPCODE_SHUFFLE, 490b8e80941Smrg 491b8e80941Smrg /* Select between src0 and src1 based on channel enables. 492b8e80941Smrg * 493b8e80941Smrg * This instruction copies src0 into the enabled channels of the 494b8e80941Smrg * destination and copies src1 into the disabled channels. 495b8e80941Smrg */ 496b8e80941Smrg SHADER_OPCODE_SEL_EXEC, 497b8e80941Smrg 498b8e80941Smrg /* This turns into an align16 mov from src0 to dst with a swizzle 499b8e80941Smrg * provided as an immediate in src1. 500b8e80941Smrg */ 501b8e80941Smrg SHADER_OPCODE_QUAD_SWIZZLE, 502b8e80941Smrg 503b8e80941Smrg /* Take every Nth element in src0 and broadcast it to the group of N 504b8e80941Smrg * channels in which it lives in the destination. The offset within the 505b8e80941Smrg * cluster is given by src1 and the cluster size is given by src2. 506b8e80941Smrg */ 507b8e80941Smrg SHADER_OPCODE_CLUSTER_BROADCAST, 508b8e80941Smrg 509b8e80941Smrg SHADER_OPCODE_GET_BUFFER_SIZE, 510b8e80941Smrg 511b8e80941Smrg SHADER_OPCODE_INTERLOCK, 512b8e80941Smrg 513b8e80941Smrg VEC4_OPCODE_MOV_BYTES, 514b8e80941Smrg VEC4_OPCODE_PACK_BYTES, 515b8e80941Smrg VEC4_OPCODE_UNPACK_UNIFORM, 516b8e80941Smrg VEC4_OPCODE_DOUBLE_TO_F32, 517b8e80941Smrg VEC4_OPCODE_DOUBLE_TO_D32, 518b8e80941Smrg VEC4_OPCODE_DOUBLE_TO_U32, 519b8e80941Smrg VEC4_OPCODE_TO_DOUBLE, 520b8e80941Smrg VEC4_OPCODE_PICK_LOW_32BIT, 521b8e80941Smrg VEC4_OPCODE_PICK_HIGH_32BIT, 522b8e80941Smrg VEC4_OPCODE_SET_LOW_32BIT, 523b8e80941Smrg VEC4_OPCODE_SET_HIGH_32BIT, 524b8e80941Smrg 525b8e80941Smrg FS_OPCODE_DDX_COARSE, 526b8e80941Smrg FS_OPCODE_DDX_FINE, 527b8e80941Smrg /** 528b8e80941Smrg * Compute dFdy(), dFdyCoarse(), or dFdyFine(). 529b8e80941Smrg */ 530b8e80941Smrg FS_OPCODE_DDY_COARSE, 531b8e80941Smrg FS_OPCODE_DDY_FINE, 532b8e80941Smrg FS_OPCODE_LINTERP, 533b8e80941Smrg FS_OPCODE_PIXEL_X, 534b8e80941Smrg FS_OPCODE_PIXEL_Y, 535b8e80941Smrg FS_OPCODE_UNIFORM_PULL_CONSTANT_LOAD, 536b8e80941Smrg FS_OPCODE_UNIFORM_PULL_CONSTANT_LOAD_GEN7, 537b8e80941Smrg FS_OPCODE_VARYING_PULL_CONSTANT_LOAD_GEN4, 538b8e80941Smrg FS_OPCODE_VARYING_PULL_CONSTANT_LOAD_LOGICAL, 539b8e80941Smrg FS_OPCODE_DISCARD_JUMP, 540b8e80941Smrg FS_OPCODE_SET_SAMPLE_ID, 541b8e80941Smrg FS_OPCODE_PACK_HALF_2x16_SPLIT, 542b8e80941Smrg FS_OPCODE_PLACEHOLDER_HALT, 543b8e80941Smrg FS_OPCODE_INTERPOLATE_AT_SAMPLE, 544b8e80941Smrg FS_OPCODE_INTERPOLATE_AT_SHARED_OFFSET, 545b8e80941Smrg FS_OPCODE_INTERPOLATE_AT_PER_SLOT_OFFSET, 546b8e80941Smrg 547b8e80941Smrg VS_OPCODE_URB_WRITE, 548b8e80941Smrg VS_OPCODE_PULL_CONSTANT_LOAD, 549b8e80941Smrg VS_OPCODE_PULL_CONSTANT_LOAD_GEN7, 550b8e80941Smrg VS_OPCODE_SET_SIMD4X2_HEADER_GEN9, 551b8e80941Smrg 552b8e80941Smrg VS_OPCODE_UNPACK_FLAGS_SIMD4X2, 553b8e80941Smrg 554b8e80941Smrg /** 555b8e80941Smrg * Write geometry shader output data to the URB. 556b8e80941Smrg * 557b8e80941Smrg * Unlike VS_OPCODE_URB_WRITE, this opcode doesn't do an implied move from 558b8e80941Smrg * R0 to the first MRF. This allows the geometry shader to override the 559b8e80941Smrg * "Slot {0,1} Offset" fields in the message header. 560b8e80941Smrg */ 561b8e80941Smrg GS_OPCODE_URB_WRITE, 562b8e80941Smrg 563b8e80941Smrg /** 564b8e80941Smrg * Write geometry shader output data to the URB and request a new URB 565b8e80941Smrg * handle (gen6). 566b8e80941Smrg * 567b8e80941Smrg * This opcode doesn't do an implied move from R0 to the first MRF. 568b8e80941Smrg */ 569b8e80941Smrg GS_OPCODE_URB_WRITE_ALLOCATE, 570b8e80941Smrg 571b8e80941Smrg /** 572b8e80941Smrg * Terminate the geometry shader thread by doing an empty URB write. 573b8e80941Smrg * 574b8e80941Smrg * This opcode doesn't do an implied move from R0 to the first MRF. This 575b8e80941Smrg * allows the geometry shader to override the "GS Number of Output Vertices 576b8e80941Smrg * for Slot {0,1}" fields in the message header. 577b8e80941Smrg */ 578b8e80941Smrg GS_OPCODE_THREAD_END, 579b8e80941Smrg 580b8e80941Smrg /** 581b8e80941Smrg * Set the "Slot {0,1} Offset" fields of a URB_WRITE message header. 582b8e80941Smrg * 583b8e80941Smrg * - dst is the MRF containing the message header. 584b8e80941Smrg * 585b8e80941Smrg * - src0.x indicates which portion of the URB should be written to (e.g. a 586b8e80941Smrg * vertex number) 587b8e80941Smrg * 588b8e80941Smrg * - src1 is an immediate multiplier which will be applied to src0 589b8e80941Smrg * (e.g. the size of a single vertex in the URB). 590b8e80941Smrg * 591b8e80941Smrg * Note: the hardware will apply this offset *in addition to* the offset in 592b8e80941Smrg * vec4_instruction::offset. 593b8e80941Smrg */ 594b8e80941Smrg GS_OPCODE_SET_WRITE_OFFSET, 595b8e80941Smrg 596b8e80941Smrg /** 597b8e80941Smrg * Set the "GS Number of Output Vertices for Slot {0,1}" fields of a 598b8e80941Smrg * URB_WRITE message header. 599b8e80941Smrg * 600b8e80941Smrg * - dst is the MRF containing the message header. 601b8e80941Smrg * 602b8e80941Smrg * - src0.x is the vertex count. The upper 16 bits will be ignored. 603b8e80941Smrg */ 604b8e80941Smrg GS_OPCODE_SET_VERTEX_COUNT, 605b8e80941Smrg 606b8e80941Smrg /** 607b8e80941Smrg * Set DWORD 2 of dst to the value in src. 608b8e80941Smrg */ 609b8e80941Smrg GS_OPCODE_SET_DWORD_2, 610b8e80941Smrg 611b8e80941Smrg /** 612b8e80941Smrg * Prepare the dst register for storage in the "Channel Mask" fields of a 613b8e80941Smrg * URB_WRITE message header. 614b8e80941Smrg * 615b8e80941Smrg * DWORD 4 of dst is shifted left by 4 bits, so that later, 616b8e80941Smrg * GS_OPCODE_SET_CHANNEL_MASKS can OR DWORDs 0 and 4 together to form the 617b8e80941Smrg * final channel mask. 618b8e80941Smrg * 619b8e80941Smrg * Note: since GS_OPCODE_SET_CHANNEL_MASKS ORs DWORDs 0 and 4 together to 620b8e80941Smrg * form the final channel mask, DWORDs 0 and 4 of the dst register must not 621b8e80941Smrg * have any extraneous bits set prior to execution of this opcode (that is, 622b8e80941Smrg * they should be in the range 0x0 to 0xf). 623b8e80941Smrg */ 624b8e80941Smrg GS_OPCODE_PREPARE_CHANNEL_MASKS, 625b8e80941Smrg 626b8e80941Smrg /** 627b8e80941Smrg * Set the "Channel Mask" fields of a URB_WRITE message header. 628b8e80941Smrg * 629b8e80941Smrg * - dst is the MRF containing the message header. 630b8e80941Smrg * 631b8e80941Smrg * - src.x is the channel mask, as prepared by 632b8e80941Smrg * GS_OPCODE_PREPARE_CHANNEL_MASKS. DWORDs 0 and 4 are OR'ed together to 633b8e80941Smrg * form the final channel mask. 634b8e80941Smrg */ 635b8e80941Smrg GS_OPCODE_SET_CHANNEL_MASKS, 636b8e80941Smrg 637b8e80941Smrg /** 638b8e80941Smrg * Get the "Instance ID" fields from the payload. 639b8e80941Smrg * 640b8e80941Smrg * - dst is the GRF for gl_InvocationID. 641b8e80941Smrg */ 642b8e80941Smrg GS_OPCODE_GET_INSTANCE_ID, 643b8e80941Smrg 644b8e80941Smrg /** 645b8e80941Smrg * Send a FF_SYNC message to allocate initial URB handles (gen6). 646b8e80941Smrg * 647b8e80941Smrg * - dst will be used as the writeback register for the FF_SYNC operation. 648b8e80941Smrg * 649b8e80941Smrg * - src0 is the number of primitives written. 650b8e80941Smrg * 651b8e80941Smrg * - src1 is the value to hold in M0.0: number of SO vertices to write 652b8e80941Smrg * and number of SO primitives needed. Its value will be overwritten 653b8e80941Smrg * with the SVBI values if transform feedback is enabled. 654b8e80941Smrg * 655b8e80941Smrg * Note: This opcode uses an implicit MRF register for the ff_sync message 656b8e80941Smrg * header, so the caller is expected to set inst->base_mrf and initialize 657b8e80941Smrg * that MRF register to r0. This opcode will also write to this MRF register 658b8e80941Smrg * to include the allocated URB handle so it can then be reused directly as 659b8e80941Smrg * the header in the URB write operation we are allocating the handle for. 660b8e80941Smrg */ 661b8e80941Smrg GS_OPCODE_FF_SYNC, 662b8e80941Smrg 663b8e80941Smrg /** 664b8e80941Smrg * Move r0.1 (which holds PrimitiveID information in gen6) to a separate 665b8e80941Smrg * register. 666b8e80941Smrg * 667b8e80941Smrg * - dst is the GRF where PrimitiveID information will be moved. 668b8e80941Smrg */ 669b8e80941Smrg GS_OPCODE_SET_PRIMITIVE_ID, 670b8e80941Smrg 671b8e80941Smrg /** 672b8e80941Smrg * Write transform feedback data to the SVB by sending a SVB WRITE message. 673b8e80941Smrg * Used in gen6. 674b8e80941Smrg * 675b8e80941Smrg * - dst is the MRF register containing the message header. 676b8e80941Smrg * 677b8e80941Smrg * - src0 is the register where the vertex data is going to be copied from. 678b8e80941Smrg * 679b8e80941Smrg * - src1 is the destination register when write commit occurs. 680b8e80941Smrg */ 681b8e80941Smrg GS_OPCODE_SVB_WRITE, 682b8e80941Smrg 683b8e80941Smrg /** 684b8e80941Smrg * Set destination index in the SVB write message payload (M0.5). Used 685b8e80941Smrg * in gen6 for transform feedback. 686b8e80941Smrg * 687b8e80941Smrg * - dst is the header to save the destination indices for SVB WRITE. 688b8e80941Smrg * - src is the register that holds the destination indices value. 689b8e80941Smrg */ 690b8e80941Smrg GS_OPCODE_SVB_SET_DST_INDEX, 691b8e80941Smrg 692b8e80941Smrg /** 693b8e80941Smrg * Prepare Mx.0 subregister for being used in the FF_SYNC message header. 694b8e80941Smrg * Used in gen6 for transform feedback. 695b8e80941Smrg * 696b8e80941Smrg * - dst will hold the register with the final Mx.0 value. 697b8e80941Smrg * 698b8e80941Smrg * - src0 has the number of vertices emitted in SO (NumSOVertsToWrite) 699b8e80941Smrg * 700b8e80941Smrg * - src1 has the number of needed primitives for SO (NumSOPrimsNeeded) 701b8e80941Smrg * 702b8e80941Smrg * - src2 is the value to hold in M0: number of SO vertices to write 703b8e80941Smrg * and number of SO primitives needed. 704b8e80941Smrg */ 705b8e80941Smrg GS_OPCODE_FF_SYNC_SET_PRIMITIVES, 706b8e80941Smrg 707b8e80941Smrg /** 708b8e80941Smrg * Terminate the compute shader. 709b8e80941Smrg */ 710b8e80941Smrg CS_OPCODE_CS_TERMINATE, 711b8e80941Smrg 712b8e80941Smrg /** 713b8e80941Smrg * GLSL barrier() 714b8e80941Smrg */ 715b8e80941Smrg SHADER_OPCODE_BARRIER, 716b8e80941Smrg 717b8e80941Smrg /** 718b8e80941Smrg * Calculate the high 32-bits of a 32x32 multiply. 719b8e80941Smrg */ 720b8e80941Smrg SHADER_OPCODE_MULH, 721b8e80941Smrg 722b8e80941Smrg /** 723b8e80941Smrg * A MOV that uses VxH indirect addressing. 724b8e80941Smrg * 725b8e80941Smrg * Source 0: A register to start from (HW_REG). 726b8e80941Smrg * Source 1: An indirect offset (in bytes, UD GRF). 727b8e80941Smrg * Source 2: The length of the region that could be accessed (in bytes, 728b8e80941Smrg * UD immediate). 729b8e80941Smrg */ 730b8e80941Smrg SHADER_OPCODE_MOV_INDIRECT, 731b8e80941Smrg 732b8e80941Smrg VEC4_OPCODE_URB_READ, 733b8e80941Smrg TCS_OPCODE_GET_INSTANCE_ID, 734b8e80941Smrg TCS_OPCODE_URB_WRITE, 735b8e80941Smrg TCS_OPCODE_SET_INPUT_URB_OFFSETS, 736b8e80941Smrg TCS_OPCODE_SET_OUTPUT_URB_OFFSETS, 737b8e80941Smrg TCS_OPCODE_GET_PRIMITIVE_ID, 738b8e80941Smrg TCS_OPCODE_CREATE_BARRIER_HEADER, 739b8e80941Smrg TCS_OPCODE_SRC0_010_IS_ZERO, 740b8e80941Smrg TCS_OPCODE_RELEASE_INPUT, 741b8e80941Smrg TCS_OPCODE_THREAD_END, 742b8e80941Smrg 743b8e80941Smrg TES_OPCODE_GET_PRIMITIVE_ID, 744b8e80941Smrg TES_OPCODE_CREATE_INPUT_READ_HEADER, 745b8e80941Smrg TES_OPCODE_ADD_INDIRECT_URB_OFFSET, 746b8e80941Smrg}; 747b8e80941Smrg 748b8e80941Smrgenum brw_urb_write_flags { 749b8e80941Smrg BRW_URB_WRITE_NO_FLAGS = 0, 750b8e80941Smrg 751b8e80941Smrg /** 752b8e80941Smrg * Causes a new URB entry to be allocated, and its address stored in the 753b8e80941Smrg * destination register (gen < 7). 754b8e80941Smrg */ 755b8e80941Smrg BRW_URB_WRITE_ALLOCATE = 0x1, 756b8e80941Smrg 757b8e80941Smrg /** 758b8e80941Smrg * Causes the current URB entry to be deallocated (gen < 7). 759b8e80941Smrg */ 760b8e80941Smrg BRW_URB_WRITE_UNUSED = 0x2, 761b8e80941Smrg 762b8e80941Smrg /** 763b8e80941Smrg * Causes the thread to terminate. 764b8e80941Smrg */ 765b8e80941Smrg BRW_URB_WRITE_EOT = 0x4, 766b8e80941Smrg 767b8e80941Smrg /** 768b8e80941Smrg * Indicates that the given URB entry is complete, and may be sent further 769b8e80941Smrg * down the 3D pipeline (gen < 7). 770b8e80941Smrg */ 771b8e80941Smrg BRW_URB_WRITE_COMPLETE = 0x8, 772b8e80941Smrg 773b8e80941Smrg /** 774b8e80941Smrg * Indicates that an additional offset (which may be different for the two 775b8e80941Smrg * vec4 slots) is stored in the message header (gen == 7). 776b8e80941Smrg */ 777b8e80941Smrg BRW_URB_WRITE_PER_SLOT_OFFSET = 0x10, 778b8e80941Smrg 779b8e80941Smrg /** 780b8e80941Smrg * Indicates that the channel masks in the URB_WRITE message header should 781b8e80941Smrg * not be overridden to 0xff (gen == 7). 782b8e80941Smrg */ 783b8e80941Smrg BRW_URB_WRITE_USE_CHANNEL_MASKS = 0x20, 784b8e80941Smrg 785b8e80941Smrg /** 786b8e80941Smrg * Indicates that the data should be sent to the URB using the 787b8e80941Smrg * URB_WRITE_OWORD message rather than URB_WRITE_HWORD (gen == 7). This 788b8e80941Smrg * causes offsets to be interpreted as multiples of an OWORD instead of an 789b8e80941Smrg * HWORD, and only allows one OWORD to be written. 790b8e80941Smrg */ 791b8e80941Smrg BRW_URB_WRITE_OWORD = 0x40, 792b8e80941Smrg 793b8e80941Smrg /** 794b8e80941Smrg * Convenient combination of flags: end the thread while simultaneously 795b8e80941Smrg * marking the given URB entry as complete. 796b8e80941Smrg */ 797b8e80941Smrg BRW_URB_WRITE_EOT_COMPLETE = BRW_URB_WRITE_EOT | BRW_URB_WRITE_COMPLETE, 798b8e80941Smrg 799b8e80941Smrg /** 800b8e80941Smrg * Convenient combination of flags: mark the given URB entry as complete 801b8e80941Smrg * and simultaneously allocate a new one. 802b8e80941Smrg */ 803b8e80941Smrg BRW_URB_WRITE_ALLOCATE_COMPLETE = 804b8e80941Smrg BRW_URB_WRITE_ALLOCATE | BRW_URB_WRITE_COMPLETE, 805b8e80941Smrg}; 806b8e80941Smrg 807b8e80941Smrgenum fb_write_logical_srcs { 808b8e80941Smrg FB_WRITE_LOGICAL_SRC_COLOR0, /* REQUIRED */ 809b8e80941Smrg FB_WRITE_LOGICAL_SRC_COLOR1, /* for dual source blend messages */ 810b8e80941Smrg FB_WRITE_LOGICAL_SRC_SRC0_ALPHA, 811b8e80941Smrg FB_WRITE_LOGICAL_SRC_SRC_DEPTH, /* gl_FragDepth */ 812b8e80941Smrg FB_WRITE_LOGICAL_SRC_DST_DEPTH, /* GEN4-5: passthrough from thread */ 813b8e80941Smrg FB_WRITE_LOGICAL_SRC_SRC_STENCIL, /* gl_FragStencilRefARB */ 814b8e80941Smrg FB_WRITE_LOGICAL_SRC_OMASK, /* Sample Mask (gl_SampleMask) */ 815b8e80941Smrg FB_WRITE_LOGICAL_SRC_COMPONENTS, /* REQUIRED */ 816b8e80941Smrg FB_WRITE_LOGICAL_NUM_SRCS 817b8e80941Smrg}; 818b8e80941Smrg 819b8e80941Smrgenum tex_logical_srcs { 820b8e80941Smrg /** Texture coordinates */ 821b8e80941Smrg TEX_LOGICAL_SRC_COORDINATE, 822b8e80941Smrg /** Shadow comparator */ 823b8e80941Smrg TEX_LOGICAL_SRC_SHADOW_C, 824b8e80941Smrg /** dPdx if the operation takes explicit derivatives, otherwise LOD value */ 825b8e80941Smrg TEX_LOGICAL_SRC_LOD, 826b8e80941Smrg /** dPdy if the operation takes explicit derivatives */ 827b8e80941Smrg TEX_LOGICAL_SRC_LOD2, 828b8e80941Smrg /** Min LOD */ 829b8e80941Smrg TEX_LOGICAL_SRC_MIN_LOD, 830b8e80941Smrg /** Sample index */ 831b8e80941Smrg TEX_LOGICAL_SRC_SAMPLE_INDEX, 832b8e80941Smrg /** MCS data */ 833b8e80941Smrg TEX_LOGICAL_SRC_MCS, 834b8e80941Smrg /** REQUIRED: Texture surface index */ 835b8e80941Smrg TEX_LOGICAL_SRC_SURFACE, 836b8e80941Smrg /** Texture sampler index */ 837b8e80941Smrg TEX_LOGICAL_SRC_SAMPLER, 838b8e80941Smrg /** Texture surface bindless handle */ 839b8e80941Smrg TEX_LOGICAL_SRC_SURFACE_HANDLE, 840b8e80941Smrg /** Texture sampler bindless handle */ 841b8e80941Smrg TEX_LOGICAL_SRC_SAMPLER_HANDLE, 842b8e80941Smrg /** Texel offset for gathers */ 843b8e80941Smrg TEX_LOGICAL_SRC_TG4_OFFSET, 844b8e80941Smrg /** REQUIRED: Number of coordinate components (as UD immediate) */ 845b8e80941Smrg TEX_LOGICAL_SRC_COORD_COMPONENTS, 846b8e80941Smrg /** REQUIRED: Number of derivative components (as UD immediate) */ 847b8e80941Smrg TEX_LOGICAL_SRC_GRAD_COMPONENTS, 848b8e80941Smrg 849b8e80941Smrg TEX_LOGICAL_NUM_SRCS, 850b8e80941Smrg}; 851b8e80941Smrg 852b8e80941Smrgenum surface_logical_srcs { 853b8e80941Smrg /** Surface binding table index */ 854b8e80941Smrg SURFACE_LOGICAL_SRC_SURFACE, 855b8e80941Smrg /** Surface bindless handle */ 856b8e80941Smrg SURFACE_LOGICAL_SRC_SURFACE_HANDLE, 857b8e80941Smrg /** Surface address; could be multi-dimensional for typed opcodes */ 858b8e80941Smrg SURFACE_LOGICAL_SRC_ADDRESS, 859b8e80941Smrg /** Data to be written or used in an atomic op */ 860b8e80941Smrg SURFACE_LOGICAL_SRC_DATA, 861b8e80941Smrg /** Surface number of dimensions. Affects the size of ADDRESS */ 862b8e80941Smrg SURFACE_LOGICAL_SRC_IMM_DIMS, 863b8e80941Smrg /** Per-opcode immediate argument. For atomics, this is the atomic opcode */ 864b8e80941Smrg SURFACE_LOGICAL_SRC_IMM_ARG, 865b8e80941Smrg 866b8e80941Smrg SURFACE_LOGICAL_NUM_SRCS 867b8e80941Smrg}; 868b8e80941Smrg 869b8e80941Smrg#ifdef __cplusplus 870b8e80941Smrg/** 871b8e80941Smrg * Allow brw_urb_write_flags enums to be ORed together. 872b8e80941Smrg */ 873b8e80941Smrginline brw_urb_write_flags 874b8e80941Smrgoperator|(brw_urb_write_flags x, brw_urb_write_flags y) 875b8e80941Smrg{ 876b8e80941Smrg return static_cast<brw_urb_write_flags>(static_cast<int>(x) | 877b8e80941Smrg static_cast<int>(y)); 878b8e80941Smrg} 879b8e80941Smrg#endif 880b8e80941Smrg 881b8e80941Smrgenum PACKED brw_predicate { 882b8e80941Smrg BRW_PREDICATE_NONE = 0, 883b8e80941Smrg BRW_PREDICATE_NORMAL = 1, 884b8e80941Smrg BRW_PREDICATE_ALIGN1_ANYV = 2, 885b8e80941Smrg BRW_PREDICATE_ALIGN1_ALLV = 3, 886b8e80941Smrg BRW_PREDICATE_ALIGN1_ANY2H = 4, 887b8e80941Smrg BRW_PREDICATE_ALIGN1_ALL2H = 5, 888b8e80941Smrg BRW_PREDICATE_ALIGN1_ANY4H = 6, 889b8e80941Smrg BRW_PREDICATE_ALIGN1_ALL4H = 7, 890b8e80941Smrg BRW_PREDICATE_ALIGN1_ANY8H = 8, 891b8e80941Smrg BRW_PREDICATE_ALIGN1_ALL8H = 9, 892b8e80941Smrg BRW_PREDICATE_ALIGN1_ANY16H = 10, 893b8e80941Smrg BRW_PREDICATE_ALIGN1_ALL16H = 11, 894b8e80941Smrg BRW_PREDICATE_ALIGN1_ANY32H = 12, 895b8e80941Smrg BRW_PREDICATE_ALIGN1_ALL32H = 13, 896b8e80941Smrg BRW_PREDICATE_ALIGN16_REPLICATE_X = 2, 897b8e80941Smrg BRW_PREDICATE_ALIGN16_REPLICATE_Y = 3, 898b8e80941Smrg BRW_PREDICATE_ALIGN16_REPLICATE_Z = 4, 899b8e80941Smrg BRW_PREDICATE_ALIGN16_REPLICATE_W = 5, 900b8e80941Smrg BRW_PREDICATE_ALIGN16_ANY4H = 6, 901b8e80941Smrg BRW_PREDICATE_ALIGN16_ALL4H = 7, 902b8e80941Smrg}; 903b8e80941Smrg 904b8e80941Smrgenum PACKED brw_reg_file { 905b8e80941Smrg BRW_ARCHITECTURE_REGISTER_FILE = 0, 906b8e80941Smrg BRW_GENERAL_REGISTER_FILE = 1, 907b8e80941Smrg BRW_MESSAGE_REGISTER_FILE = 2, 908b8e80941Smrg BRW_IMMEDIATE_VALUE = 3, 909b8e80941Smrg 910b8e80941Smrg ARF = BRW_ARCHITECTURE_REGISTER_FILE, 911b8e80941Smrg FIXED_GRF = BRW_GENERAL_REGISTER_FILE, 912b8e80941Smrg MRF = BRW_MESSAGE_REGISTER_FILE, 913b8e80941Smrg IMM = BRW_IMMEDIATE_VALUE, 914b8e80941Smrg 915b8e80941Smrg /* These are not hardware values */ 916b8e80941Smrg VGRF, 917b8e80941Smrg ATTR, 918b8e80941Smrg UNIFORM, /* prog_data->params[reg] */ 919b8e80941Smrg BAD_FILE, 920b8e80941Smrg}; 921b8e80941Smrg 922b8e80941Smrgenum PACKED gen10_align1_3src_reg_file { 923b8e80941Smrg BRW_ALIGN1_3SRC_GENERAL_REGISTER_FILE = 0, 924b8e80941Smrg BRW_ALIGN1_3SRC_IMMEDIATE_VALUE = 1, /* src0, src2 */ 925b8e80941Smrg BRW_ALIGN1_3SRC_ACCUMULATOR = 1, /* dest, src1 */ 926b8e80941Smrg}; 927b8e80941Smrg 928b8e80941Smrg/* CNL adds Align1 support for 3-src instructions. Bit 35 of the instruction 929b8e80941Smrg * word is "Execution Datatype" which controls whether the instruction operates 930b8e80941Smrg * on float or integer types. The register arguments have fields that offer 931b8e80941Smrg * more fine control their respective types. 932b8e80941Smrg */ 933b8e80941Smrgenum PACKED gen10_align1_3src_exec_type { 934b8e80941Smrg BRW_ALIGN1_3SRC_EXEC_TYPE_INT = 0, 935b8e80941Smrg BRW_ALIGN1_3SRC_EXEC_TYPE_FLOAT = 1, 936b8e80941Smrg}; 937b8e80941Smrg 938b8e80941Smrg#define BRW_ARF_NULL 0x00 939b8e80941Smrg#define BRW_ARF_ADDRESS 0x10 940b8e80941Smrg#define BRW_ARF_ACCUMULATOR 0x20 941b8e80941Smrg#define BRW_ARF_FLAG 0x30 942b8e80941Smrg#define BRW_ARF_MASK 0x40 943b8e80941Smrg#define BRW_ARF_MASK_STACK 0x50 944b8e80941Smrg#define BRW_ARF_MASK_STACK_DEPTH 0x60 945b8e80941Smrg#define BRW_ARF_STATE 0x70 946b8e80941Smrg#define BRW_ARF_CONTROL 0x80 947b8e80941Smrg#define BRW_ARF_NOTIFICATION_COUNT 0x90 948b8e80941Smrg#define BRW_ARF_IP 0xA0 949b8e80941Smrg#define BRW_ARF_TDR 0xB0 950b8e80941Smrg#define BRW_ARF_TIMESTAMP 0xC0 951b8e80941Smrg 952b8e80941Smrg#define BRW_MRF_COMPR4 (1 << 7) 953b8e80941Smrg 954b8e80941Smrg#define BRW_AMASK 0 955b8e80941Smrg#define BRW_IMASK 1 956b8e80941Smrg#define BRW_LMASK 2 957b8e80941Smrg#define BRW_CMASK 3 958b8e80941Smrg 959b8e80941Smrg 960b8e80941Smrg 961b8e80941Smrg#define BRW_THREAD_NORMAL 0 962b8e80941Smrg#define BRW_THREAD_ATOMIC 1 963b8e80941Smrg#define BRW_THREAD_SWITCH 2 964b8e80941Smrg 965b8e80941Smrgenum PACKED brw_vertical_stride { 966b8e80941Smrg BRW_VERTICAL_STRIDE_0 = 0, 967b8e80941Smrg BRW_VERTICAL_STRIDE_1 = 1, 968b8e80941Smrg BRW_VERTICAL_STRIDE_2 = 2, 969b8e80941Smrg BRW_VERTICAL_STRIDE_4 = 3, 970b8e80941Smrg BRW_VERTICAL_STRIDE_8 = 4, 971b8e80941Smrg BRW_VERTICAL_STRIDE_16 = 5, 972b8e80941Smrg BRW_VERTICAL_STRIDE_32 = 6, 973b8e80941Smrg BRW_VERTICAL_STRIDE_ONE_DIMENSIONAL = 0xF, 974b8e80941Smrg}; 975b8e80941Smrg 976b8e80941Smrgenum PACKED gen10_align1_3src_vertical_stride { 977b8e80941Smrg BRW_ALIGN1_3SRC_VERTICAL_STRIDE_0 = 0, 978b8e80941Smrg BRW_ALIGN1_3SRC_VERTICAL_STRIDE_2 = 1, 979b8e80941Smrg BRW_ALIGN1_3SRC_VERTICAL_STRIDE_4 = 2, 980b8e80941Smrg BRW_ALIGN1_3SRC_VERTICAL_STRIDE_8 = 3, 981b8e80941Smrg}; 982b8e80941Smrg 983b8e80941Smrgenum PACKED brw_width { 984b8e80941Smrg BRW_WIDTH_1 = 0, 985b8e80941Smrg BRW_WIDTH_2 = 1, 986b8e80941Smrg BRW_WIDTH_4 = 2, 987b8e80941Smrg BRW_WIDTH_8 = 3, 988b8e80941Smrg BRW_WIDTH_16 = 4, 989b8e80941Smrg}; 990b8e80941Smrg 991b8e80941Smrg/** 992b8e80941Smrg * Message target: Shared Function ID for where to SEND a message. 993b8e80941Smrg * 994b8e80941Smrg * These are enumerated in the ISA reference under "send - Send Message". 995b8e80941Smrg * In particular, see the following tables: 996b8e80941Smrg * - G45 PRM, Volume 4, Table 14-15 "Message Descriptor Definition" 997b8e80941Smrg * - Sandybridge PRM, Volume 4 Part 2, Table 8-16 "Extended Message Descriptor" 998b8e80941Smrg * - Ivybridge PRM, Volume 1 Part 1, section 3.2.7 "GPE Function IDs" 999b8e80941Smrg */ 1000b8e80941Smrgenum brw_message_target { 1001b8e80941Smrg BRW_SFID_NULL = 0, 1002b8e80941Smrg BRW_SFID_MATH = 1, /* Only valid on Gen4-5 */ 1003b8e80941Smrg BRW_SFID_SAMPLER = 2, 1004b8e80941Smrg BRW_SFID_MESSAGE_GATEWAY = 3, 1005b8e80941Smrg BRW_SFID_DATAPORT_READ = 4, 1006b8e80941Smrg BRW_SFID_DATAPORT_WRITE = 5, 1007b8e80941Smrg BRW_SFID_URB = 6, 1008b8e80941Smrg BRW_SFID_THREAD_SPAWNER = 7, 1009b8e80941Smrg BRW_SFID_VME = 8, 1010b8e80941Smrg 1011b8e80941Smrg GEN6_SFID_DATAPORT_SAMPLER_CACHE = 4, 1012b8e80941Smrg GEN6_SFID_DATAPORT_RENDER_CACHE = 5, 1013b8e80941Smrg GEN6_SFID_DATAPORT_CONSTANT_CACHE = 9, 1014b8e80941Smrg 1015b8e80941Smrg GEN7_SFID_DATAPORT_DATA_CACHE = 10, 1016b8e80941Smrg GEN7_SFID_PIXEL_INTERPOLATOR = 11, 1017b8e80941Smrg HSW_SFID_DATAPORT_DATA_CACHE_1 = 12, 1018b8e80941Smrg HSW_SFID_CRE = 13, 1019b8e80941Smrg}; 1020b8e80941Smrg 1021b8e80941Smrg#define GEN7_MESSAGE_TARGET_DP_DATA_CACHE 10 1022b8e80941Smrg 1023b8e80941Smrg#define BRW_SAMPLER_RETURN_FORMAT_FLOAT32 0 1024b8e80941Smrg#define BRW_SAMPLER_RETURN_FORMAT_UINT32 2 1025b8e80941Smrg#define BRW_SAMPLER_RETURN_FORMAT_SINT32 3 1026b8e80941Smrg 1027b8e80941Smrg#define BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE 0 1028b8e80941Smrg#define BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE 0 1029b8e80941Smrg#define BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE_BIAS 0 1030b8e80941Smrg#define BRW_SAMPLER_MESSAGE_SIMD8_KILLPIX 1 1031b8e80941Smrg#define BRW_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_LOD 1 1032b8e80941Smrg#define BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE_LOD 1 1033b8e80941Smrg#define BRW_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_GRADIENTS 2 1034b8e80941Smrg#define BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE_GRADIENTS 2 1035b8e80941Smrg#define BRW_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_COMPARE 0 1036b8e80941Smrg#define BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE_COMPARE 2 1037b8e80941Smrg#define BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE_BIAS_COMPARE 0 1038b8e80941Smrg#define BRW_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_LOD_COMPARE 1 1039b8e80941Smrg#define BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE_LOD_COMPARE 1 1040b8e80941Smrg#define BRW_SAMPLER_MESSAGE_SIMD4X2_RESINFO 2 1041b8e80941Smrg#define BRW_SAMPLER_MESSAGE_SIMD16_RESINFO 2 1042b8e80941Smrg#define BRW_SAMPLER_MESSAGE_SIMD4X2_LD 3 1043b8e80941Smrg#define BRW_SAMPLER_MESSAGE_SIMD8_LD 3 1044b8e80941Smrg#define BRW_SAMPLER_MESSAGE_SIMD16_LD 3 1045b8e80941Smrg 1046b8e80941Smrg#define GEN5_SAMPLER_MESSAGE_SAMPLE 0 1047b8e80941Smrg#define GEN5_SAMPLER_MESSAGE_SAMPLE_BIAS 1 1048b8e80941Smrg#define GEN5_SAMPLER_MESSAGE_SAMPLE_LOD 2 1049b8e80941Smrg#define GEN5_SAMPLER_MESSAGE_SAMPLE_COMPARE 3 1050b8e80941Smrg#define GEN5_SAMPLER_MESSAGE_SAMPLE_DERIVS 4 1051b8e80941Smrg#define GEN5_SAMPLER_MESSAGE_SAMPLE_BIAS_COMPARE 5 1052b8e80941Smrg#define GEN5_SAMPLER_MESSAGE_SAMPLE_LOD_COMPARE 6 1053b8e80941Smrg#define GEN5_SAMPLER_MESSAGE_SAMPLE_LD 7 1054b8e80941Smrg#define GEN7_SAMPLER_MESSAGE_SAMPLE_GATHER4 8 1055b8e80941Smrg#define GEN5_SAMPLER_MESSAGE_LOD 9 1056b8e80941Smrg#define GEN5_SAMPLER_MESSAGE_SAMPLE_RESINFO 10 1057b8e80941Smrg#define GEN6_SAMPLER_MESSAGE_SAMPLE_SAMPLEINFO 11 1058b8e80941Smrg#define GEN7_SAMPLER_MESSAGE_SAMPLE_GATHER4_C 16 1059b8e80941Smrg#define GEN7_SAMPLER_MESSAGE_SAMPLE_GATHER4_PO 17 1060b8e80941Smrg#define GEN7_SAMPLER_MESSAGE_SAMPLE_GATHER4_PO_C 18 1061b8e80941Smrg#define HSW_SAMPLER_MESSAGE_SAMPLE_DERIV_COMPARE 20 1062b8e80941Smrg#define GEN9_SAMPLER_MESSAGE_SAMPLE_LZ 24 1063b8e80941Smrg#define GEN9_SAMPLER_MESSAGE_SAMPLE_C_LZ 25 1064b8e80941Smrg#define GEN9_SAMPLER_MESSAGE_SAMPLE_LD_LZ 26 1065b8e80941Smrg#define GEN9_SAMPLER_MESSAGE_SAMPLE_LD2DMS_W 28 1066b8e80941Smrg#define GEN7_SAMPLER_MESSAGE_SAMPLE_LD_MCS 29 1067b8e80941Smrg#define GEN7_SAMPLER_MESSAGE_SAMPLE_LD2DMS 30 1068b8e80941Smrg#define GEN7_SAMPLER_MESSAGE_SAMPLE_LD2DSS 31 1069b8e80941Smrg 1070b8e80941Smrg/* for GEN5 only */ 1071b8e80941Smrg#define BRW_SAMPLER_SIMD_MODE_SIMD4X2 0 1072b8e80941Smrg#define BRW_SAMPLER_SIMD_MODE_SIMD8 1 1073b8e80941Smrg#define BRW_SAMPLER_SIMD_MODE_SIMD16 2 1074b8e80941Smrg#define BRW_SAMPLER_SIMD_MODE_SIMD32_64 3 1075b8e80941Smrg 1076b8e80941Smrg/* GEN9 changes SIMD mode 0 to mean SIMD8D, but lets us get the SIMD4x2 1077b8e80941Smrg * behavior by setting bit 22 of dword 2 in the message header. */ 1078b8e80941Smrg#define GEN9_SAMPLER_SIMD_MODE_SIMD8D 0 1079b8e80941Smrg#define GEN9_SAMPLER_SIMD_MODE_EXTENSION_SIMD4X2 (1 << 22) 1080b8e80941Smrg 1081b8e80941Smrg#define BRW_DATAPORT_OWORD_BLOCK_1_OWORDLOW 0 1082b8e80941Smrg#define BRW_DATAPORT_OWORD_BLOCK_1_OWORDHIGH 1 1083b8e80941Smrg#define BRW_DATAPORT_OWORD_BLOCK_2_OWORDS 2 1084b8e80941Smrg#define BRW_DATAPORT_OWORD_BLOCK_4_OWORDS 3 1085b8e80941Smrg#define BRW_DATAPORT_OWORD_BLOCK_8_OWORDS 4 1086b8e80941Smrg#define BRW_DATAPORT_OWORD_BLOCK_DWORDS(n) \ 1087b8e80941Smrg ((n) == 4 ? BRW_DATAPORT_OWORD_BLOCK_1_OWORDLOW : \ 1088b8e80941Smrg (n) == 8 ? BRW_DATAPORT_OWORD_BLOCK_2_OWORDS : \ 1089b8e80941Smrg (n) == 16 ? BRW_DATAPORT_OWORD_BLOCK_4_OWORDS : \ 1090b8e80941Smrg (n) == 32 ? BRW_DATAPORT_OWORD_BLOCK_8_OWORDS : \ 1091b8e80941Smrg (abort(), ~0)) 1092b8e80941Smrg 1093b8e80941Smrg#define BRW_DATAPORT_OWORD_DUAL_BLOCK_1OWORD 0 1094b8e80941Smrg#define BRW_DATAPORT_OWORD_DUAL_BLOCK_4OWORDS 2 1095b8e80941Smrg 1096b8e80941Smrg#define BRW_DATAPORT_DWORD_SCATTERED_BLOCK_8DWORDS 2 1097b8e80941Smrg#define BRW_DATAPORT_DWORD_SCATTERED_BLOCK_16DWORDS 3 1098b8e80941Smrg 1099b8e80941Smrg/* This one stays the same across generations. */ 1100b8e80941Smrg#define BRW_DATAPORT_READ_MESSAGE_OWORD_BLOCK_READ 0 1101b8e80941Smrg/* GEN4 */ 1102b8e80941Smrg#define BRW_DATAPORT_READ_MESSAGE_OWORD_DUAL_BLOCK_READ 1 1103b8e80941Smrg#define BRW_DATAPORT_READ_MESSAGE_MEDIA_BLOCK_READ 2 1104b8e80941Smrg#define BRW_DATAPORT_READ_MESSAGE_DWORD_SCATTERED_READ 3 1105b8e80941Smrg/* G45, GEN5 */ 1106b8e80941Smrg#define G45_DATAPORT_READ_MESSAGE_RENDER_UNORM_READ 1 1107b8e80941Smrg#define G45_DATAPORT_READ_MESSAGE_OWORD_DUAL_BLOCK_READ 2 1108b8e80941Smrg#define G45_DATAPORT_READ_MESSAGE_AVC_LOOP_FILTER_READ 3 1109b8e80941Smrg#define G45_DATAPORT_READ_MESSAGE_MEDIA_BLOCK_READ 4 1110b8e80941Smrg#define G45_DATAPORT_READ_MESSAGE_DWORD_SCATTERED_READ 6 1111b8e80941Smrg/* GEN6 */ 1112b8e80941Smrg#define GEN6_DATAPORT_READ_MESSAGE_RENDER_UNORM_READ 1 1113b8e80941Smrg#define GEN6_DATAPORT_READ_MESSAGE_OWORD_DUAL_BLOCK_READ 2 1114b8e80941Smrg#define GEN6_DATAPORT_READ_MESSAGE_MEDIA_BLOCK_READ 4 1115b8e80941Smrg#define GEN6_DATAPORT_READ_MESSAGE_OWORD_UNALIGN_BLOCK_READ 5 1116b8e80941Smrg#define GEN6_DATAPORT_READ_MESSAGE_DWORD_SCATTERED_READ 6 1117b8e80941Smrg 1118b8e80941Smrg#define BRW_DATAPORT_READ_TARGET_DATA_CACHE 0 1119b8e80941Smrg#define BRW_DATAPORT_READ_TARGET_RENDER_CACHE 1 1120b8e80941Smrg#define BRW_DATAPORT_READ_TARGET_SAMPLER_CACHE 2 1121b8e80941Smrg 1122b8e80941Smrg#define BRW_DATAPORT_RENDER_TARGET_WRITE_SIMD16_SINGLE_SOURCE 0 1123b8e80941Smrg#define BRW_DATAPORT_RENDER_TARGET_WRITE_SIMD16_SINGLE_SOURCE_REPLICATED 1 1124b8e80941Smrg#define BRW_DATAPORT_RENDER_TARGET_WRITE_SIMD8_DUAL_SOURCE_SUBSPAN01 2 1125b8e80941Smrg#define BRW_DATAPORT_RENDER_TARGET_WRITE_SIMD8_DUAL_SOURCE_SUBSPAN23 3 1126b8e80941Smrg#define BRW_DATAPORT_RENDER_TARGET_WRITE_SIMD8_SINGLE_SOURCE_SUBSPAN01 4 1127b8e80941Smrg 1128b8e80941Smrg#define BRW_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE 0 1129b8e80941Smrg#define BRW_DATAPORT_WRITE_MESSAGE_OWORD_DUAL_BLOCK_WRITE 1 1130b8e80941Smrg#define BRW_DATAPORT_WRITE_MESSAGE_MEDIA_BLOCK_WRITE 2 1131b8e80941Smrg#define BRW_DATAPORT_WRITE_MESSAGE_DWORD_SCATTERED_WRITE 3 1132b8e80941Smrg#define BRW_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE 4 1133b8e80941Smrg#define BRW_DATAPORT_WRITE_MESSAGE_STREAMED_VERTEX_BUFFER_WRITE 5 1134b8e80941Smrg#define BRW_DATAPORT_WRITE_MESSAGE_FLUSH_RENDER_CACHE 7 1135b8e80941Smrg 1136b8e80941Smrg/* GEN6 */ 1137b8e80941Smrg#define GEN6_DATAPORT_WRITE_MESSAGE_DWORD_ATOMIC_WRITE 7 1138b8e80941Smrg#define GEN6_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE 8 1139b8e80941Smrg#define GEN6_DATAPORT_WRITE_MESSAGE_OWORD_DUAL_BLOCK_WRITE 9 1140b8e80941Smrg#define GEN6_DATAPORT_WRITE_MESSAGE_MEDIA_BLOCK_WRITE 10 1141b8e80941Smrg#define GEN6_DATAPORT_WRITE_MESSAGE_DWORD_SCATTERED_WRITE 11 1142b8e80941Smrg#define GEN6_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE 12 1143b8e80941Smrg#define GEN6_DATAPORT_WRITE_MESSAGE_STREAMED_VB_WRITE 13 1144b8e80941Smrg#define GEN6_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_UNORM_WRITE 14 1145b8e80941Smrg 1146b8e80941Smrg/* GEN7 */ 1147b8e80941Smrg#define GEN7_DATAPORT_RC_MEDIA_BLOCK_READ 4 1148b8e80941Smrg#define GEN7_DATAPORT_RC_TYPED_SURFACE_READ 5 1149b8e80941Smrg#define GEN7_DATAPORT_RC_TYPED_ATOMIC_OP 6 1150b8e80941Smrg#define GEN7_DATAPORT_RC_MEMORY_FENCE 7 1151b8e80941Smrg#define GEN7_DATAPORT_RC_MEDIA_BLOCK_WRITE 10 1152b8e80941Smrg#define GEN7_DATAPORT_RC_RENDER_TARGET_WRITE 12 1153b8e80941Smrg#define GEN7_DATAPORT_RC_TYPED_SURFACE_WRITE 13 1154b8e80941Smrg#define GEN7_DATAPORT_DC_OWORD_BLOCK_READ 0 1155b8e80941Smrg#define GEN7_DATAPORT_DC_UNALIGNED_OWORD_BLOCK_READ 1 1156b8e80941Smrg#define GEN7_DATAPORT_DC_OWORD_DUAL_BLOCK_READ 2 1157b8e80941Smrg#define GEN7_DATAPORT_DC_DWORD_SCATTERED_READ 3 1158b8e80941Smrg#define GEN7_DATAPORT_DC_BYTE_SCATTERED_READ 4 1159b8e80941Smrg#define GEN7_DATAPORT_DC_UNTYPED_SURFACE_READ 5 1160b8e80941Smrg#define GEN7_DATAPORT_DC_UNTYPED_ATOMIC_OP 6 1161b8e80941Smrg#define GEN7_DATAPORT_DC_MEMORY_FENCE 7 1162b8e80941Smrg#define GEN7_DATAPORT_DC_OWORD_BLOCK_WRITE 8 1163b8e80941Smrg#define GEN7_DATAPORT_DC_OWORD_DUAL_BLOCK_WRITE 10 1164b8e80941Smrg#define GEN7_DATAPORT_DC_DWORD_SCATTERED_WRITE 11 1165b8e80941Smrg#define GEN7_DATAPORT_DC_BYTE_SCATTERED_WRITE 12 1166b8e80941Smrg#define GEN7_DATAPORT_DC_UNTYPED_SURFACE_WRITE 13 1167b8e80941Smrg 1168b8e80941Smrg#define GEN7_DATAPORT_SCRATCH_READ ((1 << 18) | \ 1169b8e80941Smrg (0 << 17)) 1170b8e80941Smrg#define GEN7_DATAPORT_SCRATCH_WRITE ((1 << 18) | \ 1171b8e80941Smrg (1 << 17)) 1172b8e80941Smrg#define GEN7_DATAPORT_SCRATCH_NUM_REGS_SHIFT 12 1173b8e80941Smrg 1174b8e80941Smrg#define GEN7_PIXEL_INTERPOLATOR_LOC_SHARED_OFFSET 0 1175b8e80941Smrg#define GEN7_PIXEL_INTERPOLATOR_LOC_SAMPLE 1 1176b8e80941Smrg#define GEN7_PIXEL_INTERPOLATOR_LOC_CENTROID 2 1177b8e80941Smrg#define GEN7_PIXEL_INTERPOLATOR_LOC_PER_SLOT_OFFSET 3 1178b8e80941Smrg 1179b8e80941Smrg/* HSW */ 1180b8e80941Smrg#define HSW_DATAPORT_DC_PORT0_OWORD_BLOCK_READ 0 1181b8e80941Smrg#define HSW_DATAPORT_DC_PORT0_UNALIGNED_OWORD_BLOCK_READ 1 1182b8e80941Smrg#define HSW_DATAPORT_DC_PORT0_OWORD_DUAL_BLOCK_READ 2 1183b8e80941Smrg#define HSW_DATAPORT_DC_PORT0_DWORD_SCATTERED_READ 3 1184b8e80941Smrg#define HSW_DATAPORT_DC_PORT0_BYTE_SCATTERED_READ 4 1185b8e80941Smrg#define HSW_DATAPORT_DC_PORT0_MEMORY_FENCE 7 1186b8e80941Smrg#define HSW_DATAPORT_DC_PORT0_OWORD_BLOCK_WRITE 8 1187b8e80941Smrg#define HSW_DATAPORT_DC_PORT0_OWORD_DUAL_BLOCK_WRITE 10 1188b8e80941Smrg#define HSW_DATAPORT_DC_PORT0_DWORD_SCATTERED_WRITE 11 1189b8e80941Smrg#define HSW_DATAPORT_DC_PORT0_BYTE_SCATTERED_WRITE 12 1190b8e80941Smrg 1191b8e80941Smrg#define HSW_DATAPORT_DC_PORT1_UNTYPED_SURFACE_READ 1 1192b8e80941Smrg#define HSW_DATAPORT_DC_PORT1_UNTYPED_ATOMIC_OP 2 1193b8e80941Smrg#define HSW_DATAPORT_DC_PORT1_UNTYPED_ATOMIC_OP_SIMD4X2 3 1194b8e80941Smrg#define HSW_DATAPORT_DC_PORT1_MEDIA_BLOCK_READ 4 1195b8e80941Smrg#define HSW_DATAPORT_DC_PORT1_TYPED_SURFACE_READ 5 1196b8e80941Smrg#define HSW_DATAPORT_DC_PORT1_TYPED_ATOMIC_OP 6 1197b8e80941Smrg#define HSW_DATAPORT_DC_PORT1_TYPED_ATOMIC_OP_SIMD4X2 7 1198b8e80941Smrg#define HSW_DATAPORT_DC_PORT1_UNTYPED_SURFACE_WRITE 9 1199b8e80941Smrg#define HSW_DATAPORT_DC_PORT1_MEDIA_BLOCK_WRITE 10 1200b8e80941Smrg#define HSW_DATAPORT_DC_PORT1_ATOMIC_COUNTER_OP 11 1201b8e80941Smrg#define HSW_DATAPORT_DC_PORT1_ATOMIC_COUNTER_OP_SIMD4X2 12 1202b8e80941Smrg#define HSW_DATAPORT_DC_PORT1_TYPED_SURFACE_WRITE 13 1203b8e80941Smrg#define GEN9_DATAPORT_DC_PORT1_A64_SCATTERED_READ 0x10 1204b8e80941Smrg#define GEN8_DATAPORT_DC_PORT1_A64_UNTYPED_SURFACE_READ 0x11 1205b8e80941Smrg#define GEN8_DATAPORT_DC_PORT1_A64_UNTYPED_ATOMIC_OP 0x12 1206b8e80941Smrg#define GEN8_DATAPORT_DC_PORT1_A64_UNTYPED_SURFACE_WRITE 0x19 1207b8e80941Smrg#define GEN8_DATAPORT_DC_PORT1_A64_SCATTERED_WRITE 0x1a 1208b8e80941Smrg#define GEN9_DATAPORT_DC_PORT1_UNTYPED_ATOMIC_FLOAT_OP 0x1b 1209b8e80941Smrg#define GEN9_DATAPORT_DC_PORT1_A64_UNTYPED_ATOMIC_FLOAT_OP 0x1d 1210b8e80941Smrg 1211b8e80941Smrg/* GEN9 */ 1212b8e80941Smrg#define GEN9_DATAPORT_RC_RENDER_TARGET_WRITE 12 1213b8e80941Smrg#define GEN9_DATAPORT_RC_RENDER_TARGET_READ 13 1214b8e80941Smrg 1215b8e80941Smrg/* A64 scattered message subtype */ 1216b8e80941Smrg#define GEN8_A64_SCATTERED_SUBTYPE_BYTE 0 1217b8e80941Smrg#define GEN8_A64_SCATTERED_SUBTYPE_DWORD 1 1218b8e80941Smrg#define GEN8_A64_SCATTERED_SUBTYPE_QWORD 2 1219b8e80941Smrg#define GEN8_A64_SCATTERED_SUBTYPE_HWORD 3 1220b8e80941Smrg 1221b8e80941Smrg/* Dataport special binding table indices: */ 1222b8e80941Smrg#define BRW_BTI_STATELESS 255 1223b8e80941Smrg#define GEN7_BTI_SLM 254 1224b8e80941Smrg/* Note that on Gen8+ BTI 255 was redefined to be IA-coherent according to the 1225b8e80941Smrg * hardware spec, however because the DRM sets bit 4 of HDC_CHICKEN0 on BDW, 1226b8e80941Smrg * CHV and at least some pre-production steppings of SKL due to 1227b8e80941Smrg * WaForceEnableNonCoherent, HDC memory access may have been overridden by the 1228b8e80941Smrg * kernel to be non-coherent (matching the behavior of the same BTI on 1229b8e80941Smrg * pre-Gen8 hardware) and BTI 255 may actually be an alias for BTI 253. 1230b8e80941Smrg */ 1231b8e80941Smrg#define GEN8_BTI_STATELESS_IA_COHERENT 255 1232b8e80941Smrg#define GEN8_BTI_STATELESS_NON_COHERENT 253 1233b8e80941Smrg#define GEN9_BTI_BINDLESS 252 1234b8e80941Smrg 1235b8e80941Smrg/* Dataport atomic operations for Untyped Atomic Integer Operation message 1236b8e80941Smrg * (and others). 1237b8e80941Smrg */ 1238b8e80941Smrg#define BRW_AOP_AND 1 1239b8e80941Smrg#define BRW_AOP_OR 2 1240b8e80941Smrg#define BRW_AOP_XOR 3 1241b8e80941Smrg#define BRW_AOP_MOV 4 1242b8e80941Smrg#define BRW_AOP_INC 5 1243b8e80941Smrg#define BRW_AOP_DEC 6 1244b8e80941Smrg#define BRW_AOP_ADD 7 1245b8e80941Smrg#define BRW_AOP_SUB 8 1246b8e80941Smrg#define BRW_AOP_REVSUB 9 1247b8e80941Smrg#define BRW_AOP_IMAX 10 1248b8e80941Smrg#define BRW_AOP_IMIN 11 1249b8e80941Smrg#define BRW_AOP_UMAX 12 1250b8e80941Smrg#define BRW_AOP_UMIN 13 1251b8e80941Smrg#define BRW_AOP_CMPWR 14 1252b8e80941Smrg#define BRW_AOP_PREDEC 15 1253b8e80941Smrg 1254b8e80941Smrg/* Dataport atomic operations for Untyped Atomic Float Operation message. */ 1255b8e80941Smrg#define BRW_AOP_FMAX 1 1256b8e80941Smrg#define BRW_AOP_FMIN 2 1257b8e80941Smrg#define BRW_AOP_FCMPWR 3 1258b8e80941Smrg 1259b8e80941Smrg#define BRW_MATH_FUNCTION_INV 1 1260b8e80941Smrg#define BRW_MATH_FUNCTION_LOG 2 1261b8e80941Smrg#define BRW_MATH_FUNCTION_EXP 3 1262b8e80941Smrg#define BRW_MATH_FUNCTION_SQRT 4 1263b8e80941Smrg#define BRW_MATH_FUNCTION_RSQ 5 1264b8e80941Smrg#define BRW_MATH_FUNCTION_SIN 6 1265b8e80941Smrg#define BRW_MATH_FUNCTION_COS 7 1266b8e80941Smrg#define BRW_MATH_FUNCTION_SINCOS 8 /* gen4, gen5 */ 1267b8e80941Smrg#define BRW_MATH_FUNCTION_FDIV 9 /* gen6+ */ 1268b8e80941Smrg#define BRW_MATH_FUNCTION_POW 10 1269b8e80941Smrg#define BRW_MATH_FUNCTION_INT_DIV_QUOTIENT_AND_REMAINDER 11 1270b8e80941Smrg#define BRW_MATH_FUNCTION_INT_DIV_QUOTIENT 12 1271b8e80941Smrg#define BRW_MATH_FUNCTION_INT_DIV_REMAINDER 13 1272b8e80941Smrg#define GEN8_MATH_FUNCTION_INVM 14 1273b8e80941Smrg#define GEN8_MATH_FUNCTION_RSQRTM 15 1274b8e80941Smrg 1275b8e80941Smrg#define BRW_MATH_INTEGER_UNSIGNED 0 1276b8e80941Smrg#define BRW_MATH_INTEGER_SIGNED 1 1277b8e80941Smrg 1278b8e80941Smrg#define BRW_MATH_PRECISION_FULL 0 1279b8e80941Smrg#define BRW_MATH_PRECISION_PARTIAL 1 1280b8e80941Smrg 1281b8e80941Smrg#define BRW_MATH_SATURATE_NONE 0 1282b8e80941Smrg#define BRW_MATH_SATURATE_SATURATE 1 1283b8e80941Smrg 1284b8e80941Smrg#define BRW_MATH_DATA_VECTOR 0 1285b8e80941Smrg#define BRW_MATH_DATA_SCALAR 1 1286b8e80941Smrg 1287b8e80941Smrg#define BRW_URB_OPCODE_WRITE_HWORD 0 1288b8e80941Smrg#define BRW_URB_OPCODE_WRITE_OWORD 1 1289b8e80941Smrg#define BRW_URB_OPCODE_READ_HWORD 2 1290b8e80941Smrg#define BRW_URB_OPCODE_READ_OWORD 3 1291b8e80941Smrg#define GEN7_URB_OPCODE_ATOMIC_MOV 4 1292b8e80941Smrg#define GEN7_URB_OPCODE_ATOMIC_INC 5 1293b8e80941Smrg#define GEN8_URB_OPCODE_ATOMIC_ADD 6 1294b8e80941Smrg#define GEN8_URB_OPCODE_SIMD8_WRITE 7 1295b8e80941Smrg#define GEN8_URB_OPCODE_SIMD8_READ 8 1296b8e80941Smrg 1297b8e80941Smrg#define BRW_URB_SWIZZLE_NONE 0 1298b8e80941Smrg#define BRW_URB_SWIZZLE_INTERLEAVE 1 1299b8e80941Smrg#define BRW_URB_SWIZZLE_TRANSPOSE 2 1300b8e80941Smrg 1301b8e80941Smrg#define BRW_SCRATCH_SPACE_SIZE_1K 0 1302b8e80941Smrg#define BRW_SCRATCH_SPACE_SIZE_2K 1 1303b8e80941Smrg#define BRW_SCRATCH_SPACE_SIZE_4K 2 1304b8e80941Smrg#define BRW_SCRATCH_SPACE_SIZE_8K 3 1305b8e80941Smrg#define BRW_SCRATCH_SPACE_SIZE_16K 4 1306b8e80941Smrg#define BRW_SCRATCH_SPACE_SIZE_32K 5 1307b8e80941Smrg#define BRW_SCRATCH_SPACE_SIZE_64K 6 1308b8e80941Smrg#define BRW_SCRATCH_SPACE_SIZE_128K 7 1309b8e80941Smrg#define BRW_SCRATCH_SPACE_SIZE_256K 8 1310b8e80941Smrg#define BRW_SCRATCH_SPACE_SIZE_512K 9 1311b8e80941Smrg#define BRW_SCRATCH_SPACE_SIZE_1M 10 1312b8e80941Smrg#define BRW_SCRATCH_SPACE_SIZE_2M 11 1313b8e80941Smrg 1314b8e80941Smrg#define BRW_MESSAGE_GATEWAY_SFID_OPEN_GATEWAY 0 1315b8e80941Smrg#define BRW_MESSAGE_GATEWAY_SFID_CLOSE_GATEWAY 1 1316b8e80941Smrg#define BRW_MESSAGE_GATEWAY_SFID_FORWARD_MSG 2 1317b8e80941Smrg#define BRW_MESSAGE_GATEWAY_SFID_GET_TIMESTAMP 3 1318b8e80941Smrg#define BRW_MESSAGE_GATEWAY_SFID_BARRIER_MSG 4 1319b8e80941Smrg#define BRW_MESSAGE_GATEWAY_SFID_UPDATE_GATEWAY_STATE 5 1320b8e80941Smrg#define BRW_MESSAGE_GATEWAY_SFID_MMIO_READ_WRITE 6 1321b8e80941Smrg 1322b8e80941Smrg 1323b8e80941Smrg/* Gen7 "GS URB Entry Allocation Size" is a U9-1 field, so the maximum gs_size 1324b8e80941Smrg * is 2^9, or 512. It's counted in multiples of 64 bytes. 1325b8e80941Smrg * 1326b8e80941Smrg * Identical for VS, DS, and HS. 1327b8e80941Smrg */ 1328b8e80941Smrg#define GEN7_MAX_GS_URB_ENTRY_SIZE_BYTES (512*64) 1329b8e80941Smrg#define GEN7_MAX_DS_URB_ENTRY_SIZE_BYTES (512*64) 1330b8e80941Smrg#define GEN7_MAX_HS_URB_ENTRY_SIZE_BYTES (512*64) 1331b8e80941Smrg#define GEN7_MAX_VS_URB_ENTRY_SIZE_BYTES (512*64) 1332b8e80941Smrg 1333b8e80941Smrg/* Gen6 "GS URB Entry Allocation Size" is defined as a number of 1024-bit 1334b8e80941Smrg * (128 bytes) URB rows and the maximum allowed value is 5 rows. 1335b8e80941Smrg */ 1336b8e80941Smrg#define GEN6_MAX_GS_URB_ENTRY_SIZE_BYTES (5*128) 1337b8e80941Smrg 1338b8e80941Smrg/* GS Thread Payload 1339b8e80941Smrg */ 1340b8e80941Smrg 1341b8e80941Smrg/* 3DSTATE_GS "Output Vertex Size" has an effective maximum of 62. It's 1342b8e80941Smrg * counted in multiples of 16 bytes. 1343b8e80941Smrg */ 1344b8e80941Smrg#define GEN7_MAX_GS_OUTPUT_VERTEX_SIZE_BYTES (62*16) 1345b8e80941Smrg 1346b8e80941Smrg 1347b8e80941Smrg/* R0 */ 1348b8e80941Smrg# define GEN7_GS_PAYLOAD_INSTANCE_ID_SHIFT 27 1349b8e80941Smrg 1350b8e80941Smrg/* CR0.0[5:4] Floating-Point Rounding Modes 1351b8e80941Smrg * Skylake PRM, Volume 7 Part 1, "Control Register", page 756 1352b8e80941Smrg */ 1353b8e80941Smrg 1354b8e80941Smrg#define BRW_CR0_RND_MODE_MASK 0x30 1355b8e80941Smrg#define BRW_CR0_RND_MODE_SHIFT 4 1356b8e80941Smrg 1357b8e80941Smrgenum PACKED brw_rnd_mode { 1358b8e80941Smrg BRW_RND_MODE_RTNE = 0, /* Round to Nearest or Even */ 1359b8e80941Smrg BRW_RND_MODE_RU = 1, /* Round Up, toward +inf */ 1360b8e80941Smrg BRW_RND_MODE_RD = 2, /* Round Down, toward -inf */ 1361b8e80941Smrg BRW_RND_MODE_RTZ = 3, /* Round Toward Zero */ 1362b8e80941Smrg BRW_RND_MODE_UNSPECIFIED, /* Unspecified rounding mode */ 1363b8e80941Smrg}; 1364b8e80941Smrg 1365b8e80941Smrg/* MDC_DS - Data Size Message Descriptor Control Field 1366b8e80941Smrg * Skylake PRM, Volume 2d, page 129 1367b8e80941Smrg * 1368b8e80941Smrg * Specifies the number of Bytes to be read or written per Dword used at 1369b8e80941Smrg * byte_scattered read/write and byte_scaled read/write messages. 1370b8e80941Smrg */ 1371b8e80941Smrg#define GEN7_BYTE_SCATTERED_DATA_ELEMENT_BYTE 0 1372b8e80941Smrg#define GEN7_BYTE_SCATTERED_DATA_ELEMENT_WORD 1 1373b8e80941Smrg#define GEN7_BYTE_SCATTERED_DATA_ELEMENT_DWORD 2 1374b8e80941Smrg 1375b8e80941Smrg#endif /* BRW_EU_DEFINES_H */ 1376