vc4: Make symbolic values for packet sizes.
authorEric Anholt <eric@anholt.net>
Wed, 10 Jun 2015 20:20:25 +0000 (13:20 -0700)
committerEric Anholt <eric@anholt.net>
Tue, 16 Jun 2015 22:15:14 +0000 (15:15 -0700)
src/gallium/drivers/vc4/kernel/vc4_packet.h
src/gallium/drivers/vc4/kernel/vc4_validate.c
src/gallium/drivers/vc4/vc4_blit.c
src/gallium/drivers/vc4/vc4_context.c

index 181f2e01dc9777d2dd4e65a631367bb08fa26a12..af0997f55dfa15faa965403d3717a089b2b56827 100644 (file)
@@ -81,6 +81,38 @@ enum vc4_packet {
         VC4_PACKET_GEM_HANDLES = 254,
 } __attribute__ ((__packed__));
 
+#define VC4_PACKET_HALT_SIZE                                           1
+#define VC4_PACKET_NOP_SIZE                                            1
+#define VC4_PACKET_FLUSH_SIZE                                          1
+#define VC4_PACKET_FLUSH_ALL_SIZE                                      1
+#define VC4_PACKET_START_TILE_BINNING_SIZE                             1
+#define VC4_PACKET_INCREMENT_SEMAPHORE_SIZE                            1
+#define VC4_PACKET_WAIT_ON_SEMAPHORE_SIZE                              1
+#define VC4_PACKET_BRANCH_TO_SUB_LIST_SIZE                             5
+#define VC4_PACKET_STORE_MS_TILE_BUFFER_SIZE                           1
+#define VC4_PACKET_STORE_MS_TILE_BUFFER_AND_EOF_SIZE                   1
+#define VC4_PACKET_STORE_TILE_BUFFER_GENERAL_SIZE                      7
+#define VC4_PACKET_LOAD_TILE_BUFFER_GENERAL_SIZE                       7
+#define VC4_PACKET_GL_INDEXED_PRIMITIVE_SIZE                           14
+#define VC4_PACKET_GL_ARRAY_PRIMITIVE_SIZE                             10
+#define VC4_PACKET_PRIMITIVE_LIST_FORMAT_SIZE                          2
+#define VC4_PACKET_GL_SHADER_STATE_SIZE                                        5
+#define VC4_PACKET_NV_SHADER_STATE_SIZE                                        5
+#define VC4_PACKET_CONFIGURATION_BITS_SIZE                             4
+#define VC4_PACKET_FLAT_SHADE_FLAGS_SIZE                               5
+#define VC4_PACKET_POINT_SIZE_SIZE                                     5
+#define VC4_PACKET_LINE_WIDTH_SIZE                                     5
+#define VC4_PACKET_RHT_X_BOUNDARY_SIZE                                 3
+#define VC4_PACKET_DEPTH_OFFSET_SIZE                                   5
+#define VC4_PACKET_CLIP_WINDOW_SIZE                                    9
+#define VC4_PACKET_VIEWPORT_OFFSET_SIZE                                        5
+#define VC4_PACKET_CLIPPER_XY_SCALING_SIZE                             9
+#define VC4_PACKET_CLIPPER_Z_SCALING_SIZE                              9
+#define VC4_PACKET_TILE_BINNING_MODE_CONFIG_SIZE                       16
+#define VC4_PACKET_TILE_RENDERING_MODE_CONFIG_SIZE                     11
+#define VC4_PACKET_CLEAR_COLORS_SIZE                                   14
+#define VC4_PACKET_TILE_COORDINATES_SIZE                               3
+#define VC4_PACKET_GEM_HANDLES_SIZE                                    9
 
 #define VC4_MASK(high, low) (((1 << ((high) - (low) + 1)) - 1) << (low))
 /* Using the GNU statement expression extension */
index aba5b51e54db3e2a3946d8d628d133c8a55b00a5..a8392705abbb465a677f97ffe1be7162e1ed4531 100644 (file)
@@ -633,6 +633,9 @@ validate_gem_handles(VALIDATE_ARGS)
        return 0;
 }
 
