summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/freedreno/freedreno_a2xx_reg.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/freedreno/freedreno_a2xx_reg.h')
-rw-r--r--src/gallium/drivers/freedreno/freedreno_a2xx_reg.h1172
1 files changed, 1172 insertions, 0 deletions
diff --git a/src/gallium/drivers/freedreno/freedreno_a2xx_reg.h b/src/gallium/drivers/freedreno/freedreno_a2xx_reg.h
new file mode 100644
index 0000000..7c5982c
--- /dev/null
+++ b/src/gallium/drivers/freedreno/freedreno_a2xx_reg.h
@@ -0,0 +1,1172 @@
+/*
+ * Copyright (c) 2012 Rob Clark <robdclark@gmail.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef FREEDRENO_A2XX_REG_H_
+#define FREEDRENO_A2XX_REG_H_
+
+#include <GLES2/gl2.h>
+
+/* convert float to dword */
+static inline uint32_t f2d(float f)
+{
+ union {
+ float f;
+ uint32_t d;
+ } u = {
+ .f = f,
+ };
+ return u.d;
+}
+
+/* convert float to 12.4 fixed point */
+static inline uint32_t f2d12_4(float f)
+{
+ return (uint32_t)(f * 8.0);
+}
+
+/* convert x,y to dword */
+static inline uint32_t xy2d(uint16_t x, uint16_t y)
+{
+ return ((y & 0x3fff) << 16) | (x & 0x3fff);
+}
+
+/*
+ * Values for CP_EVENT_WRITE:
+ */
+
+enum VGT_EVENT_TYPE {
+ VS_DEALLOC = 0,
+ PS_DEALLOC = 1,
+ VS_DONE_TS = 2,
+ PS_DONE_TS = 3,
+ CACHE_FLUSH_TS = 4,
+ CONTEXT_DONE = 5,
+ CACHE_FLUSH = 6,
+ VIZQUERY_START = 7,
+ VIZQUERY_END = 8,
+ SC_WAIT_WC = 9,
+ RST_PIX_CNT = 13,
+ RST_VTX_CNT = 14,
+ TILE_FLUSH = 15,
+ CACHE_FLUSH_AND_INV_TS_EVENT = 20,
+ ZPASS_DONE = 21,
+ CACHE_FLUSH_AND_INV_EVENT = 22,
+ PERFCOUNTER_START = 23,
+ PERFCOUNTER_STOP = 24,
+ VS_FETCH_DONE = 27,
+ FACENESS_FLUSH = 28,
+};
+
+/*
+ * Color/surface formats:
+ */
+
+enum rb_colorformatx {
+ COLORX_4_4_4_4 = 0,
+ COLORX_1_5_5_5 = 1,
+ COLORX_5_6_5 = 2,
+ COLORX_8 = 3,
+ COLORX_8_8 = 4,
+ COLORX_8_8_8_8 = 5,
+ COLORX_S8_8_8_8 = 6,
+ COLORX_16_FLOAT = 7,
+ COLORX_16_16_FLOAT = 8,
+ COLORX_16_16_16_16_FLOAT = 9,
+ COLORX_32_FLOAT = 10,
+ COLORX_32_32_FLOAT = 11,
+ COLORX_32_32_32_32_FLOAT = 12,
+ COLORX_2_3_3 = 13,
+ COLORX_8_8_8 = 14,
+ COLORX_INVALID,
+};
+
+enum sq_surfaceformat {
+ FMT_1_REVERSE = 0,
+ FMT_1 = 1,
+ FMT_8 = 2,
+ FMT_1_5_5_5 = 3,
+ FMT_5_6_5 = 4,
+ FMT_6_5_5 = 5,
+ FMT_8_8_8_8 = 6,
+ FMT_2_10_10_10 = 7,
+ FMT_8_A = 8,
+ FMT_8_B = 9,
+ FMT_8_8 = 10,
+ FMT_Cr_Y1_Cb_Y0 = 11,
+ FMT_Y1_Cr_Y0_Cb = 12,
+ FMT_5_5_5_1 = 13,
+ FMT_8_8_8_8_A = 14,
+ FMT_4_4_4_4 = 15,
+ FMT_10_11_11 = 16,
+ FMT_11_11_10 = 17,
+ FMT_DXT1 = 18,
+ FMT_DXT2_3 = 19,
+ FMT_DXT4_5 = 20,
+ FMT_24_8 = 22,
+ FMT_24_8_FLOAT = 23,
+ FMT_16 = 24,
+ FMT_16_16 = 25,
+ FMT_16_16_16_16 = 26,
+ FMT_16_EXPAND = 27,
+ FMT_16_16_EXPAND = 28,
+ FMT_16_16_16_16_EXPAND = 29,
+ FMT_16_FLOAT = 30,
+ FMT_16_16_FLOAT = 31,
+ FMT_16_16_16_16_FLOAT = 32,
+ FMT_32 = 33,
+ FMT_32_32 = 34,
+ FMT_32_32_32_32 = 35,
+ FMT_32_FLOAT = 36,
+ FMT_32_32_FLOAT = 37,
+ FMT_32_32_32_32_FLOAT = 38,
+ FMT_32_AS_8 = 39,
+ FMT_32_AS_8_8 = 40,
+ FMT_16_MPEG = 41,
+ FMT_16_16_MPEG = 42,
+ FMT_8_INTERLACED = 43,
+ FMT_32_AS_8_INTERLACED = 44,
+ FMT_32_AS_8_8_INTERLACED = 45,
+ FMT_16_INTERLACED = 46,
+ FMT_16_MPEG_INTERLACED = 47,
+ FMT_16_16_MPEG_INTERLACED = 48,
+ FMT_DXN = 49,
+ FMT_8_8_8_8_AS_16_16_16_16 = 50,
+ FMT_DXT1_AS_16_16_16_16 = 51,
+ FMT_DXT2_3_AS_16_16_16_16 = 52,
+ FMT_DXT4_5_AS_16_16_16_16 = 53,
+ FMT_2_10_10_10_AS_16_16_16_16 = 54,
+ FMT_10_11_11_AS_16_16_16_16 = 55,
+ FMT_11_11_10_AS_16_16_16_16 = 56,
+ FMT_32_32_32_FLOAT = 57,
+ FMT_DXT3A = 58,
+ FMT_DXT5A = 59,
+ FMT_CTX1 = 60,
+ FMT_DXT3A_AS_1_1_1_1 = 61,
+ FMT_INVALID
+};
+
+/*
+ * Register addresses:
+ */
+
+#define REG_COHER_BASE_PM4 0xa2a
+#define REG_COHER_DEST_BASE_0 0x2006
+#define REG_COHER_SIZE_PM4 0xa29
+#define REG_COHER_STATUS_PM4 0xa2b
+#define REG_CP_CSQ_IB1_STAT 0x01fe
+#define REG_CP_CSQ_IB2_STAT 0x01ff
+#define REG_CP_CSQ_RB_STAT 0x01fd
+#define REG_CP_DEBUG 0x01fc
+#define REG_CP_IB1_BASE 0x0458
+#define REG_CP_IB1_BUFSZ 0x0459
+#define REG_CP_IB2_BASE 0x045a
+#define REG_CP_IB2_BUFSZ 0x045b
+#define REG_CP_INT_ACK 0x01f4
+#define REG_CP_INT_CNTL 0x01f2
+#define REG_CP_INT_STATUS 0x01f3
+#define REG_CP_ME_CNTL 0x01f6
+#define REG_CP_ME_RAM_DATA 0x01fa
+#define REG_CP_ME_RAM_RADDR 0x01f9
+#define REG_CP_ME_RAM_WADDR 0x01f8
+#define REG_CP_ME_STATUS 0x01f7
+#define REG_CP_PERFCOUNTER_HI 0x0447
+#define REG_CP_PERFCOUNTER_LO 0x0446
+#define REG_CP_PERFCOUNTER_SELECT 0x0445
+#define REG_CP_PERFMON_CNTL 0x0444
+#define REG_CP_PFP_UCODE_ADDR 0x00c0
+#define REG_CP_PFP_UCODE_DATA 0x00c1
+#define REG_CP_QUEUE_THRESHOLDS 0x01d5
+#define REG_CP_RB_BASE 0x01c0
+#define REG_CP_RB_CNTL 0x01c1
+#define REG_CP_RB_RPTR 0x01c4
+#define REG_CP_RB_RPTR_ADDR 0x01c3
+#define REG_CP_RB_RPTR_WR 0x01c7
+#define REG_CP_RB_WPTR 0x01c5
+#define REG_CP_RB_WPTR_BASE 0x01c8
+#define REG_CP_RB_WPTR_DELAY 0x01c6
+#define REG_CP_STAT 0x047f
+#define REG_CP_STATE_DEBUG_DATA 0x01ed
+#define REG_CP_STATE_DEBUG_INDEX 0x01ec
+#define REG_CP_ST_BASE 0x044d
+#define REG_CP_ST_BUFSZ 0x044e
+#define REG_GRAS_DEBUG_CNTL 0x0c80
+#define REG_GRAS_DEBUG_DATA 0x0c81
+#define REG_MASTER_INT_SIGNAL 0x03b7
+#define REG_PA_CL_CLIP_CNTL 0x2204
+#define REG_PA_CL_GB_HORZ_CLIP_ADJ 0x2305
+#define REG_PA_CL_GB_HORZ_DISC_ADJ 0x2306
+#define REG_PA_CL_GB_VERT_CLIP_ADJ 0x2303
+#define REG_PA_CL_GB_VERT_DISC_ADJ 0x2304
+#define REG_PA_CL_VPORT_XOFFSET 0x2110
+#define REG_PA_CL_VPORT_XSCALE 0x210f
+#define REG_PA_CL_VPORT_YOFFSET 0x2112
+#define REG_PA_CL_VPORT_YSCALE 0x2111
+#define REG_PA_CL_VPORT_ZOFFSET 0x2114
+#define REG_PA_CL_VPORT_ZSCALE 0x2113
+#define REG_PA_CL_VTE_CNTL 0x2206
+#define REG_PA_SC_AA_CONFIG 0x2301
+#define REG_PA_SC_AA_MASK 0x2312
+#define REG_PA_SC_LINE_CNTL 0x2300
+#define REG_PA_SC_LINE_STIPPLE 0x2283
+#define REG_PA_SC_SCREEN_SCISSOR_BR 0x200f
+#define REG_PA_SC_SCREEN_SCISSOR_TL 0x200e
+#define REG_PA_SC_VIZ_QUERY 0x2293
+#define REG_PA_SC_VIZ_QUERY_STATUS 0x0c44
+#define REG_PA_SC_WINDOW_OFFSET 0x2080
+#define REG_PA_SC_WINDOW_SCISSOR_BR 0x2082
+#define REG_PA_SC_WINDOW_SCISSOR_TL 0x2081
+#define REG_PA_SU_DEBUG_CNTL 0x0c80
+#define REG_PA_SU_DEBUG_DATA 0x0c81
+#define REG_PA_SU_FACE_DATA 0x0c86
+#define REG_PA_SU_LINE_CNTL 0x2282
+#define REG_PA_SU_POINT_MINMAX 0x2281
+#define REG_PA_SU_POINT_SIZE 0x2280
+#define REG_PA_SU_POLY_OFFSET_BACK_OFFSET 0x2383
+#define REG_PA_SU_POLY_OFFSET_FRONT_SCALE 0x2380
+#define REG_PA_SU_SC_MODE_CNTL 0x2205
+#define REG_PA_SU_VTX_CNTL 0x2302
+#define REG_PC_DEBUG_CNTL 0x0c38
+#define REG_PC_DEBUG_DATA 0x0c39
+#define REG_RB_ALPHA_REF 0x210e
+#define REG_RB_BC_CONTROL 0x0f01
+#define REG_RB_BLEND_ALPHA 0x2108
+#define REG_RB_BLEND_BLUE 0x2107
+#define REG_RB_BLEND_CONTROL 0x2201
+#define REG_RB_BLEND_GREEN 0x2106
+#define REG_RB_BLEND_RED 0x2105
+#define REG_RBBM_CNTL 0x003b
+#define REG_RBBM_DEBUG 0x039b
+#define REG_RBBM_DEBUG_CNTL 0x03a1
+#define REG_RBBM_DEBUG_OUT 0x03a0
+#define REG_RBBM_INT_ACK 0x03b6
+#define REG_RBBM_INT_CNTL 0x03b4
+#define REG_RBBM_INT_STATUS 0x03b5
+#define REG_RBBM_PATCH_RELEASE 0x0001
+#define REG_RBBM_PERFCOUNTER1_HI 0x0398
+#define REG_RBBM_PERFCOUNTER1_LO 0x0397
+#define REG_RBBM_PERFCOUNTER1_SELECT 0x0395
+#define REG_RBBM_PERIPHID1 0x03f9
+#define REG_RBBM_PERIPHID2 0x03fa
+#define REG_RBBM_PM_OVERRIDE1 0x039c
+#define REG_RBBM_PM_OVERRIDE2 0x039d
+#define REG_RBBM_READ_ERROR 0x03b3
+#define REG_RBBM_SOFT_RESET 0x003c
+#define REG_RBBM_STATUS 0x05d0
+#define REG_RB_COLORCONTROL 0x2202
+#define REG_RB_COLOR_DEST_MASK 0x2326
+#define REG_RB_COLOR_INFO 0x2001
+#define REG_RB_COLOR_MASK 0x2104
+#define REG_RB_COPY_CONTROL 0x2318
+#define REG_RB_COPY_DEST_BASE 0x2319
+#define REG_RB_COPY_DEST_INFO 0x231b
+#define REG_RB_COPY_DEST_OFFSET 0x231c
+#define REG_RB_COPY_DEST_PITCH 0x231a
+#define REG_RB_DEBUG_CNTL 0x0f26
+#define REG_RB_DEBUG_DATA 0x0f27
+#define REG_RB_DEPTH_CLEAR 0x231d
+#define REG_RB_DEPTHCONTROL 0x2200
+#define REG_RB_DEPTH_INFO 0x2002
+#define REG_RB_EDRAM_INFO 0x0f02
+#define REG_RB_FOG_COLOR 0x2109
+#define REG_RB_MODECONTROL 0x2208
+#define REG_RB_SAMPLE_COUNT_CTL 0x2324
+#define REG_RB_SAMPLE_POS 0x220a
+#define REG_RB_STENCILREFMASK 0x210d
+#define REG_RB_STENCILREFMASK_BF 0x210c
+#define REG_RB_SURFACE_INFO 0x2000
+#define REG_SCRATCH_ADDR 0x01dd
+#define REG_SCRATCH_REG0 0x0578
+#define REG_SCRATCH_REG2 0x057a
+#define REG_SCRATCH_UMSK 0x01dc
+#define REG_SQ_CF_BOOLEANS 0x4900
+#define REG_SQ_CF_LOOP 0x4908
+#define REG_SQ_CONSTANT_0 0x4000
+#define REG_SQ_CONTEXT_MISC 0x2181
+#define REG_SQ_DEBUG_CONST_MGR_FSM 0x0daf
+#define REG_SQ_DEBUG_EXP_ALLOC 0x0db3
+#define REG_SQ_DEBUG_FSM_ALU_0 0x0db1
+#define REG_SQ_DEBUG_FSM_ALU_1 0x0db2
+#define REG_SQ_DEBUG_GPR_PIX 0x0db6
+#define REG_SQ_DEBUG_GPR_VTX 0x0db5
+#define REG_SQ_DEBUG_INPUT_FSM 0x0dae
+#define REG_SQ_DEBUG_MISC_0 0x2309
+#define REG_SQ_DEBUG_MISC 0x0d05
+#define REG_SQ_DEBUG_MISC_1 0x230a
+#define REG_SQ_DEBUG_PIX_TB_0 0x0dbc
+#define REG_SQ_DEBUG_PIX_TB_STATE_MEM 0x0dc1
+#define REG_SQ_DEBUG_PIX_TB_STATUS_REG_0 0x0dbd
+#define REG_SQ_DEBUG_PIX_TB_STATUS_REG_1 0x0dbe
+#define REG_SQ_DEBUG_PIX_TB_STATUS_REG_2 0x0dbf
+#define REG_SQ_DEBUG_PIX_TB_STATUS_REG_3 0x0dc0
+#define REG_SQ_DEBUG_PTR_BUFF 0x0db4
+#define REG_SQ_DEBUG_TB_STATUS_SEL 0x0db7
+#define REG_SQ_DEBUG_TP_FSM 0x0db0
+#define REG_SQ_DEBUG_VTX_TB_0 0x0db8
+#define REG_SQ_DEBUG_VTX_TB_1 0x0db9
+#define REG_SQ_DEBUG_VTX_TB_STATE_MEM 0x0dbb
+#define REG_SQ_DEBUG_VTX_TB_STATUS_REG 0x0dba
+#define REG_SQ_FETCH_0 0x4800
+#define REG_SQ_FLOW_CONTROL 0x0d01
+#define REG_SQ_GPR_MANAGEMENT 0x0d00
+#define REG_SQ_INST_STORE_MANAGMENT 0x0d02
+#define REG_SQ_INT_ACK 0x0d36
+#define REG_SQ_INT_CNTL 0x0d34
+#define REG_SQ_INTERPOLATOR_CNTL 0x2182
+#define REG_SQ_INT_STATUS 0x0d35
+#define REG_SQ_PROGRAM_CNTL 0x2180
+#define REG_SQ_PS_CONST 0x2308
+#define REG_SQ_PS_PROGRAM 0x21f6
+#define REG_SQ_VS_CONST 0x2307
+#define REG_SQ_VS_PROGRAM 0x21f7
+#define REG_SQ_WRAPPING_0 0x2183
+#define REG_SQ_WRAPPING_1 0x2184
+#define REG_TC_CNTL_STATUS 0x0e00
+#define REG_TP0_CHICKEN 0x0e1e
+#define REG_VGT_CURRENT_BIN_ID_MAX 0x2203
+#define REG_VGT_CURRENT_BIN_ID_MIN 0x2207
+#define REG_VGT_ENHANCE 0x2294
+#define REG_VGT_INDX_OFFSET 0x2102
+#define REG_VGT_MAX_VTX_INDX 0x2100
+#define REG_VGT_MIN_VTX_INDX 0x2101
+#define REG_VGT_OUT_DEALLOC_CNTL 0x2317
+#define REG_VGT_VERTEX_REUSE_BLOCK_CNTL 0x2316
+
+/* Added in a220: */
+#define REG_A220_RB_LRZ_VSC_CONTROL 0x2209
+#define REG_A220_GRAS_CONTROL 0x2210
+#define REG_A220_VSC_BIN_SIZE 0x0c01
+#define REG_A220_VSC_PIPE_DATA_LENGTH_7 0x0c1d
+#define REG_VSC_PIPE_CONFIG_0 0x0c06
+#define REG_VSC_PIPE_DATA_ADDRESS_0 0x0c07
+#define REG_VSC_PIPE_DATA_LENGTH_0 0x0c08
+#define REG_VSC_PIPE_CONFIG_1 0x0c09
+#define REG_VSC_PIPE_DATA_ADDRESS_1 0x0c0a
+#define REG_VSC_PIPE_DATA_LENGTH_1 0x0c0b
+#define REG_VSC_PIPE_CONFIG_2 0x0c0c
+#define REG_VSC_PIPE_DATA_ADDRESS_2 0x0c0d
+#define REG_VSC_PIPE_DATA_LENGTH_2 0x0c0e
+#define REG_VSC_PIPE_CONFIG_3 0x0c0f
+#define REG_VSC_PIPE_DATA_ADDRESS_3 0x0c10
+#define REG_VSC_PIPE_DATA_LENGTH_3 0x0c11
+#define REG_VSC_PIPE_CONFIG_4 0x0c12
+#define REG_VSC_PIPE_DATA_ADDRESS_4 0x0c13
+#define REG_VSC_PIPE_DATA_LENGTH_4 0x0c14
+#define REG_VSC_PIPE_CONFIG_5 0x0c15
+#define REG_VSC_PIPE_DATA_ADDRESS_5 0x0c16
+#define REG_VSC_PIPE_DATA_LENGTH_5 0x0c17
+#define REG_VSC_PIPE_CONFIG_6 0x0c18
+#define REG_VSC_PIPE_DATA_ADDRESS_6 0x0c19
+#define REG_VSC_PIPE_DATA_LENGTH_6 0x0c1a
+#define REG_VSC_PIPE_CONFIG_7 0x0c1b
+#define REG_VSC_PIPE_DATA_ADDRESS_7 0x0c1c
+#define REG_VSC_PIPE_DATA_LENGTH_7 0x0c1d
+
+/* Added in a225: */
+#define REG_A225_RB_COLOR_INFO3 0x2005
+#define REG_A225_PC_MULTI_PRIM_IB_RESET_INDX 0x2103
+#define REG_A225_GRAS_UCP0X 0x2340
+#define REG_A225_GRAS_UCP5W 0x2357
+#define REG_A225_GRAS_UCP_ENABLED 0x2360
+
+/* not sure, maybe RB_CLEAR_COLOR? */
+#define REG_CLEAR_COLOR 0x220b
+
+/* unnamed registers: */
+#define REG_0c02 0x0c02
+#define REG_0c04 0x0c04
+#define REG_0c06 0x0c06
+#define REG_2010 0x2010
+
+
+/*
+ * Format for 2nd dword in CP_DRAW_INDX and friends:
+ */
+
+/* see VGT_PRIMITIVE_TYPE.PRIM_TYPE? */
+enum pc_di_primtype {
+ DI_PT_NONE = 0,
+ DI_PT_POINTLIST = 1,
+ DI_PT_LINELIST = 2,
+ DI_PT_LINESTRIP = 3,
+ DI_PT_TRILIST = 4,
+ DI_PT_TRIFAN = 5,
+ DI_PT_TRISTRIP = 6,
+ DI_PT_RECTLIST = 8,
+ DI_PT_QUADLIST = 13,
+ DI_PT_QUADSTRIP = 14,
+ DI_PT_POLYGON = 15,
+ DI_PT_2D_COPY_RECT_LIST_V0 = 16,
+ DI_PT_2D_COPY_RECT_LIST_V1 = 17,
+ DI_PT_2D_COPY_RECT_LIST_V2 = 18,
+ DI_PT_2D_COPY_RECT_LIST_V3 = 19,
+ DI_PT_2D_FILL_RECT_LIST = 20,
+ DI_PT_2D_LINE_STRIP = 21,
+ DI_PT_2D_TRI_STRIP = 22,
+};
+
+/* see VGT:VGT_DRAW_INITIATOR.SOURCE_SELECT? */
+enum pc_di_src_sel {
+ DI_SRC_SEL_DMA = 0,
+ DI_SRC_SEL_IMMEDIATE = 1,
+ DI_SRC_SEL_AUTO_INDEX = 2,
+ DI_SRC_SEL_RESERVED = 3,
+};
+
+/* see VGT_DMA_INDEX_TYPE.INDEX_TYPE? */
+enum pc_di_index_size {
+ INDEX_SIZE_IGN = 0,
+ INDEX_SIZE_16_BIT = 0,
+ INDEX_SIZE_32_BIT = 1,
+ INDEX_SIZE_8_BIT = 2,
+ INDEX_SIZE_INVALID
+};
+
+enum pc_di_vis_cull_mode {
+ IGNORE_VISIBILITY = 0,
+};
+
+static inline uint32_t DRAW(enum pc_di_primtype prim_type,
+ enum pc_di_src_sel source_select, enum pc_di_index_size index_size,
+ enum pc_di_vis_cull_mode vis_cull_mode)
+{
+ return (prim_type << 0) |
+ (source_select << 6) |
+ ((index_size & 1) << 11) |
+ ((index_size >> 1) << 13) |
+ (vis_cull_mode << 9) |
+ (1 << 14);
+}
+
+
+/*
+ * Bits for VGT_CURRENT_BIN_ID_MIN/MAX:
+ */
+
+#define VGT_CURRENT_BIN_ID_MIN_COLUMN(val) (((val) & 0x7) << 0)
+#define VGT_CURRENT_BIN_ID_MIN_ROW(val) (((val) & 0x7) << 3)
+#define VGT_CURRENT_BIN_ID_MIN_GUARD_BAND(val) (((val) & 0x7) << 6)
+
+
+/*
+ * Bits for PA_CL_VTE_CNTL:
+ */
+
+#define PA_CL_VTE_CNTL_VPORT_X_SCALE_ENA 0x00000001
+#define PA_CL_VTE_CNTL_VPORT_X_OFFSET_ENA 0x00000002
+#define PA_CL_VTE_CNTL_VPORT_Y_SCALE_ENA 0x00000004
+#define PA_CL_VTE_CNTL_VPORT_Y_OFFSET_ENA 0x00000008
+#define PA_CL_VTE_CNTL_VPORT_Z_SCALE_ENA 0x00000010
+#define PA_CL_VTE_CNTL_VPORT_Z_OFFSET_ENA 0x00000020
+#define PA_CL_VTE_CNTL_VTX_XY_FMT 0x00000100
+#define PA_CL_VTE_CNTL_VTX_Z_FMT 0x00000200
+#define PA_CL_VTE_CNTL_VTX_W0_FMT 0x00000400
+#define PA_CL_VTE_CNTL_PERFCOUNTER_REF 0x00000800
+
+
+/*
+ * Bits for PA_CL_CLIP_CNTL:
+ */
+
+#define PA_CL_CLIP_CNTL_CLIP_DISABLE 0x00010000
+#define PA_CL_CLIP_CNTL_BOUNDARY_EDGE_FLAG_ENA 0x00040000
+enum dx_clip_space {
+ DXCLIP_OPENGL = 0,
+ DXCLIP_DIRECTX = 1,
+};
+static inline uint32_t PA_CL_CLIP_CNTL_DX_CLIP_SPACE_DEF(enum dx_clip_space val)
+{
+ return val << 19;
+}
+#define PA_CL_CLIP_CNTL_DIS_CLIP_ERR_DETECT 0x00100000
+#define PA_CL_CLIP_CNTL_VTX_KILL_OR 0x00200000
+#define PA_CL_CLIP_CNTL_XY_NAN_RETAIN 0x00400000
+#define PA_CL_CLIP_CNTL_Z_NAN_RETAIN 0x00800000
+#define PA_CL_CLIP_CNTL_W_NAN_RETAIN 0x01000000
+
+
+/*
+ * Bits for PA_SU_SC_MODE_CNTL:
+ */
+
+#define PA_SU_SC_MODE_CNTL_CULL_FRONT 0x00000001
+#define PA_SU_SC_MODE_CNTL_CULL_BACK 0x00000002
+#define PA_SU_SC_MODE_CNTL_FACE 0x00000004
+enum pa_su_sc_polymode {
+ POLY_DISABLED = 0,
+ POLY_DUALMODE = 1,
+};
+static inline uint32_t PA_SU_SC_MODE_CNTL_POLYMODE(enum pa_su_sc_polymode val)
+{
+ return val << 3;
+}
+enum pa_su_sc_draw {
+ DRAW_POINTS = 0,
+ DRAW_LINES = 1,
+ DRAW_TRIANGLES = 2,
+};
+static inline uint32_t PA_SU_SC_MODE_CNTL_POLYMODE_FRONT_PTYPE(enum pa_su_sc_draw val)
+{
+ return val << 5;
+}
+static inline uint32_t PA_SU_SC_MODE_CNTL_POLYMODE_BACK_PTYPE(enum pa_su_sc_draw val)
+{
+ return val << 8;
+}
+#define PA_SU_SC_MODE_CNTL_POLY_OFFSET_FRONT_ENABLE 0x00000800
+#define PA_SU_SC_MODE_CNTL_POLY_OFFSET_BACK_ENABLE 0x00001000
+#define PA_SU_SC_MODE_CNTL_POLY_OFFSET_PARA_ENABLE 0x00002000
+#define PA_SU_SC_MODE_CNTL_MSAA_ENABLE 0x00008000
+#define PA_SU_SC_MODE_CNTL_VTX_WINDOW_OFFSET_ENABLE 0x00010000
+#define PA_SU_SC_MODE_CNTL_LINE_STIPPLE_ENABLE 0x00040000
+#define PA_SU_SC_MODE_CNTL_PROVOKING_VTX_LAST 0x00080000
+#define PA_SU_SC_MODE_CNTL_PERSP_CORR_DIS 0x00100000
+#define PA_SU_SC_MODE_CNTL_MULTI_PRIM_IB_ENA 0x00200000
+#define PA_SU_SC_MODE_CNTL_QUAD_ORDER_ENABLE 0x00800000
+#define PA_SU_SC_MODE_CNTL_WAIT_RB_IDLE_ALL_TRI 0x02000000
+#define PA_SU_SC_MODE_CNTL_WAIT_RB_IDLE_FIRST_TRI_NEW_STATE 0x04000000
+#define PA_SU_SC_MODE_CNTL_CLAMPED_FACENESS 0x10000000
+#define PA_SU_SC_MODE_CNTL_ZERO_AREA_FACENESS 0x20000000
+#define PA_SU_SC_MODE_CNTL_FACE_KILL_ENABLE 0x40000000
+#define PA_SU_SC_MODE_CNTL_FACE_WRITE_ENABLE 0x80000000
+
+
+/*
+ * Bits for PA_SC_LINE_STIPPLE:
+ */
+
+#define PA_SC_LINE_STIPPLE_LINE_PATTERN(val) ((val) & 0x0000ffff)
+#define PA_SC_LINE_STIPPLE_REPEAT_COUNT(val) (((val) << 16) & 0x00ff0000)
+enum pa_sc_pattern_bit_order {
+ PATTERN_BIT_ORDER_LITTLE = 0,
+ PATTERN_BIT_ORDER_BIG = 1,
+};
+static inline uint32_t PA_SC_LINE_STIPPLE_PATTERN_BIT_ORDER(enum pa_sc_pattern_bit_order val)
+{
+ return val << 28;
+}
+enum pa_sc_auto_reset_cntl {
+ AUTO_RESET_NEVER = 0,
+ AUTO_RESET_EACH_PRIMITIVE = 1,
+ AUTO_RESET_EACH_PACKET = 2,
+};
+static inline uint32_t PA_SC_LINE_STIPPLE_AUTO_RESET_CNTL(enum pa_sc_auto_reset_cntl val)
+{
+ return val << 29;
+}
+
+
+/*
+ * Bits for PA_SC_LINE_CNTL:
+ */
+
+#define PA_SC_LINE_CNTL_BRES_CNTL_MASK(val) ((val) & 0x000000ff)
+#define PA_SC_LINE_CNTL_USE_BRES_CNTL 0x00000100
+#define PA_SC_LINE_CNTL_EXPAND_LINE_WIDTH 0x00000200
+#define PA_SC_LINE_CNTL_LAST_PIXEL 0x00000400
+
+
+/*
+ * Bits for PA_SU_VTX_CNTL:
+ */
+
+enum pa_pixcenter {
+ PIXCENTER_D3D = 0,
+ PIXCENTER_OGL = 1,
+};
+static inline uint32_t PA_SU_VTX_CNTL_PIX_CENTER(enum pa_pixcenter val)
+{
+ return val;
+}
+
+enum pa_roundmode {
+ TRUNCATE = 0,
+ ROUND = 1,
+ ROUNDTOEVEN = 2,
+ ROUNDTOODD = 3,
+};
+static inline uint32_t PA_SU_VTX_CNTL_ROUND_MODE_MASK(enum pa_roundmode val)
+{
+ return val << 1;
+}
+
+enum pa_quantmode {
+ ONE_SIXTEENTH = 0,
+ ONE_EIGHTH = 1,
+ ONE_QUARTER = 2,
+ ONE_HALF = 3,
+ ONE = 4,
+};
+static inline uint32_t PA_SU_VTX_CNTL_QUANT_MODE(enum pa_quantmode val)
+{
+ return val << 3;
+}
+
+
+/*
+ * Bits for PA_SU_POINT_SIZE:
+ */
+
+#define PA_SU_POINT_SIZE_HEIGHT(val) (f2d12_4(val) & 0xffff)
+#define PA_SU_POINT_SIZE_WIDTH(val) ((f2d12_4(val) << 16) & 0xffff)
+
+
+/*
+ * Bits for PA_SU_POINT_MINMAX:
+ */
+
+#define PA_SU_POINT_MINMAX_MIN_SIZE(val) (f2d12_4(val) & 0xffff)
+#define PA_SU_POINT_MINMAX_MAX_SIZE(val) ((f2d12_4(val) << 16) & 0xffff)
+
+
+/*
+ * Bits for PA_SU_LINE_CNTL:
+ */
+
+#define PA_SU_LINE_CNTL_WIDTH(val) (f2d12_4(val) & 0xffff)
+
+
+/*
+ * Bits for PA_SC_WINDOW_OFFSET:
+ * (seems to be same as r600)
+ */
+#define PA_SC_WINDOW_OFFSET_X(val) ((val) & 0x7fff)
+#define PA_SC_WINDOW_OFFSET_Y(val) (((val) & 0x7fff) << 16)
+
+#define PA_SC_WINDOW_OFFSET_DISABLE 0x80000000
+
+
+/*
+ * Bits for SQ_CONTEXT_MISC:
+ */
+
+#define SQ_CONTEXT_MISC_INST_PRED_OPTIMIZE 0x00000001
+#define SQ_CONTEXT_MISC_SC_OUTPUT_SCREEN_XY 0x00000002
+enum sq_sample_cntl {
+ CENTROIDS_ONLY = 0,
+ CENTERS_ONLY = 1,
+ CENTROIDS_AND_CENTERS = 2,
+};
+static inline uint32_t SQ_CONTEXT_MISC_SC_SAMPLE_CNTL(enum sq_sample_cntl val)
+{
+ return (val & 0x3) << 2;
+}
+#define SQ_CONTEXT_MISC_PARAM_GEN_POS(val) (((val) & 0xff) << 8)
+#define SQ_CONTEXT_MISC_PERFCOUNTER_REF 0x00010000
+#define SQ_CONTEXT_MISC_YEILD_OPTIMIZE 0x00020000
+#define SQ_CONTEXT_MISC_TX_CACHE_SEL 0x00040000
+
+
+/*
+ * Bits for SQ_PROGRAM_CNTL:
+ */
+/* note: only 0x3f worth of valid register values, but high bit is
+ * set to indicate '0 registers used':
+ */
+#define SQ_PROGRAM_CNTL_VS_REGS(val) ((val) & 0xff)
+#define SQ_PROGRAM_CNTL_PS_REGS(val) (((val) & 0xff) << 8)
+#define SQ_PROGRAM_CNTL_VS_RESOURCE 0x00010000
+#define SQ_PROGRAM_CNTL_PS_RESOURCE 0x00020000
+#define SQ_PROGRAM_CNTL_PARAM_GEN 0x00040000
+#define SQ_PROGRAM_CNTL_GEN_INDEX_PIX 0x00080000
+#define SQ_PROGRAM_CNTL_VS_EXPORT_COUNT(val) (((val) & 0xf) << 20)
+#define SQ_PROGRAM_CNTL_VS_EXPORT_MODE(val) (((val) & 0x7) << 24)
+enum sq_ps_vtx_mode {
+ POSITION_1_VECTOR = 0,
+ POSITION_2_VECTORS_UNUSED = 1,
+ POSITION_2_VECTORS_SPRITE = 2,
+ POSITION_2_VECTORS_EDGE = 3,
+ POSITION_2_VECTORS_KILL = 4,
+ POSITION_2_VECTORS_SPRITE_KILL = 5,
+ POSITION_2_VECTORS_EDGE_KILL = 6,
+ MULTIPASS = 7,
+};
+static inline uint32_t SQ_PROGRAM_CNTL_PS_EXPORT_MODE(enum sq_ps_vtx_mode val)
+{
+ return val << 27;
+}
+#define SQ_PROGRAM_CNTL_GEN_INDEX_VTX 0x80000000
+
+
+/*
+ * Bits for SQ_VS_CONST
+ */
+
+#define SQ_VS_CONST_BASE(val) ((val) & 0x1ff)
+#define SQ_VS_CONST_SIZE(val) (((val) & 0x1ff) << 12)
+
+
+/*
+ * Bits for SQ_PS_CONST
+ */
+
+#define SQ_PS_CONST_BASE(val) ((val) & 0x1ff)
+#define SQ_PS_CONST_SIZE(val) (((val) & 0x1ff) << 12)
+
+
+/*
+ * Bits for tex sampler:
+ */
+
+/* dword0 */
+enum sq_tex_clamp {
+ SQ_TEX_WRAP = 0, /* GL_REPEAT */
+ SQ_TEX_MIRROR = 1, /* GL_MIRRORED_REPEAT */
+ SQ_TEX_CLAMP_LAST_TEXEL = 2, /* GL_CLAMP_TO_EDGE */
+ /* TODO confirm these: */
+ SQ_TEX_MIRROR_ONCE_LAST_TEXEL = 3,
+ SQ_TEX_CLAMP_HALF_BORDER = 4,
+ SQ_TEX_MIRROR_ONCE_HALF_BORDER = 5,
+ SQ_TEX_CLAMP_BORDER = 6,
+ SQ_TEX_MIRROR_ONCE_BORDER = 7,
+};
+static inline uint32_t SQ_TEX0_CLAMP_X(enum sq_tex_clamp val)
+{
+ return (val & 0x7) << 10;
+}
+static inline uint32_t SQ_TEX0_CLAMP_Y(enum sq_tex_clamp val)
+{
+ return (val & 0x7) << 13;
+}
+static inline uint32_t SQ_TEX0_CLAMP_Z(enum sq_tex_clamp val)
+{
+ return (val & 0x7) << 16;
+}
+#define SQ_TEX0_PITCH(val) (((val) >> 5) << 22)
+
+/* dword2 */
+#define SQ_TEX2_HEIGHT(val) (((val) - 1) << 13)
+#define SQ_TEX2_WIDTH(val) ((val) - 1)
+
+/* dword3 */
+enum sq_tex_swiz {
+ SQ_TEX_X = 0,
+ SQ_TEX_Y = 1,
+ SQ_TEX_Z = 2,
+ SQ_TEX_W = 3,
+ SQ_TEX_ZERO = 4,
+ SQ_TEX_ONE = 5,
+};
+static inline uint32_t SQ_TEX3_SWIZ_X(enum sq_tex_swiz val)
+{
+ return (val & 0x7) << 1;
+}
+static inline uint32_t SQ_TEX3_SWIZ_Y(enum sq_tex_swiz val)
+{
+ return (val & 0x7) << 4;
+}
+static inline uint32_t SQ_TEX3_SWIZ_Z(enum sq_tex_swiz val)
+{
+ return (val & 0x7) << 7;
+}
+static inline uint32_t SQ_TEX3_SWIZ_W(enum sq_tex_swiz val)
+{
+ return (val & 0x7) << 10;
+}
+
+enum sq_tex_filter {
+ SQ_TEX_FILTER_POINT = 0,
+ SQ_TEX_FILTER_BILINEAR = 1,
+ SQ_TEX_FILTER_BICUBIC = 2, /* presumed */
+};
+static inline uint32_t SQ_TEX3_XY_MAG_FILTER(enum sq_tex_filter val)
+{
+ return (val & 0x3) << 19;
+}
+static inline uint32_t SQ_TEX3_XY_MIN_FILTER(enum sq_tex_filter val)
+{
+ return (val & 0x3) << 21;
+}
+
+
+/*
+ * Bits for RB_BLEND_CONTROL:
+ */
+
+enum rb_blend_op {
+ RB_BLEND_ZERO = 0,
+ RB_BLEND_ONE = 1,
+ RB_BLEND_SRC_COLOR = 4,
+ RB_BLEND_ONE_MINUS_SRC_COLOR = 5,
+ RB_BLEND_SRC_ALPHA = 6,
+ RB_BLEND_ONE_MINUS_SRC_ALPHA = 7,
+ RB_BLEND_DST_COLOR = 8,
+ RB_BLEND_ONE_MINUS_DST_COLOR = 9,
+ RB_BLEND_DST_ALPHA = 10,
+ RB_BLEND_ONE_MINUS_DST_ALPHA = 11,
+ RB_BLEND_CONSTANT_COLOR = 12,
+ RB_BLEND_ONE_MINUS_CONSTANT_COLOR = 13,
+ RB_BLEND_CONSTANT_ALPHA = 14,
+ RB_BLEND_ONE_MINUS_CONSTANT_ALPHA = 15,
+ RB_BLEND_SRC_ALPHA_SATURATE = 16,
+};
+
+enum rb_comb_func {
+ COMB_DST_PLUS_SRC = 0,
+ COMB_SRC_MINUS_DST = 1,
+ COMB_MIN_DST_SRC = 2,
+ COMB_MAX_DST_SRC = 3,
+ COMB_DST_MINUS_SRC = 4,
+ COMB_DST_PLUS_SRC_BIAS = 5,
+};
+
+#define RB_BLENDCONTROL_COLOR_SRCBLEND_MASK 0x0000001f
+static inline uint32_t RB_BLENDCONTROL_COLOR_SRCBLEND(enum rb_blend_op val)
+{
+ return val & RB_BLENDCONTROL_COLOR_SRCBLEND_MASK;
+}
+#define RB_BLENDCONTROL_COLOR_COMB_FCN_MASK 0x000000e0
+static inline uint32_t RB_BLENDCONTROL_COLOR_COMB_FCN(enum rb_comb_func val)
+{
+ return (val << 5) & RB_BLENDCONTROL_COLOR_COMB_FCN_MASK;
+}
+#define RB_BLENDCONTROL_COLOR_DESTBLEND_MASK 0x00001f00
+static inline uint32_t RB_BLENDCONTROL_COLOR_DESTBLEND(enum rb_blend_op val)
+{
+ return (val << 8) & RB_BLENDCONTROL_COLOR_DESTBLEND_MASK;
+}
+#define RB_BLENDCONTROL_ALPHA_SRCBLEND_MASK 0x001f0000
+static inline uint32_t RB_BLENDCONTROL_ALPHA_SRCBLEND(enum rb_blend_op val)
+{
+ return (val << 16) & RB_BLENDCONTROL_ALPHA_SRCBLEND_MASK;
+}
+#define RB_BLENDCONTROL_ALPHA_COMB_FCN_MASK 0x00e00000
+static inline uint32_t RB_BLENDCONTROL_ALPHA_COMB_FCN(enum rb_comb_func val)
+{
+ return (val << 21) & RB_BLENDCONTROL_ALPHA_COMB_FCN_MASK;
+}
+#define RB_BLENDCONTROL_ALPHA_DESTBLEND_MASK 0x1f000000
+static inline uint32_t RB_BLENDCONTROL_ALPHA_DESTBLEND(enum rb_blend_op val)
+{
+ return (val << 24) & RB_BLENDCONTROL_ALPHA_DESTBLEND_MASK;
+}
+#define RB_BLENDCONTROL_BLEND_FORCE_ENABLE 0x20000000
+#define RB_BLENDCONTROL_BLEND_FORCE 0x40000000
+
+
+/*
+ * Bits for RB_COLOR_MASK:
+ */
+#define RB_COLOR_MASK_WRITE_RED 0x00000001
+#define RB_COLOR_MASK_WRITE_GREEN 0x00000002
+#define RB_COLOR_MASK_WRITE_BLUE 0x00000004
+#define RB_COLOR_MASK_WRITE_ALPHA 0x00000008
+
+
+/*
+ * Bits for RB_COLOR_INFO:
+ */
+
+#define RB_COLOR_INFO_COLOR_FORMAT_MASK 0x0000000f
+static inline uint32_t RB_COLOR_INFO_COLOR_FORMAT(enum rb_colorformatx val)
+{
+ return val & RB_COLOR_INFO_COLOR_FORMAT_MASK;
+}
+
+#define RB_COLOR_INFO_COLOR_ROUND_MODE(val) (((val) & 0x3) << 4)
+#define RB_COLOR_INFO_COLOR_LINEAR 0x00000040
+#define RB_COLOR_INFO_COLOR_ENDIAN(val) (((val) & 0x3) << 7)
+#define RB_COLOR_INFO_COLOR_SWAP(val) (((val) & 0x3) << 9)
+#define RB_COLOR_INFO_COLOR_BASE(val) (((val) & 0xfffff) << 12)
+
+
+/*
+ * Bits for RB_MODECONTROL:
+ */
+
+enum rb_edram_mode {
+ EDRAM_NOP = 0,
+ COLOR_DEPTH = 4,
+ DEPTH_ONLY = 5,
+ EDRAM_COPY = 6,
+};
+static inline uint32_t RB_MODECONTROL_EDRAM_MODE(enum rb_edram_mode val)
+{
+ return val & 0x7;
+}
+
+
+/*
+ * Bits for RB_DEPTHCONTROL:
+ */
+
+#define RB_DEPTHCONTROL_STENCIL_ENABLE 0x00000001
+#define RB_DEPTHCONTROL_Z_ENABLE 0x00000002
+#define RB_DEPTHCONTROL_Z_WRITE_ENABLE 0x00000004
+#define RB_DEPTHCONTROL_EARLY_Z_ENABLE 0x00000008
+#define RB_DEPTHCONTROL_ZFUNC_MASK 0x00000070
+#define RB_DEPTHCONTROL_ZFUNC(depth_func) \
+ (((depth_func) << 4) & RB_DEPTHCONTROL_ZFUNC_MASK)
+#define RB_DEPTHCONTROL_BACKFACE_ENABLE 0x00000080
+#define RB_DEPTHCONTROL_STENCILFUNC_MASK 0x00000700
+#define RB_DEPTHCONTROL_STENCILFUNC(depth_func) \
+ (((depth_func) << 8) & RB_DEPTHCONTROL_STENCILFUNC_MASK)
+enum rb_stencil_op {
+ STENCIL_KEEP = 0,
+ STENCIL_ZERO = 1,
+ STENCIL_REPLACE = 2,
+ STENCIL_INCR_CLAMP = 3,
+ STENCIL_DECR_CLAMP = 4,
+ STENCIL_INVERT = 5,
+ STENCIL_INCR_WRAP = 6,
+ STENCIL_DECR_WRAP = 7
+};
+#define RB_DEPTHCONTROL_STENCILFAIL_MASK 0x00003800
+static inline uint32_t RB_DEPTHCONTROL_STENCILFAIL(enum rb_stencil_op val)
+{
+ return (val << 11) & RB_DEPTHCONTROL_STENCILFAIL_MASK;
+}
+#define RB_DEPTHCONTROL_STENCILZPASS_MASK 0x0001c000
+static inline uint32_t RB_DEPTHCONTROL_STENCILZPASS(enum rb_stencil_op val)
+{
+ return (val << 14) & RB_DEPTHCONTROL_STENCILZPASS_MASK;
+}
+#define RB_DEPTHCONTROL_STENCILZFAIL_MASK 0x000e0000
+static inline uint32_t RB_DEPTHCONTROL_STENCILZFAIL(enum rb_stencil_op val)
+{
+ return (val << 17) & RB_DEPTHCONTROL_STENCILZFAIL_MASK;
+}
+#define RB_DEPTHCONTROL_STENCILFUNC_BF_MASK 0x00700000
+#define RB_DEPTHCONTROL_STENCILFUNC_BF(depth_func) \
+ (((depth_func) << 20) & RB_DEPTHCONTROL_STENCILFUNC_BF_MASK)
+#define RB_DEPTHCONTROL_STENCILFAIL_BF_MASK 0x03800000
+static inline uint32_t RB_DEPTHCONTROL_STENCILFAIL_BF(enum rb_stencil_op val)
+{
+ return (val << 23) & RB_DEPTHCONTROL_STENCILFAIL_BF_MASK;
+}
+#define RB_DEPTHCONTROL_STENCILZPASS_BF_MASK 0x1c000000
+static inline uint32_t RB_DEPTHCONTROL_STENCILZPASS_BF(enum rb_stencil_op val)
+{
+ return (val << 26) & RB_DEPTHCONTROL_STENCILZPASS_BF_MASK;
+}
+#define RB_DEPTHCONTROL_STENCILZFAIL_BF_MASK 0xe0000000
+static inline uint32_t RB_DEPTHCONTROL_STENCILZFAIL_BF(enum rb_stencil_op val)
+{
+ return (val << 29) & RB_DEPTHCONTROL_STENCILZFAIL_BF_MASK;
+}
+
+
+/*
+ * Bits for RB_COPY_DEST_INFO:
+ */
+
+enum rb_surface_endian {
+ ENDIAN_NONE = 0,
+ ENDIAN_8IN16 = 1,
+ ENDIAN_8IN32 = 2,
+ ENDIAN_16IN32 = 3,
+ ENDIAN_8IN64 = 4,
+ ENDIAN_8IN128 = 5,
+};
+static inline uint32_t RB_COPY_DEST_INFO_DEST_ENDIAN(enum rb_surface_endian val)
+{
+ return (val & 0x7) << 0;
+}
+#define RB_COPY_DEST_INFO_LINEAR 0x00000008
+static inline uint32_t RB_COPY_DEST_INFO_FORMAT(enum rb_colorformatx val)
+{
+ return val << 4;
+}
+#define RB_COPY_DEST_INFO_SWAP(val) (((val) & 0x3) << 8) /* maybe VGT_DMA_SWAP_MODE? */
+enum rb_dither_mode {
+ DITHER_DISABLE = 0,
+ DITHER_ALWAYS = 1,
+ DITHER_IF_ALPHA_OFF = 2,
+};
+static inline uint32_t RB_COPY_DEST_INFO_DITHER_MODE(enum rb_dither_mode val)
+{
+ return val << 10;
+}
+enum rb_dither_type {
+ DITHER_PIXEL = 0,
+ DITHER_SUBPIXEL = 1,
+};
+static inline uint32_t RB_COPY_DEST_INFO_DITHER_TYPE(enum rb_dither_type val)
+{
+ return val << 12;
+}
+#define RB_COPY_DEST_INFO_WRITE_RED 0x00004000
+#define RB_COPY_DEST_INFO_WRITE_GREEN 0x00008000
+#define RB_COPY_DEST_INFO_WRITE_BLUE 0x00010000
+#define RB_COPY_DEST_INFO_WRITE_ALPHA 0x00020000
+
+
+/*
+ * Bits for RB_COPY_DEST_OFFSET:
+ */
+
+#define RB_COPY_DEST_OFFSET_X(val) ((val) & 0x3fff)
+#define RB_COPY_DEST_OFFSET_Y(val) (((val) & 0x3fff) << 13)
+
+
+/*
+ * Bits for RB_COPY_CONTROL:
+ */
+
+#define RB_COPY_CONTROL_DEPTH_CLEAR_ENABLE 0x00000008L
+#define RB_COPY_CONTROL_CLEAR_MASK(val) ((val & 0xf) << 4)
+
+
+/*
+ * Bits for RB_COLORCONTROL:
+ */
+
+#define RB_COLORCONTROL_ALPHA_FUNC(val) ((val) & 0x7)
+#define RB_COLORCONTROL_ALPHA_TEST_ENABLE 0x00000008
+#define RB_COLORCONTROL_ALPHA_TO_MASK_ENABLE 0x00000010
+#define RB_COLORCONTROL_BLEND_DISABLE 0x00000020
+#define RB_COLORCONTROL_FOG_ENABLE 0x00000040
+#define RB_COLORCONTROL_VS_EXPORTS_FOG 0x00000080
+#define RB_COLORCONTROL_ROP_CODE(val) (((val) & 0xf) << 8)
+static inline uint32_t RB_COLORCONTROL_DITHER_MODE(enum rb_dither_mode val)
+{
+ return (val & 0x3) << 12;
+}
+static inline uint32_t RB_COLORCONTROL_DITHER_TYPE(enum rb_dither_type val)
+{
+ return (val & 0x3) << 14;
+}
+#define RB_COLORCONTROL_PIXEL_FOG 0x00010000
+#define RB_COLORCONTROL_ALPHA_TO_MASK_OFFSET0(val) (((val) & 0x3) << 24)
+#define RB_COLORCONTROL_ALPHA_TO_MASK_OFFSET1(val) (((val) & 0x3) << 26)
+#define RB_COLORCONTROL_ALPHA_TO_MASK_OFFSET2(val) (((val) & 0x3) << 28)
+#define RB_COLORCONTROL_ALPHA_TO_MASK_OFFSET3(val) (((val) & 0x3) << 30)
+
+
+/*
+ * Bits for RB_DEPTH_INFO:
+ */
+
+enum rb_depth_format {
+ DEPTHX_16 = 0,
+ DEPTHX_24_8 = 1,
+ DEPTHX_INVALID,
+};
+
+static inline uint32_t RB_DEPTH_INFO_DEPTH_FORMAT(enum rb_depth_format val)
+{
+ return val & 0x1;
+}
+#define RB_DEPTH_INFO_DEPTH_BASE(val) ((val) << 12)
+
+
+/*
+ * Bits for RB_STENCILREFMASK (RB_STENCILREFMASK_BF is same):
+ */
+
+#define RB_STENCILREFMASK_STENCILREF_MASK 0x000000ff
+#define RB_STENCILREFMASK_STENCILREF(val) ((val) & RB_STENCILREFMASK_STENCILREF_MASK)
+#define RB_STENCILREFMASK_STENCILMASK_MASK 0x0000ff00
+#define RB_STENCILREFMASK_STENCILMASK(val) (((val) << 8) & RB_STENCILREFMASK_STENCILMASK_MASK)
+#define RB_STENCILREFMASK_STENCILWRITEMASK_MASK 0x00ff0000
+#define RB_STENCILREFMASK_STENCILWRITEMASK(val) (((val) << 16) & RB_STENCILREFMASK_STENCILWRITEMASK_MASK)
+
+
+/*
+ * Bits for RB_BC_CONTROL:
+ */
+
+#define RB_BC_CONTROL_ACCUM_LINEAR_MODE_ENABLE 0x00000001
+#define RB_BC_CONTROL_ACCUM_TIMEOUT_SELECT(val) (((val) & 0x3) << 1)
+#define RB_BC_CONTROL_DISABLE_EDRAM_CAM 0x00000008
+#define RB_BC_CONTROL_DISABLE_EZ_FAST_CONTEXT_SWITCH 0x00000010
+#define RB_BC_CONTROL_DISABLE_EZ_NULL_ZCMD_DROP 0x00000020
+#define RB_BC_CONTROL_DISABLE_LZ_NULL_ZCMD_DROP 0x00000040
+#define RB_BC_CONTROL_ENABLE_AZ_THROTTLE 0x00000080
+#define RB_BC_CONTROL_AZ_THROTTLE_COUNT(val) (((val) & 0x1f) << 8)
+#define RB_BC_CONTROL_ENABLE_CRC_UPDATE 0x00004000
+#define RB_BC_CONTROL_CRC_MODE 0x00008000
+#define RB_BC_CONTROL_DISABLE_SAMPLE_COUNTERS 0x00010000
+#define RB_BC_CONTROL_DISABLE_ACCUM 0x00020000
+#define RB_BC_CONTROL_ACCUM_ALLOC_MASK(val) (((val) & 0xf) << 18)
+#define RB_BC_CONTROL_LINEAR_PERFORMANCE_ENABLE 0x00400000
+#define RB_BC_CONTROL_ACCUM_DATA_FIFO_LIMIT(val) (((val) & 0xf) << 23)
+#define RB_BC_CONTROL_MEM_EXPORT_TIMEOUT_SELECT(val) (((val) & 0x3) << 27)
+#define RB_BC_CONTROL_MEM_EXPORT_LINEAR_MODE_ENABLE 0x20000000
+#define RB_BC_CONTROL_CRC_SYSTEM 0x40000000
+#define RB_BC_CONTROL_RESERVED6 0x80000000
+
+
+/*
+ * Bits for RBBM_PM_OVERRIDE1:
+ */
+
+#define RBBM_PM_OVERRIDE1_RBBM_AHBCLK_PM_OVERRIDE 0x00000001
+#define RBBM_PM_OVERRIDE1_SC_REG_SCLK_PM_OVERRIDE 0x00000002
+#define RBBM_PM_OVERRIDE1_SC_SCLK_PM_OVERRIDE 0x00000004
+#define RBBM_PM_OVERRIDE1_SP_TOP_SCLK_PM_OVERRIDE 0x00000008
+#define RBBM_PM_OVERRIDE1_SP_V0_SCLK_PM_OVERRIDE 0x00000010
+#define RBBM_PM_OVERRIDE1_SQ_REG_SCLK_PM_OVERRIDE 0x00000020
+#define RBBM_PM_OVERRIDE1_SQ_REG_FIFOS_SCLK_PM_OVERRIDE 0x00000040
+#define RBBM_PM_OVERRIDE1_SQ_CONST_MEM_SCLK_PM_OVERRIDE 0x00000080
+#define RBBM_PM_OVERRIDE1_SQ_SQ_SCLK_PM_OVERRIDE 0x00000100
+#define RBBM_PM_OVERRIDE1_SX_SCLK_PM_OVERRIDE 0x00000200
+#define RBBM_PM_OVERRIDE1_SX_REG_SCLK_PM_OVERRIDE 0x00000400
+#define RBBM_PM_OVERRIDE1_TCM_TCO_SCLK_PM_OVERRIDE 0x00000800
+#define RBBM_PM_OVERRIDE1_TCM_TCM_SCLK_PM_OVERRIDE 0x00001000
+#define RBBM_PM_OVERRIDE1_TCM_TCD_SCLK_PM_OVERRIDE 0x00002000
+#define RBBM_PM_OVERRIDE1_TCM_REG_SCLK_PM_OVERRIDE 0x00004000
+#define RBBM_PM_OVERRIDE1_TPC_TPC_SCLK_PM_OVERRIDE 0x00008000
+#define RBBM_PM_OVERRIDE1_TPC_REG_SCLK_PM_OVERRIDE 0x00010000
+#define RBBM_PM_OVERRIDE1_TCF_TCA_SCLK_PM_OVERRIDE 0x00020000
+#define RBBM_PM_OVERRIDE1_TCF_TCB_SCLK_PM_OVERRIDE 0x00040000
+#define RBBM_PM_OVERRIDE1_TCF_TCB_READ_SCLK_PM_OVERRIDE 0x00080000
+#define RBBM_PM_OVERRIDE1_TP_TP_SCLK_PM_OVERRIDE 0x00100000
+#define RBBM_PM_OVERRIDE1_TP_REG_SCLK_PM_OVERRIDE 0x00200000
+#define RBBM_PM_OVERRIDE1_CP_G_SCLK_PM_OVERRIDE 0x00400000
+#define RBBM_PM_OVERRIDE1_CP_REG_SCLK_PM_OVERRIDE 0x00800000
+#define RBBM_PM_OVERRIDE1_CP_G_REG_SCLK_PM_OVERRIDE 0x01000000
+#define RBBM_PM_OVERRIDE1_SPI_SCLK_PM_OVERRIDE 0x02000000
+#define RBBM_PM_OVERRIDE1_RB_REG_SCLK_PM_OVERRIDE 0x04000000
+#define RBBM_PM_OVERRIDE1_RB_SCLK_PM_OVERRIDE 0x08000000
+#define RBBM_PM_OVERRIDE1_MH_MH_SCLK_PM_OVERRIDE 0x10000000
+#define RBBM_PM_OVERRIDE1_MH_REG_SCLK_PM_OVERRIDE 0x20000000
+#define RBBM_PM_OVERRIDE1_MH_MMU_SCLK_PM_OVERRIDE 0x40000000
+#define RBBM_PM_OVERRIDE1_MH_TCROQ_SCLK_PM_OVERRIDE 0x80000000
+
+
+/*
+ * Bits for RBBM_PM_OVERRIDE2:
+ */
+
+#define RBBM_PM_OVERRIDE2_PA_REG_SCLK_PM_OVERRIDE 0x00000001
+#define RBBM_PM_OVERRIDE2_PA_PA_SCLK_PM_OVERRIDE 0x00000002
+#define RBBM_PM_OVERRIDE2_PA_AG_SCLK_PM_OVERRIDE 0x00000004
+#define RBBM_PM_OVERRIDE2_VGT_REG_SCLK_PM_OVERRIDE 0x00000008
+#define RBBM_PM_OVERRIDE2_VGT_FIFOS_SCLK_PM_OVERRIDE 0x00000010
+#define RBBM_PM_OVERRIDE2_VGT_VGT_SCLK_PM_OVERRIDE 0x00000020
+#define RBBM_PM_OVERRIDE2_DEBUG_PERF_SCLK_PM_OVERRIDE 0x00000040
+#define RBBM_PM_OVERRIDE2_PERM_SCLK_PM_OVERRIDE 0x00000080
+#define RBBM_PM_OVERRIDE2_GC_GA_GMEM0_PM_OVERRIDE 0x00000100
+#define RBBM_PM_OVERRIDE2_GC_GA_GMEM1_PM_OVERRIDE 0x00000200
+#define RBBM_PM_OVERRIDE2_GC_GA_GMEM2_PM_OVERRIDE 0x00000400
+#define RBBM_PM_OVERRIDE2_GC_GA_GMEM3_PM_OVERRIDE 0x00000800
+
+
+/*
+ * Bits for TC_CNTL_STATUS:
+ */
+
+#define TC_CNTL_STATUS_L2_INVALIDATE 0x00000001
+
+
+#endif /* FREEDRENO_A2XX_REG_H_ */