nv50/ir: fix constant folding for OP_MUL subop HIGH
[mesa.git] / src / gallium / drivers / ilo / ilo_gpe_gen7.c
index 5dd427374f9269d0ccecffbfc837ac967059180b..6d3397f2d62df5b52f8c428b81a63fccf254ef2b 100644 (file)
@@ -33,6 +33,8 @@
 #include "ilo_shader.h"
 #include "ilo_gpe_gen7.h"
 
+#define SET_FIELD(value, field) (((value) << field ## __SHIFT) & field ## __MASK)
+
 void
 ilo_gpe_init_gs_cso_gen7(const struct ilo_dev_info *dev,
                          const struct ilo_shader_state *gs,
@@ -63,14 +65,14 @@ ilo_gpe_init_gs_cso_gen7(const struct ilo_dev_info *dev,
 
    dw2 = (true) ? 0 : GEN6_THREADDISP_FP_MODE_ALT;
 
-   dw4 = vue_read_len << GEN6_GS_DW4_URB_READ_LEN__SHIFT |
+   dw4 = vue_read_len << GEN7_GS_DW4_URB_READ_LEN__SHIFT |
          GEN7_GS_DW4_INCLUDE_VERTEX_HANDLES |
-         0 << GEN6_GS_DW4_URB_READ_OFFSET__SHIFT |
-         start_grf << GEN6_GS_DW4_URB_GRF_START__SHIFT;
+         0 << GEN7_GS_DW4_URB_READ_OFFSET__SHIFT |
+         start_grf << GEN7_GS_DW4_URB_GRF_START__SHIFT;
 
-   dw5 = (max_threads - 1) << GEN6_GS_DW5_MAX_THREADS__SHIFT |
-         GEN6_GS_DW5_STATISTICS |
-         GEN6_GS_DW6_GS_ENABLE;
+   dw5 = (max_threads - 1) << GEN7_GS_DW5_MAX_THREADS__SHIFT |
+         GEN7_GS_DW5_STATISTICS |
+         GEN7_GS_DW5_GS_ENABLE;
 
    STATIC_ASSERT(Elements(cso->payload) >= 3);
    cso->payload[0] = dw2;
@@ -275,16 +277,16 @@ ilo_gpe_init_view_surface_null_gen7(const struct ilo_dev_info *dev,
    STATIC_ASSERT(Elements(surf->payload) >= 8);
    dw = surf->payload;
 
-   dw[0] = GEN6_SURFTYPE_NULL << GEN6_SURFACE_DW0_TYPE__SHIFT |
-           GEN6_FORMAT_B8G8R8A8_UNORM << GEN6_SURFACE_DW0_FORMAT__SHIFT |
+   dw[0] = GEN6_SURFTYPE_NULL << GEN7_SURFACE_DW0_TYPE__SHIFT |
+           GEN6_FORMAT_B8G8R8A8_UNORM << GEN7_SURFACE_DW0_FORMAT__SHIFT |
            GEN6_TILING_X << 13;
 
    dw[1] = 0;
 
-   dw[2] = SET_FIELD(height - 1, GEN7_SURFACE_HEIGHT) |
-           SET_FIELD(width  - 1, GEN7_SURFACE_WIDTH);
+   dw[2] = SET_FIELD(height - 1, GEN7_SURFACE_DW2_HEIGHT) |
+           SET_FIELD(width  - 1, GEN7_SURFACE_DW2_WIDTH);
 
-   dw[3] = SET_FIELD(depth - 1, BRW_SURFACE_DEPTH);
+   dw[3] = SET_FIELD(depth - 1, GEN7_SURFACE_DW3_DEPTH);
 
    dw[4] = 0;
    dw[5] = level;
@@ -314,7 +316,7 @@ ilo_gpe_init_view_surface_for_buffer_gen7(const struct ilo_dev_info *dev,
 
    ILO_GPE_VALID_GEN(dev, 7, 7.5);
 
-   surface_type = (structured) ? 5 : GEN6_SURFTYPE_BUFFER;
+   surface_type = (structured) ? GEN7_SURFTYPE_STRBUF : GEN6_SURFTYPE_BUFFER;
 
    surface_format = (typed) ?
       ilo_translate_color_format(elem_format) : GEN6_FORMAT_RAW;
@@ -390,17 +392,17 @@ ilo_gpe_init_view_surface_for_buffer_gen7(const struct ilo_dev_info *dev,
    STATIC_ASSERT(Elements(surf->payload) >= 8);
    dw = surf->payload;
 
-   dw[0] = surface_type << GEN6_SURFACE_DW0_TYPE__SHIFT |
-           surface_format << GEN6_SURFACE_DW0_FORMAT__SHIFT;
+   dw[0] = surface_type << GEN7_SURFACE_DW0_TYPE__SHIFT |
+           surface_format << GEN7_SURFACE_DW0_FORMAT__SHIFT;
    if (render_cache_rw)
-      dw[0] |= GEN6_SURFACE_DW0_RENDER_CACHE_RW;
+      dw[0] |= GEN7_SURFACE_DW0_RENDER_CACHE_RW;
 
    dw[1] = offset;
 
-   dw[2] = SET_FIELD(height, GEN7_SURFACE_HEIGHT) |
-           SET_FIELD(width, GEN7_SURFACE_WIDTH);
+   dw[2] = SET_FIELD(height, GEN7_SURFACE_DW2_HEIGHT) |
+           SET_FIELD(width, GEN7_SURFACE_DW2_WIDTH);
 
-   dw[3] = SET_FIELD(depth, BRW_SURFACE_DEPTH) |
+   dw[3] = SET_FIELD(depth, GEN7_SURFACE_DW3_DEPTH) |
            pitch;
 
    dw[4] = 0;
@@ -410,10 +412,10 @@ ilo_gpe_init_view_surface_for_buffer_gen7(const struct ilo_dev_info *dev,
    dw[7] = 0;
 
    if (dev->gen >= ILO_GEN(7.5)) {
-      dw[7] |= SET_FIELD(GEN75_SCS_RED,   GEN7_SURFACE_SCS_R) |
-               SET_FIELD(GEN75_SCS_GREEN, GEN7_SURFACE_SCS_G) |
-               SET_FIELD(GEN75_SCS_BLUE,  GEN7_SURFACE_SCS_B) |
-               SET_FIELD(GEN75_SCS_ALPHA, GEN7_SURFACE_SCS_A);
+      dw[7] |= SET_FIELD(GEN75_SCS_RED,   GEN75_SURFACE_DW7_SCS_R) |
+               SET_FIELD(GEN75_SCS_GREEN, GEN75_SURFACE_DW7_SCS_G) |
+               SET_FIELD(GEN75_SCS_BLUE,  GEN75_SURFACE_DW7_SCS_B) |
+               SET_FIELD(GEN75_SCS_ALPHA, GEN75_SURFACE_DW7_SCS_A);
    }
 
    /* do not increment reference count */
@@ -580,8 +582,8 @@ ilo_gpe_init_view_surface_for_texture_gen7(const struct ilo_dev_info *dev,
    STATIC_ASSERT(Elements(surf->payload) >= 8);
    dw = surf->payload;
 
-   dw[0] = surface_type << GEN6_SURFACE_DW0_TYPE__SHIFT |
-           surface_format << GEN6_SURFACE_DW0_FORMAT__SHIFT |
+   dw[0] = surface_type << GEN7_SURFACE_DW0_TYPE__SHIFT |
+           surface_format << GEN7_SURFACE_DW0_FORMAT__SHIFT |
            ilo_gpe_gen6_translate_winsys_tiling(tex->tiling) << 13;
 
    /*
@@ -614,17 +616,17 @@ ilo_gpe_init_view_surface_for_texture_gen7(const struct ilo_dev_info *dev,
       dw[0] |= GEN7_SURFACE_DW0_ARYSPC_LOD0;
 
    if (is_rt)
-      dw[0] |= GEN6_SURFACE_DW0_RENDER_CACHE_RW;
+      dw[0] |= GEN7_SURFACE_DW0_RENDER_CACHE_RW;
 
    if (surface_type == GEN6_SURFTYPE_CUBE && !is_rt)
-      dw[0] |= GEN6_SURFACE_DW0_CUBE_FACE_ENABLES__MASK;
+      dw[0] |= GEN7_SURFACE_DW0_CUBE_FACE_ENABLES__MASK;
 
    dw[1] = layer_offset;
 
-   dw[2] = SET_FIELD(height - 1, GEN7_SURFACE_HEIGHT) |
-           SET_FIELD(width - 1, GEN7_SURFACE_WIDTH);
+   dw[2] = SET_FIELD(height - 1, GEN7_SURFACE_DW2_HEIGHT) |
+           SET_FIELD(width - 1, GEN7_SURFACE_DW2_WIDTH);
 
-   dw[3] = SET_FIELD(depth - 1, BRW_SURFACE_DEPTH) |
+   dw[3] = SET_FIELD(depth - 1, GEN7_SURFACE_DW3_DEPTH) |
            (pitch - 1);
 
    dw[4] = first_layer << 18 |
@@ -650,164 +652,21 @@ ilo_gpe_init_view_surface_for_texture_gen7(const struct ilo_dev_info *dev,
    else
       dw[4] |= GEN7_SURFACE_DW4_MULTISAMPLECOUNT_1;
 
-   dw[5] = x_offset << GEN6_SURFACE_DW5_X_OFFSET__SHIFT |
-           y_offset << GEN6_SURFACE_DW5_Y_OFFSET__SHIFT |
-           SET_FIELD(first_level, GEN7_SURFACE_MIN_LOD) |
+   dw[5] = x_offset << GEN7_SURFACE_DW5_X_OFFSET__SHIFT |
+           y_offset << GEN7_SURFACE_DW5_Y_OFFSET__SHIFT |
+           SET_FIELD(first_level, GEN7_SURFACE_DW5_MIN_LOD) |
            lod;
 
    dw[6] = 0;
    dw[7] = 0;
 
    if (dev->gen >= ILO_GEN(7.5)) {
-      dw[7] |= SET_FIELD(GEN75_SCS_RED,   GEN7_SURFACE_SCS_R) |
-               SET_FIELD(GEN75_SCS_GREEN, GEN7_SURFACE_SCS_G) |
-               SET_FIELD(GEN75_SCS_BLUE,  GEN7_SURFACE_SCS_B) |
-               SET_FIELD(GEN75_SCS_ALPHA, GEN7_SURFACE_SCS_A);
+      dw[7] |= SET_FIELD(GEN75_SCS_RED,   GEN75_SURFACE_DW7_SCS_R) |
+               SET_FIELD(GEN75_SCS_GREEN, GEN75_SURFACE_DW7_SCS_G) |
+               SET_FIELD(GEN75_SCS_BLUE,  GEN75_SURFACE_DW7_SCS_B) |
+               SET_FIELD(GEN75_SCS_ALPHA, GEN75_SURFACE_DW7_SCS_A);
    }
 
    /* do not increment reference count */
    surf->bo = tex->bo;
 }
-
-int
-ilo_gpe_gen7_estimate_command_size(const struct ilo_dev_info *dev,
-                                   enum ilo_gpe_gen7_command cmd,
-                                   int arg)
-{
-   static const struct {
-      int header;
-      int body;
-   } gen7_command_size_table[ILO_GPE_GEN7_COMMAND_COUNT] = {
-      [ILO_GPE_GEN7_MI_STORE_DATA_IMM]                        = { 0,  5  },
-      [ILO_GPE_GEN7_MI_LOAD_REGISTER_IMM]                     = { 0,  3  },
-      [ILO_GPE_GEN7_MI_STORE_REGISTER_MEM]                    = { 0,  3  },
-      [ILO_GPE_GEN7_MI_REPORT_PERF_COUNT]                     = { 0,  3  },
-      [ILO_GPE_GEN7_STATE_BASE_ADDRESS]                       = { 0,  10 },
-      [ILO_GPE_GEN7_STATE_SIP]                                = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_VF_STATISTICS]                    = { 0,  1  },
-      [ILO_GPE_GEN7_PIPELINE_SELECT]                          = { 0,  1  },
-      [ILO_GPE_GEN7_MEDIA_VFE_STATE]                          = { 0,  8  },
-      [ILO_GPE_GEN7_MEDIA_CURBE_LOAD]                         = { 0,  4  },
-      [ILO_GPE_GEN7_MEDIA_INTERFACE_DESCRIPTOR_LOAD]          = { 0,  4  },
-      [ILO_GPE_GEN7_MEDIA_STATE_FLUSH]                        = { 0,  2  },
-      [ILO_GPE_GEN7_GPGPU_WALKER]                             = { 0,  11 },
-      [ILO_GPE_GEN7_3DSTATE_CLEAR_PARAMS]                     = { 0,  3  },
-      [ILO_GPE_GEN7_3DSTATE_DEPTH_BUFFER]                     = { 0,  7  },
-      [ILO_GPE_GEN7_3DSTATE_STENCIL_BUFFER]                   = { 0,  3  },
-      [ILO_GPE_GEN7_3DSTATE_HIER_DEPTH_BUFFER]                = { 0,  3  },
-      [ILO_GPE_GEN7_3DSTATE_VERTEX_BUFFERS]                   = { 1,  4  },
-      [ILO_GPE_GEN7_3DSTATE_VERTEX_ELEMENTS]                  = { 1,  2  },
-      [ILO_GPE_GEN7_3DSTATE_INDEX_BUFFER]                     = { 0,  3  },
-      [ILO_GPE_GEN7_3DSTATE_VF]                               = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_CC_STATE_POINTERS]                = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_SCISSOR_STATE_POINTERS]           = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_VS]                               = { 0,  6  },
-      [ILO_GPE_GEN7_3DSTATE_GS]                               = { 0,  7  },
-      [ILO_GPE_GEN7_3DSTATE_CLIP]                             = { 0,  4  },
-      [ILO_GPE_GEN7_3DSTATE_SF]                               = { 0,  7  },
-      [ILO_GPE_GEN7_3DSTATE_WM]                               = { 0,  3  },
-      [ILO_GPE_GEN7_3DSTATE_CONSTANT_VS]                      = { 0,  7  },
-      [ILO_GPE_GEN7_3DSTATE_CONSTANT_GS]                      = { 0,  7  },
-      [ILO_GPE_GEN7_3DSTATE_CONSTANT_PS]                      = { 0,  7  },
-      [ILO_GPE_GEN7_3DSTATE_SAMPLE_MASK]                      = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_CONSTANT_HS]                      = { 0,  7  },
-      [ILO_GPE_GEN7_3DSTATE_CONSTANT_DS]                      = { 0,  7  },
-      [ILO_GPE_GEN7_3DSTATE_HS]                               = { 0,  7  },
-      [ILO_GPE_GEN7_3DSTATE_TE]                               = { 0,  4  },
-      [ILO_GPE_GEN7_3DSTATE_DS]                               = { 0,  6  },
-      [ILO_GPE_GEN7_3DSTATE_STREAMOUT]                        = { 0,  3  },
-      [ILO_GPE_GEN7_3DSTATE_SBE]                              = { 0,  14 },
-      [ILO_GPE_GEN7_3DSTATE_PS]                               = { 0,  8  },
-      [ILO_GPE_GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP]  = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_VIEWPORT_STATE_POINTERS_CC]       = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_BLEND_STATE_POINTERS]             = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_DEPTH_STENCIL_STATE_POINTERS]     = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_BINDING_TABLE_POINTERS_VS]        = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_BINDING_TABLE_POINTERS_HS]        = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_BINDING_TABLE_POINTERS_DS]        = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_BINDING_TABLE_POINTERS_GS]        = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_BINDING_TABLE_POINTERS_PS]        = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_SAMPLER_STATE_POINTERS_VS]        = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_SAMPLER_STATE_POINTERS_HS]        = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_SAMPLER_STATE_POINTERS_DS]        = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_SAMPLER_STATE_POINTERS_GS]        = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_SAMPLER_STATE_POINTERS_PS]        = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_URB_VS]                           = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_URB_HS]                           = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_URB_DS]                           = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_URB_GS]                           = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_DRAWING_RECTANGLE]                = { 0,  4  },
-      [ILO_GPE_GEN7_3DSTATE_POLY_STIPPLE_OFFSET]              = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_POLY_STIPPLE_PATTERN]             = { 0,  33, },
-      [ILO_GPE_GEN7_3DSTATE_LINE_STIPPLE]                     = { 0,  3  },
-      [ILO_GPE_GEN7_3DSTATE_AA_LINE_PARAMETERS]               = { 0,  3  },
-      [ILO_GPE_GEN7_3DSTATE_MULTISAMPLE]                      = { 0,  4  },
-      [ILO_GPE_GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_VS]           = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_HS]           = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_DS]           = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_GS]           = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_PS]           = { 0,  2  },
-      [ILO_GPE_GEN7_3DSTATE_SO_DECL_LIST]                     = { 3,  2  },
-      [ILO_GPE_GEN7_3DSTATE_SO_BUFFER]                        = { 0,  4  },
-      [ILO_GPE_GEN7_PIPE_CONTROL]                             = { 0,  5  },
-      [ILO_GPE_GEN7_3DPRIMITIVE]                              = { 0,  7  },
-   };
-   const int header = gen7_command_size_table[cmd].header;
-   const int body = gen7_command_size_table[cmd].body;
-   const int count = arg;
-
-   ILO_GPE_VALID_GEN(dev, 7, 7.5);
-   assert(cmd < ILO_GPE_GEN7_COMMAND_COUNT);
-
-   return (likely(count)) ? header + body * count : 0;
-}
-
-int
-ilo_gpe_gen7_estimate_state_size(const struct ilo_dev_info *dev,
-                                 enum ilo_gpe_gen7_state state,
-                                 int arg)
-{
-   static const struct {
-      int alignment;
-      int body;
-      bool is_array;
-   } gen7_state_size_table[ILO_GPE_GEN7_STATE_COUNT] = {
-      [ILO_GPE_GEN7_INTERFACE_DESCRIPTOR_DATA]          = { 8,  8,  true },
-      [ILO_GPE_GEN7_SF_CLIP_VIEWPORT]                   = { 16, 16, true },
-      [ILO_GPE_GEN7_CC_VIEWPORT]                        = { 8,  2,  true },
-      [ILO_GPE_GEN7_COLOR_CALC_STATE]                   = { 16, 6,  false },
-      [ILO_GPE_GEN7_BLEND_STATE]                        = { 16, 2,  true },
-      [ILO_GPE_GEN7_DEPTH_STENCIL_STATE]                = { 16, 3,  false },
-      [ILO_GPE_GEN7_SCISSOR_RECT]                       = { 8,  2,  true },
-      [ILO_GPE_GEN7_BINDING_TABLE_STATE]                = { 8,  1,  true },
-      [ILO_GPE_GEN7_SURFACE_STATE]                      = { 8,  8,  false },
-      [ILO_GPE_GEN7_SAMPLER_STATE]                      = { 8,  4,  true },
-      [ILO_GPE_GEN7_SAMPLER_BORDER_COLOR_STATE]         = { 8,  4,  false },
-      [ILO_GPE_GEN7_PUSH_CONSTANT_BUFFER]               = { 8,  1,  true },
-   };
-   const int alignment = gen7_state_size_table[state].alignment;
-   const int body = gen7_state_size_table[state].body;
-   const bool is_array = gen7_state_size_table[state].is_array;
-   const int count = arg;
-   int estimate;
-
-   ILO_GPE_VALID_GEN(dev, 7, 7.5);
-   assert(state < ILO_GPE_GEN7_STATE_COUNT);
-
-   if (likely(count)) {
-      if (is_array) {
-         estimate = (alignment - 1) + body * count;
-      }
-      else {
-         estimate = (alignment - 1) + body;
-         /* all states are aligned */
-         if (count > 1)
-            estimate += util_align_npot(body, alignment) * (count - 1);
-      }
-   }
-   else {
-      estimate = 0;
-   }
-
-   return estimate;
-}