+#define VC4_DEFINE_PACKET(packet, bin, render, name, func) \
+       [packet] = { bin, render, packet ## _SIZE, name, func }
+
 static const struct cmd_info {
        bool bin;
        bool render;
@@ -641,59 +644,59 @@ static const struct cmd_info {
        int (*func)(struct vc4_exec_info *exec, void *validated,
                    void *untrusted);
 } cmd_info[] = {
-       [VC4_PACKET_HALT] = { 1, 1, 1, "halt", NULL },
-       [VC4_PACKET_NOP] = { 1, 1, 1, "nop", NULL },
-       [VC4_PACKET_FLUSH] = { 1, 1, 1, "flush", NULL },
-       [VC4_PACKET_FLUSH_ALL] = { 1, 0, 1, "flush all state", validate_flush_all },
-       [VC4_PACKET_START_TILE_BINNING] = { 1, 0, 1, "start tile binning", validate_start_tile_binning },
-       [VC4_PACKET_INCREMENT_SEMAPHORE] = { 1, 0, 1, "increment semaphore", validate_increment_semaphore },
-       [VC4_PACKET_WAIT_ON_SEMAPHORE] = { 0, 1, 1, "wait on semaphore", validate_wait_on_semaphore },
+       VC4_DEFINE_PACKET(VC4_PACKET_HALT, 1, 1, "halt", NULL),
+       VC4_DEFINE_PACKET(VC4_PACKET_NOP, 1, 1, "nop", NULL),
+       VC4_DEFINE_PACKET(VC4_PACKET_FLUSH, 1, 1, "flush", NULL),
+       VC4_DEFINE_PACKET(VC4_PACKET_FLUSH_ALL, 1, 0, "flush all state", validate_flush_all),
+       VC4_DEFINE_PACKET(VC4_PACKET_START_TILE_BINNING, 1, 0, "start tile binning", validate_start_tile_binning),
+       VC4_DEFINE_PACKET(VC4_PACKET_INCREMENT_SEMAPHORE, 1, 0, "increment semaphore", validate_increment_semaphore),
+       VC4_DEFINE_PACKET(VC4_PACKET_WAIT_ON_SEMAPHORE, 0, 1, "wait on semaphore", validate_wait_on_semaphore),
        /* BRANCH_TO_SUB_LIST is actually supported in the binner as well, but
         * we only use it from the render CL in order to jump into the tile
         * allocation BO.
         */
-       [VC4_PACKET_BRANCH_TO_SUB_LIST] = { 0, 1, 5, "branch to sublist", validate_branch_to_sublist },
-       [VC4_PACKET_STORE_MS_TILE_BUFFER] = { 0, 1, 1, "store MS resolved tile color buffer", NULL },
-       [VC4_PACKET_STORE_MS_TILE_BUFFER_AND_EOF] = { 0, 1, 1, "store MS resolved tile color buffer and EOF", NULL },
+       VC4_DEFINE_PACKET(VC4_PACKET_BRANCH_TO_SUB_LIST, 0, 1, "branch to sublist", validate_branch_to_sublist),
+       VC4_DEFINE_PACKET(VC4_PACKET_STORE_MS_TILE_BUFFER, 0, 1, "store MS resolved tile color buffer", NULL),
+       VC4_DEFINE_PACKET(VC4_PACKET_STORE_MS_TILE_BUFFER_AND_EOF, 0, 1, "store MS resolved tile color buffer and EOF", NULL),
 
-       [VC4_PACKET_STORE_TILE_BUFFER_GENERAL] = { 0, 1, 7, "Store Tile Buffer General", validate_loadstore_tile_buffer_general },
-       [VC4_PACKET_LOAD_TILE_BUFFER_GENERAL] = { 0, 1, 7, "Load Tile Buffer General", validate_loadstore_tile_buffer_general },
+       VC4_DEFINE_PACKET(VC4_PACKET_STORE_TILE_BUFFER_GENERAL, 0, 1, "Store Tile Buffer General", validate_loadstore_tile_buffer_general),
+       VC4_DEFINE_PACKET(VC4_PACKET_LOAD_TILE_BUFFER_GENERAL, 0, 1, "Load Tile Buffer General", validate_loadstore_tile_buffer_general),
 
-       [VC4_PACKET_GL_INDEXED_PRIMITIVE] = { 1, 1, 14, "Indexed Primitive List", validate_indexed_prim_list },
+       VC4_DEFINE_PACKET(VC4_PACKET_GL_INDEXED_PRIMITIVE, 1, 1, "Indexed Primitive List", validate_indexed_prim_list),
 
-       [VC4_PACKET_GL_ARRAY_PRIMITIVE] = { 1, 1, 10, "Vertex Array Primitives", validate_gl_array_primitive },
+       VC4_DEFINE_PACKET(VC4_PACKET_GL_ARRAY_PRIMITIVE, 1, 1, "Vertex Array Primitives", validate_gl_array_primitive),
 
        /* This is only used by clipped primitives (packets 48 and 49), which
         * we don't support parsing yet.
         */
-       [VC4_PACKET_PRIMITIVE_LIST_FORMAT] = { 1, 1, 2, "primitive list format", NULL },
-
-       [VC4_PACKET_GL_SHADER_STATE] = { 1, 1, 5, "GL Shader State", validate_gl_shader_state },
-       [VC4_PACKET_NV_SHADER_STATE] = { 1, 1, 5, "NV Shader State", validate_nv_shader_state },
-
-       [VC4_PACKET_CONFIGURATION_BITS] = { 1, 1, 4, "configuration bits", NULL },
-       [VC4_PACKET_FLAT_SHADE_FLAGS] = { 1, 1, 5, "flat shade flags", NULL },
-       [VC4_PACKET_POINT_SIZE] = { 1, 1, 5, "point size", NULL },
-       [VC4_PACKET_LINE_WIDTH] = { 1, 1, 5, "line width", NULL },
-       [VC4_PACKET_RHT_X_BOUNDARY] = { 1, 1, 3, "RHT X boundary", NULL },
-       [VC4_PACKET_DEPTH_OFFSET] = { 1, 1, 5, "Depth Offset", NULL },
-       [VC4_PACKET_CLIP_WINDOW] = { 1, 1, 9, "Clip Window", NULL },
-       [VC4_PACKET_VIEWPORT_OFFSET] = { 1, 1, 5, "Viewport Offset", NULL },
-       [VC4_PACKET_CLIPPER_XY_SCALING] = { 1, 1, 9, "Clipper XY Scaling", NULL },
+       VC4_DEFINE_PACKET(VC4_PACKET_PRIMITIVE_LIST_FORMAT, 1, 1, "primitive list format", NULL),
+
+       VC4_DEFINE_PACKET(VC4_PACKET_GL_SHADER_STATE, 1, 1, "GL Shader State", validate_gl_shader_state),
+       VC4_DEFINE_PACKET(VC4_PACKET_NV_SHADER_STATE, 1, 1, "NV Shader State", validate_nv_shader_state),
+
+       VC4_DEFINE_PACKET(VC4_PACKET_CONFIGURATION_BITS, 1, 1, "configuration bits", NULL),
+       VC4_DEFINE_PACKET(VC4_PACKET_FLAT_SHADE_FLAGS, 1, 1, "flat shade flags", NULL),
+       VC4_DEFINE_PACKET(VC4_PACKET_POINT_SIZE, 1, 1, "point size", NULL),
+       VC4_DEFINE_PACKET(VC4_PACKET_LINE_WIDTH, 1, 1, "line width", NULL),
+       VC4_DEFINE_PACKET(VC4_PACKET_RHT_X_BOUNDARY, 1, 1, "RHT X boundary", NULL),
+       VC4_DEFINE_PACKET(VC4_PACKET_DEPTH_OFFSET, 1, 1, "Depth Offset", NULL),
+       VC4_DEFINE_PACKET(VC4_PACKET_CLIP_WINDOW, 1, 1, "Clip Window", NULL),
+       VC4_DEFINE_PACKET(VC4_PACKET_VIEWPORT_OFFSET, 1, 1, "Viewport Offset", NULL),
+       VC4_DEFINE_PACKET(VC4_PACKET_CLIPPER_XY_SCALING, 1, 1, "Clipper XY Scaling", NULL),
        /* Note: The docs say this was also 105, but it was 106 in the
         * initial userland code drop.
         */
-       [VC4_PACKET_CLIPPER_Z_SCALING] = { 1, 1, 9, "Clipper Z Scale and Offset", NULL },
+       VC4_DEFINE_PACKET(VC4_PACKET_CLIPPER_Z_SCALING, 1, 1, "Clipper Z Scale and Offset", NULL),
 
-       [VC4_PACKET_TILE_BINNING_MODE_CONFIG] = { 1, 0, 16, "tile binning configuration", validate_tile_binning_config },
+       VC4_DEFINE_PACKET(VC4_PACKET_TILE_BINNING_MODE_CONFIG, 1, 0, "tile binning configuration", validate_tile_binning_config),
 
-       [VC4_PACKET_TILE_RENDERING_MODE_CONFIG] = { 0, 1, 11, "tile rendering mode configuration", validate_tile_rendering_mode_config},
+       VC4_DEFINE_PACKET(VC4_PACKET_TILE_RENDERING_MODE_CONFIG, 0, 1, "tile rendering mode configuration", validate_tile_rendering_mode_config),
 
-       [VC4_PACKET_CLEAR_COLORS] = { 0, 1, 14, "Clear Colors", NULL },
+       VC4_DEFINE_PACKET(VC4_PACKET_CLEAR_COLORS, 0, 1, "Clear Colors", NULL),
 
-       [VC4_PACKET_TILE_COORDINATES] = { 0, 1, 3, "Tile Coordinates", validate_tile_coordinates },
+       VC4_DEFINE_PACKET(VC4_PACKET_TILE_COORDINATES, 0, 1, "Tile Coordinates", validate_tile_coordinates),
 
-       [VC4_PACKET_GEM_HANDLES] = { 1, 1, 9, "GEM handles", validate_gem_handles },
+       VC4_DEFINE_PACKET(VC4_PACKET_GEM_HANDLES, 1, 1, "GEM handles", validate_gem_handles),
 };
 
 int
index 2d524c40b4d06df0be3e54c48e1c6ba7b11a3683..580665014285a21ae4d4cf0487d7b2424be39ac0 100644 (file)
@@ -40,14 +40,12 @@ vc4_tile_blit_color_rcl(struct vc4_context *vc4,
         uint32_t max_y_tile = (dst_surf->base.height - 1) / 64;
         uint32_t xtiles = max_x_tile - min_x_tile + 1;
         uint32_t ytiles = max_y_tile - min_y_tile + 1;
-        uint32_t reloc_size = 9;
-        uint32_t config_size = 11 + reloc_size;
-        uint32_t loadstore_size = 7 + reloc_size;
-        uint32_t tilecoords_size = 3;
         cl_ensure_space(&vc4->rcl,
-                        config_size +
-                        xtiles * ytiles * (loadstore_size * 2 +
-                                           tilecoords_size * 1));
+                        (VC4_PACKET_TILE_RENDERING_MODE_CONFIG_SIZE +
+                         VC4_PACKET_GEM_HANDLES_SIZE) +
+                        xtiles * ytiles * ((VC4_PACKET_LOAD_TILE_BUFFER_GENERAL_SIZE +
+                                            VC4_PACKET_GEM_HANDLES_SIZE) * 2 +
+                                           VC4_PACKET_TILE_COORDINATES_SIZE));
         cl_ensure_space(&vc4->bo_handles, 2 * sizeof(uint32_t));
         cl_ensure_space(&vc4->bo_pointers, 2 * sizeof(struct vc4_bo *));
 
index a2b1cac952d9a9accf4bf11d820cab1da5036f1f..a6231d04aa803cbb00da62cdb8ceb60863b0ee94 100644 (file)
@@ -112,23 +112,19 @@ vc4_setup_rcl(struct vc4_context *vc4)
                 resolve_uncleared);
 #endif
 
-        uint32_t reloc_size = 9;
-        uint32_t clear_size = 14;
-        uint32_t config_size = 11 + reloc_size;
-        uint32_t loadstore_size = 7 + reloc_size;
-        uint32_t tilecoords_size = 3;
-        uint32_t branch_size = 5 + reloc_size;
-        uint32_t color_store_size = 1;
-        uint32_t semaphore_size = 1;
         cl_ensure_space(&vc4->rcl,
-                        clear_size +
-                        config_size +
-                        loadstore_size +
-                        semaphore_size +
-                        xtiles * ytiles * (loadstore_size * 4 +
-                                           tilecoords_size * 3 +
-                                           branch_size +
-                                           color_store_size));
+                        VC4_PACKET_CLEAR_COLORS_SIZE +
+                        (VC4_PACKET_TILE_RENDERING_MODE_CONFIG_SIZE +
+                         VC4_PACKET_GEM_HANDLES_SIZE) +
+                        (VC4_PACKET_STORE_TILE_BUFFER_GENERAL_SIZE +
+                         VC4_PACKET_TILE_RENDERING_MODE_CONFIG_SIZE) +
+                        VC4_PACKET_WAIT_ON_SEMAPHORE_SIZE +
+                        xtiles * ytiles * ((VC4_PACKET_STORE_TILE_BUFFER_GENERAL_SIZE +
+                                            VC4_PACKET_GEM_HANDLES_SIZE) * 4 +
+                                           VC4_PACKET_TILE_COORDINATES_SIZE * 3 +
+                                           (VC4_PACKET_BRANCH_TO_SUB_LIST_SIZE +
+                                            VC4_PACKET_GEM_HANDLES_SIZE) +
+                                           VC4_PACKET_STORE_MS_TILE_BUFFER_SIZE));
 
         if (vc4->cleared) {
                 cl_u8(&vc4->rcl, VC4_PACKET_CLEAR_COLORS);