29
29
* Keith Whitwell <keith@tungstengraphics.com>
32
#define INTEL_MASK(high, low) (((1<<((high)-(low)+1))-1)<<(low))
33
#define SET_FIELD(value, field) (((value) << field ## _SHIFT) & field ## _MASK)
34
#define GET_FIELD(word, field) (((word) & field ## _MASK) >> field ## _SHIFT)
33
36
#ifndef BRW_DEFINES_H
34
37
#define BRW_DEFINES_H
38
#define _3DOP_3DSTATE_PIPELINED 0x0
39
#define _3DOP_3DSTATE_NONPIPELINED 0x1
40
#define _3DOP_3DCONTROL 0x2
41
#define _3DOP_3DPRIMITIVE 0x3
43
#define _3DSTATE_PIPELINED_POINTERS 0x00
44
#define _3DSTATE_BINDING_TABLE_POINTERS 0x01
45
#define _3DSTATE_VERTEX_BUFFERS 0x08
46
#define _3DSTATE_VERTEX_ELEMENTS 0x09
47
#define _3DSTATE_INDEX_BUFFER 0x0A
48
#define _3DSTATE_VF_STATISTICS 0x0B
49
#define _3DSTATE_DRAWING_RECTANGLE 0x00
50
#define _3DSTATE_CONSTANT_COLOR 0x01
51
#define _3DSTATE_SAMPLER_PALETTE_LOAD 0x02
52
#define _3DSTATE_CHROMA_KEY 0x04
53
#define _3DSTATE_DEPTH_BUFFER 0x05
54
#define _3DSTATE_POLY_STIPPLE_OFFSET 0x06
55
#define _3DSTATE_POLY_STIPPLE_PATTERN 0x07
56
#define _3DSTATE_LINE_STIPPLE 0x08
57
#define _3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP 0x09
58
#define _3DCONTROL 0x00
60
41
#define PIPE_CONTROL_NOWRITE 0x00
61
42
#define PIPE_CONTROL_WRITEIMMEDIATE 0x01
62
43
#define PIPE_CONTROL_WRITEDEPTH 0x02
428
430
#define BRW_SURFACE_BUFFER 4
429
431
#define BRW_SURFACE_NULL 7
433
/* Surface state DW2 */
434
#define BRW_SURFACE_HEIGHT_SHIFT 19
435
#define BRW_SURFACE_HEIGHT_MASK INTEL_MASK(31, 19)
436
#define BRW_SURFACE_WIDTH_SHIFT 6
437
#define BRW_SURFACE_WIDTH_MASK INTEL_MASK(18, 6)
438
#define BRW_SURFACE_LOD_SHIFT 2
439
#define BRW_SURFACE_LOD_MASK INTEL_MASK(5, 2)
441
/* Surface state DW3 */
442
#define BRW_SURFACE_DEPTH_SHIFT 21
443
#define BRW_SURFACE_DEPTH_MASK INTEL_MASK(31, 21)
444
#define BRW_SURFACE_PITCH_SHIFT 3
445
#define BRW_SURFACE_PITCH_MASK INTEL_MASK(19, 3)
446
#define BRW_SURFACE_TILED (1 << 1)
447
#define BRW_SURFACE_TILED_Y (1 << 0)
449
/* Surface state DW4 */
450
#define BRW_SURFACE_MIN_LOD_SHIFT 28
451
#define BRW_SURFACE_MIN_LOD_MASK INTEL_MASK(31, 28)
453
/* Surface state DW5 */
454
#define BRW_SURFACE_X_OFFSET_SHIFT 25
455
#define BRW_SURFACE_X_OFFSET_MASK INTEL_MASK(31, 25)
456
#define BRW_SURFACE_Y_OFFSET_SHIFT 20
457
#define BRW_SURFACE_Y_OFFSET_MASK INTEL_MASK(23, 20)
431
459
#define BRW_TEXCOORDMODE_WRAP 0
432
460
#define BRW_TEXCOORDMODE_MIRROR 1
433
461
#define BRW_TEXCOORDMODE_CLAMP 2
765
798
#define BRW_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE 0
766
799
#define BRW_DATAPORT_WRITE_MESSAGE_OWORD_DUAL_BLOCK_WRITE 1
767
#define BRW_DATAPORT_WRITE_MESSAGE_DWORD_BLOCK_WRITE 2
800
#define BRW_DATAPORT_WRITE_MESSAGE_MEDIA_BLOCK_WRITE 2
768
801
#define BRW_DATAPORT_WRITE_MESSAGE_DWORD_SCATTERED_WRITE 3
769
802
#define BRW_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE 4
770
803
#define BRW_DATAPORT_WRITE_MESSAGE_STREAMED_VERTEX_BUFFER_WRITE 5
771
804
#define BRW_DATAPORT_WRITE_MESSAGE_FLUSH_RENDER_CACHE 7
774
#define BRW_DATAPORT_WRITE_MESSAGE_DWORD_ATOMIC_WRITE_GEN6 7
775
#define BRW_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE_GEN6 8
776
#define BRW_DATAPORT_WRITE_MESSAGE_OWORD_DUAL_BLOCK_WRITE_GEN6 9
777
#define BRW_DATAPORT_WRITE_MESSAGE_MEDIA_BLOCK_WRITE_GEN6 10
778
#define BRW_DATAPORT_WRITE_MESSAGE_DWORLD_SCATTERED_WRITE_GEN6 11
779
#define BRW_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE_GEN6 12
780
#define BRW_DATAPORT_WRITE_MESSAGE_STREAMED_VB_WRITE_GEN6 13
781
#define BRW_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_UNORM_WRITE_GEN6 14
807
#define GEN6_DATAPORT_WRITE_MESSAGE_DWORD_ATOMIC_WRITE 7
808
#define GEN6_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE 8
809
#define GEN6_DATAPORT_WRITE_MESSAGE_OWORD_DUAL_BLOCK_WRITE 9
810
#define GEN6_DATAPORT_WRITE_MESSAGE_MEDIA_BLOCK_WRITE 10
811
#define GEN6_DATAPORT_WRITE_MESSAGE_DWORD_SCATTERED_WRITE 11
812
#define GEN6_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE 12
813
#define GEN6_DATAPORT_WRITE_MESSAGE_STREAMED_VB_WRITE 13
814
#define GEN6_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_UNORM_WRITE 14
783
816
#define BRW_MATH_FUNCTION_INV 1
784
817
#define BRW_MATH_FUNCTION_LOG 2
838
871
#define CMD_PIPELINE_SELECT_965 0x6104
839
872
#define CMD_PIPELINE_SELECT_GM45 0x6904
841
#define CMD_PIPELINED_STATE_POINTERS 0x7800
842
#define CMD_BINDING_TABLE_PTRS 0x7801
874
#define _3DSTATE_PIPELINED_POINTERS 0x7800
875
#define _3DSTATE_BINDING_TABLE_POINTERS 0x7801
843
876
# define GEN6_BINDING_TABLE_MODIFY_VS (1 << 8)
844
877
# define GEN6_BINDING_TABLE_MODIFY_GS (1 << 9)
845
878
# define GEN6_BINDING_TABLE_MODIFY_PS (1 << 12)
847
#define CMD_3D_SAMPLER_STATE_POINTERS 0x7802 /* SNB+ */
880
#define _3DSTATE_BINDING_TABLE_POINTERS_VS 0x7826 /* GEN7+ */
881
#define _3DSTATE_BINDING_TABLE_POINTERS_HS 0x7827 /* GEN7+ */
882
#define _3DSTATE_BINDING_TABLE_POINTERS_DS 0x7828 /* GEN7+ */
883
#define _3DSTATE_BINDING_TABLE_POINTERS_GS 0x7829 /* GEN7+ */
884
#define _3DSTATE_BINDING_TABLE_POINTERS_PS 0x782A /* GEN7+ */
886
#define _3DSTATE_SAMPLER_STATE_POINTERS 0x7802 /* GEN6+ */
848
887
# define PS_SAMPLER_STATE_CHANGE (1 << 12)
849
888
# define GS_SAMPLER_STATE_CHANGE (1 << 9)
850
889
# define VS_SAMPLER_STATE_CHANGE (1 << 8)
885
929
#define CMD_INDEX_BUFFER 0x780a
886
930
#define CMD_VF_STATISTICS_965 0x780b
887
931
#define CMD_VF_STATISTICS_GM45 0x680b
888
#define CMD_3D_CC_STATE_POINTERS 0x780e /* GEN6+ */
932
#define _3DSTATE_CC_STATE_POINTERS 0x780e /* GEN6+ */
933
#define _3DSTATE_BLEND_STATE_POINTERS 0x7824 /* GEN7+ */
934
#define _3DSTATE_DEPTH_STENCIL_STATE_POINTERS 0x7825 /* GEN7+ */
890
#define CMD_URB 0x7805 /* GEN6+ */
936
#define _3DSTATE_URB 0x7805 /* GEN6 */
891
937
# define GEN6_URB_VS_SIZE_SHIFT 16
892
938
# define GEN6_URB_VS_ENTRIES_SHIFT 0
893
939
# define GEN6_URB_GS_ENTRIES_SHIFT 8
894
940
# define GEN6_URB_GS_SIZE_SHIFT 0
896
#define CMD_VIEWPORT_STATE_POINTERS 0x780d /* GEN6+ */
942
#define _3DSTATE_URB_VS 0x7830 /* GEN7+ */
943
#define _3DSTATE_URB_HS 0x7831 /* GEN7+ */
944
#define _3DSTATE_URB_DS 0x7832 /* GEN7+ */
945
#define _3DSTATE_URB_GS 0x7833 /* GEN7+ */
946
# define GEN7_URB_ENTRY_SIZE_SHIFT 16
947
# define GEN7_URB_STARTING_ADDRESS_SHIFT 25
949
#define _3DSTATE_PUSH_CONSTANT_ALLOC_VS 0x7912 /* GEN7+ */
950
#define _3DSTATE_PUSH_CONSTANT_ALLOC_PS 0x7916 /* GEN7+ */
951
# define GEN7_PUSH_CONSTANT_BUFFER_OFFSET_SHIFT 16
953
#define _3DSTATE_VIEWPORT_STATE_POINTERS 0x780d /* GEN6+ */
897
954
# define GEN6_CC_VIEWPORT_MODIFY (1 << 12)
898
955
# define GEN6_SF_VIEWPORT_MODIFY (1 << 11)
899
956
# define GEN6_CLIP_VIEWPORT_MODIFY (1 << 10)
901
#define CMD_3D_SCISSOR_STATE_POINTERS 0x780f /* GEN6+ */
903
#define CMD_3D_VS_STATE 0x7810 /* GEN6+ */
958
#define _3DSTATE_VIEWPORT_STATE_POINTERS_CC 0x7823 /* GEN7+ */
959
#define _3DSTATE_VIEWPORT_STATE_POINTERS_SF_CL 0x7821 /* GEN7+ */
961
#define _3DSTATE_SCISSOR_STATE_POINTERS 0x780f /* GEN6+ */
963
#define _3DSTATE_VS 0x7810 /* GEN6+ */
905
965
# define GEN6_VS_SPF_MODE (1 << 31)
906
966
# define GEN6_VS_VECTOR_MASK_ENABLE (1 << 30)
933
994
# define GEN6_GS_STATISTICS_ENABLE (1 << 10)
934
995
# define GEN6_GS_SO_STATISTICS_ENABLE (1 << 9)
935
996
# define GEN6_GS_RENDERING_ENABLE (1 << 8)
997
# define GEN7_GS_ENABLE (1 << 0)
937
999
# define GEN6_GS_ENABLE (1 << 15)
939
#define CMD_3D_CLIP_STATE 0x7812 /* GEN6+ */
1001
#define _3DSTATE_HS 0x781B /* GEN7+ */
1002
#define _3DSTATE_TE 0x781C /* GEN7+ */
1003
#define _3DSTATE_DS 0x781D /* GEN7+ */
1005
#define _3DSTATE_CLIP 0x7812 /* GEN6+ */
1007
# define GEN7_CLIP_WINDING_CW (0 << 20)
1008
# define GEN7_CLIP_WINDING_CCW (1 << 20)
1009
# define GEN7_CLIP_VERTEX_SUBPIXEL_PRECISION_8 (0 << 19)
1010
# define GEN7_CLIP_VERTEX_SUBPIXEL_PRECISION_4 (1 << 19)
1011
# define GEN7_CLIP_EARLY_CULL (1 << 18)
1012
# define GEN7_CLIP_CULLMODE_BOTH (0 << 16)
1013
# define GEN7_CLIP_CULLMODE_NONE (1 << 16)
1014
# define GEN7_CLIP_CULLMODE_FRONT (2 << 16)
1015
# define GEN7_CLIP_CULLMODE_BACK (3 << 16)
941
1016
# define GEN6_CLIP_STATISTICS_ENABLE (1 << 10)
943
1018
* Just does cheap culling based on the clip distance. Bits must be
1043
1118
/* DW18: attr 0-7 wrap shortest enables */
1044
1119
/* DW19: attr 8-16 wrap shortest enables */
1046
#define CMD_3D_WM_STATE 0x7814 /* GEN6+ */
1121
/* On GEN7, many fields of 3DSTATE_SF were split out into a new command:
1122
* 3DSTATE_SBE. The remaining fields live in different DWords, but retain
1123
* the same bit-offset. The only new field:
1126
# define GEN7_SF_DEPTH_BUFFER_SURFACE_FORMAT_SHIFT 12
1128
#define _3DSTATE_SBE 0x781F /* GEN7+ */
1130
# define GEN7_SBE_SWIZZLE_CONTROL_MODE (1 << 28)
1131
# define GEN7_SBE_NUM_OUTPUTS_SHIFT 22
1132
# define GEN7_SBE_SWIZZLE_ENABLE (1 << 21)
1133
# define GEN7_SBE_POINT_SPRITE_LOWERLEFT (1 << 20)
1134
# define GEN7_SBE_URB_ENTRY_READ_LENGTH_SHIFT 11
1135
# define GEN7_SBE_URB_ENTRY_READ_OFFSET_SHIFT 4
1136
/* DW2-9: Attribute setup (same as DW8-15 of gen6 _3DSTATE_SF) */
1137
/* DW10: Point sprite texture coordinate enables */
1138
/* DW11: Constant interpolation enables */
1139
/* DW12: attr 0-7 wrap shortest enables */
1140
/* DW13: attr 8-16 wrap shortest enables */
1142
#define _3DSTATE_WM 0x7814 /* GEN6+ */
1047
1143
/* DW1: kernel pointer */
1049
1145
# define GEN6_WM_SPF_MODE (1 << 31)
1106
1202
/* DW7: kernel 1 pointer */
1107
1203
/* DW8: kernel 2 pointer */
1109
#define CMD_3D_CONSTANT_VS_STATE 0x7815 /* GEN6+ */
1110
#define CMD_3D_CONSTANT_GS_STATE 0x7816 /* GEN6+ */
1111
#define CMD_3D_CONSTANT_PS_STATE 0x7817 /* GEN6+ */
1205
#define _3DSTATE_CONSTANT_VS 0x7815 /* GEN6+ */
1206
#define _3DSTATE_CONSTANT_GS 0x7816 /* GEN6+ */
1207
#define _3DSTATE_CONSTANT_PS 0x7817 /* GEN6+ */
1112
1208
# define GEN6_CONSTANT_BUFFER_3_ENABLE (1 << 15)
1113
1209
# define GEN6_CONSTANT_BUFFER_2_ENABLE (1 << 14)
1114
1210
# define GEN6_CONSTANT_BUFFER_1_ENABLE (1 << 13)
1115
1211
# define GEN6_CONSTANT_BUFFER_0_ENABLE (1 << 12)
1117
#define CMD_3D_SAMPLE_MASK 0x7818 /* GEN6+ */
1119
#define CMD_DRAW_RECT 0x7900
1120
#define CMD_BLEND_CONSTANT_COLOR 0x7901
1121
#define CMD_CHROMA_KEY 0x7904
1122
#define CMD_DEPTH_BUFFER 0x7905
1123
#define CMD_POLY_STIPPLE_OFFSET 0x7906
1124
#define CMD_POLY_STIPPLE_PATTERN 0x7907
1125
#define CMD_LINE_STIPPLE_PATTERN 0x7908
1126
#define CMD_GLOBAL_DEPTH_OFFSET_CLAMP 0x7909
1127
#define CMD_AA_LINE_PARAMETERS 0x790a
1129
#define CMD_GS_SVB_INDEX 0x790b /* CTG+ */
1213
#define _3DSTATE_CONSTANT_HS 0x7819 /* GEN7+ */
1214
#define _3DSTATE_CONSTANT_DS 0x781A /* GEN7+ */
1216
/* 3DSTATE_WM for Gen7 */
1218
# define GEN7_WM_STATISTICS_ENABLE (1 << 31)
1219
# define GEN7_WM_DEPTH_CLEAR (1 << 30)
1220
# define GEN7_WM_DISPATCH_ENABLE (1 << 29)
1221
# define GEN6_WM_DEPTH_RESOLVE (1 << 28)
1222
# define GEN7_WM_HIERARCHICAL_DEPTH_RESOLVE (1 << 27)
1223
# define GEN7_WM_KILL_ENABLE (1 << 25)
1224
# define GEN7_WM_PSCDEPTH_OFF (0 << 23)
1225
# define GEN7_WM_PSCDEPTH_ON (1 << 23)
1226
# define GEN7_WM_PSCDEPTH_ON_GE (2 << 23)
1227
# define GEN7_WM_PSCDEPTH_ON_LE (3 << 23)
1228
# define GEN7_WM_USES_SOURCE_DEPTH (1 << 20)
1229
# define GEN7_WM_USES_SOURCE_W (1 << 19)
1230
# define GEN7_WM_POSITION_ZW_PIXEL (0 << 17)
1231
# define GEN7_WM_POSITION_ZW_CENTROID (2 << 17)
1232
# define GEN7_WM_POSITION_ZW_SAMPLE (3 << 17)
1233
# define GEN7_WM_NONPERSPECTIVE_SAMPLE_BARYCENTRIC (1 << 16)
1234
# define GEN7_WM_NONPERSPECTIVE_CENTROID_BARYCENTRIC (1 << 15)
1235
# define GEN7_WM_NONPERSPECTIVE_PIXEL_BARYCENTRIC (1 << 14)
1236
# define GEN7_WM_PERSPECTIVE_SAMPLE_BARYCENTRIC (1 << 13)
1237
# define GEN7_WM_PERSPECTIVE_CENTROID_BARYCENTRIC (1 << 12)
1238
# define GEN7_WM_PERSPECTIVE_PIXEL_BARYCENTRIC (1 << 11)
1239
# define GEN7_WM_USES_INPUT_COVERAGE_MASK (1 << 10)
1240
# define GEN7_WM_LINE_END_CAP_AA_WIDTH_0_5 (0 << 8)
1241
# define GEN7_WM_LINE_END_CAP_AA_WIDTH_1_0 (1 << 8)
1242
# define GEN7_WM_LINE_END_CAP_AA_WIDTH_2_0 (2 << 8)
1243
# define GEN7_WM_LINE_END_CAP_AA_WIDTH_4_0 (3 << 8)
1244
# define GEN7_WM_LINE_AA_WIDTH_0_5 (0 << 6)
1245
# define GEN7_WM_LINE_AA_WIDTH_1_0 (1 << 6)
1246
# define GEN7_WM_LINE_AA_WIDTH_2_0 (2 << 6)
1247
# define GEN7_WM_LINE_AA_WIDTH_4_0 (3 << 6)
1248
# define GEN7_WM_POLYGON_STIPPLE_ENABLE (1 << 4)
1249
# define GEN7_WM_LINE_STIPPLE_ENABLE (1 << 3)
1250
# define GEN7_WM_POINT_RASTRULE_UPPER_RIGHT (1 << 2)
1251
# define GEN7_WM_MSRAST_OFF_PIXEL (0 << 0)
1252
# define GEN7_WM_MSRAST_OFF_PATTERN (1 << 0)
1253
# define GEN7_WM_MSRAST_ON_PIXEL (2 << 0)
1254
# define GEN7_WM_MSRAST_ON_PATTERN (3 << 0)
1256
# define GEN7_WM_MSDISPMODE_PERPIXEL (1 << 31)
1258
#define _3DSTATE_PS 0x7820 /* GEN7+ */
1259
/* DW1: kernel pointer */
1261
# define GEN7_PS_SPF_MODE (1 << 31)
1262
# define GEN7_PS_VECTOR_MASK_ENABLE (1 << 30)
1263
# define GEN7_PS_SAMPLER_COUNT_SHIFT 27
1264
# define GEN7_PS_BINDING_TABLE_ENTRY_COUNT_SHIFT 18
1265
# define GEN7_PS_FLOATING_POINT_MODE_IEEE_754 (0 << 16)
1266
# define GEN7_PS_FLOATING_POINT_MODE_ALT (1 << 16)
1267
/* DW3: scratch space */
1269
# define GEN7_PS_MAX_THREADS_SHIFT 23
1270
# define GEN7_PS_PUSH_CONSTANT_ENABLE (1 << 11)
1271
# define GEN7_PS_ATTRIBUTE_ENABLE (1 << 10)
1272
# define GEN7_PS_OMASK_TO_RENDER_TARGET (1 << 9)
1273
# define GEN7_PS_DUAL_SOURCE_BLEND_ENABLE (1 << 7)
1274
# define GEN7_PS_POSOFFSET_NONE (0 << 3)
1275
# define GEN7_PS_POSOFFSET_CENTROID (2 << 3)
1276
# define GEN7_PS_POSOFFSET_SAMPLE (3 << 3)
1277
# define GEN7_PS_32_DISPATCH_ENABLE (1 << 2)
1278
# define GEN7_PS_16_DISPATCH_ENABLE (1 << 1)
1279
# define GEN7_PS_8_DISPATCH_ENABLE (1 << 0)
1281
# define GEN7_PS_DISPATCH_START_GRF_SHIFT_0 16
1282
# define GEN7_PS_DISPATCH_START_GRF_SHIFT_1 8
1283
# define GEN7_PS_DISPATCH_START_GRF_SHIFT_2 0
1284
/* DW6: kernel 1 pointer */
1285
/* DW7: kernel 2 pointer */
1287
#define _3DSTATE_STREAMOUT 0x781e /* GEN7+ */
1289
#define _3DSTATE_SAMPLE_MASK 0x7818 /* GEN6+ */
1291
#define _3DSTATE_DRAWING_RECTANGLE 0x7900
1292
#define _3DSTATE_BLEND_CONSTANT_COLOR 0x7901
1293
#define _3DSTATE_CHROMA_KEY 0x7904
1294
#define _3DSTATE_DEPTH_BUFFER 0x7905 /* GEN4-6 */
1295
#define _3DSTATE_POLY_STIPPLE_OFFSET 0x7906
1296
#define _3DSTATE_POLY_STIPPLE_PATTERN 0x7907
1297
#define _3DSTATE_LINE_STIPPLE_PATTERN 0x7908
1298
#define _3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP 0x7909
1299
#define _3DSTATE_AA_LINE_PARAMETERS 0x790a /* G45+ */
1301
#define _3DSTATE_GS_SVB_INDEX 0x790b /* CTG+ */
1131
1303
# define SVB_INDEX_SHIFT 29
1132
1304
# define SVB_LOAD_INTERNAL_VERTEX_COUNT (1 << 0) /* SNB+ */
1133
1305
/* DW2: SVB index */
1134
1306
/* DW3: SVB maximum index */
1136
#define CMD_3D_MULTISAMPLE 0x790d /* SNB+ */
1308
#define _3DSTATE_MULTISAMPLE 0x790d /* GEN6+ */
1138
1310
# define MS_PIXEL_LOCATION_CENTER (0 << 4)
1139
1311
# define MS_PIXEL_LOCATION_UPPER_LEFT (1 << 4)