swr/rast: Enable simd16 vertex shaders
[mesa.git] / src / gallium / drivers / swr / rasterizer / core / knobs.h
index 2629276ed59c459a7a7cca1684291adf14f8e1f8..657c2eed76ee96f62abb284d335ffccc08315672 100644 (file)
 #define KNOB_ARCH_AVX2   1
 #define KNOB_ARCH_AVX512 2
 
+///////////////////////////////////////////////////////////////////////////////
+// AVX512 Support
+///////////////////////////////////////////////////////////////////////////////
+
+#define ENABLE_AVX512_SIMD16    1
+#define USE_8x2_TILE_BACKEND    1
+#define USE_SIMD16_FRONTEND     1
+#define USE_SIMD16_SHADERS      1   // requires USE_SIMD16_FRONTEND
+#define USE_SIMD16_VS           1   // requires USE_SIMD16_SHADERS
+
 ///////////////////////////////////////////////////////////////////////////////
 // Architecture validation
 ///////////////////////////////////////////////////////////////////////////////
 #define KNOB_SIMD_WIDTH 8
 #define KNOB_SIMD_BYTES 32
 #elif (KNOB_ARCH == KNOB_ARCH_AVX512)
-#define KNOB_ARCH_ISA AVX2
-#define KNOB_ARCH_STR "AVX2"
+#define KNOB_ARCH_ISA AVX512F
+#define KNOB_ARCH_STR "AVX512"
 #define KNOB_SIMD_WIDTH 8
 #define KNOB_SIMD_BYTES 32
-// Disable AVX512 for now...
-//#define KNOB_ARCH_ISA AVX512F
-//#define KNOB_ARCH_STR "AVX512"
-//#define KNOB_SIMD_WIDTH 16
-//#define KNOB_SIMD_BYTES 64
-//#error "AVX512 not yet supported"
 #else
 #error "Unknown architecture"
 #endif
 
+#if ENABLE_AVX512_SIMD16
+
+#define KNOB_SIMD16_WIDTH 16
+#define KNOB_SIMD16_BYTES 64
+
+#if (KNOB_ARCH == KNOB_ARCH_AVX512)
+#define ENABLE_AVX512_EMULATION 0
+#else
+#define ENABLE_AVX512_EMULATION 1
+#endif
+
+#endif
+
 #define MAX_KNOB_ARCH_STR_LEN sizeof("AVX512_PLUS_PADDING")
 
 ///////////////////////////////////////////////////////////////////////////////
 // Configuration knobs
 ///////////////////////////////////////////////////////////////////////////////
-#define KNOB_MAX_NUM_THREADS                256 // Supports up to dual-HSW-Xeon.
-
 // Maximum supported number of active vertex buffer streams
 #define KNOB_NUM_STREAMS                    32
 
-// Maximum supported number of attributes per vertex
-#define KNOB_NUM_ATTRIBUTES                 38
-
 // Maximum supported active viewports and scissors
 #define KNOB_NUM_VIEWPORTS_SCISSORS         16
 
 
 // fixed macrotile pixel dimension for now, eventually will be 
 // dynamically set based on tile format and pixel size
-#define KNOB_MACROTILE_X_DIM                64
-#define KNOB_MACROTILE_Y_DIM                64
+#define KNOB_MACROTILE_X_DIM                32
+#define KNOB_MACROTILE_Y_DIM                32
+#define KNOB_MACROTILE_X_DIM_FIXED_SHIFT    13
+#define KNOB_MACROTILE_Y_DIM_FIXED_SHIFT    13
 #define KNOB_MACROTILE_X_DIM_FIXED          (KNOB_MACROTILE_X_DIM << 8)
 #define KNOB_MACROTILE_Y_DIM_FIXED          (KNOB_MACROTILE_Y_DIM << 8)
-#define KNOB_MACROTILE_X_DIM_FIXED_SHIFT    14
-#define KNOB_MACROTILE_Y_DIM_FIXED_SHIFT    14
 #define KNOB_MACROTILE_X_DIM_IN_TILES       (KNOB_MACROTILE_X_DIM >> KNOB_TILE_X_DIM_SHIFT)
 #define KNOB_MACROTILE_Y_DIM_IN_TILES       (KNOB_MACROTILE_Y_DIM >> KNOB_TILE_Y_DIM_SHIFT)
 
 #error "incompatible width/tile dimensions"
 #endif
 
+#if ENABLE_AVX512_SIMD16
+#if KNOB_SIMD16_WIDTH == 16 && KNOB_TILE_X_DIM < 8
+#error "incompatible width/tile dimensions"
+#endif
+#endif
+
 #if KNOB_SIMD_WIDTH == 8
 #define SIMD_TILE_X_DIM 4
 #define SIMD_TILE_Y_DIM 2
 #error "Invalid simd width"
 #endif
 
+#if ENABLE_AVX512_SIMD16
+#if KNOB_SIMD16_WIDTH == 16
+#define SIMD16_TILE_X_DIM 8
+#define SIMD16_TILE_Y_DIM 2
+#else
+#error "Invalid simd width"
+#endif
+#endif
+
 ///////////////////////////////////////////////////////////////////////////////
 // Optimization knobs
 ///////////////////////////////////////////////////////////////////////////////