radeonsi: define the state atom array separately
authorMarek Olšák <marek.olsak@amd.com>
Fri, 28 Aug 2015 19:59:22 +0000 (21:59 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 1 Sep 2015 19:51:13 +0000 (21:51 +0200)
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
src/gallium/drivers/radeonsi/si_hw_context.c
src/gallium/drivers/radeonsi/si_pipe.h
src/gallium/drivers/radeonsi/si_state.h
src/gallium/drivers/radeonsi/si_state_draw.c

index 8284306f30a6c10bdc65aaa7cffbe1b70f497f72..5ef5db73aeb351f910007f61a8dc5af907b50576 100644 (file)
@@ -59,7 +59,7 @@ void si_need_cs_space(struct si_context *ctx, unsigned num_dw,
        num_dw += cs->cdw;
 
        if (count_draw_in) {
-               for (i = 0; i < SI_NUM_ATOMS(ctx); i++) {
+               for (i = 0; i < SI_NUM_ATOMS; i++) {
                        if (ctx->atoms.array[i]->dirty) {
                                num_dw += ctx->atoms.array[i]->num_dw;
                        }
index a1845ba893d027a46da94d347c70e1b0e25f20f1..5ca83e7a2d207cafa53e1702e259d28de4abdedf 100644 (file)
@@ -141,8 +141,6 @@ struct si_viewports {
        struct pipe_viewport_state      states[SI_MAX_VIEWPORTS];
 };
 
-#define SI_NUM_ATOMS(sctx) (sizeof((sctx)->atoms)/sizeof((sctx)->atoms.array[0]))
-
 struct si_context {
        struct r600_common_context      b;
        struct blitter_context          *blitter;
@@ -156,23 +154,7 @@ struct si_context {
        struct pipe_fence_handle        *last_gfx_fence;
        struct si_shader_selector       *fixed_func_tcs_shader;
 
-       union {
-               struct {
-                       /* The order matters. */
-                       struct r600_atom *cache_flush;
-                       struct r600_atom *streamout_begin;
-                       struct r600_atom *streamout_enable; /* must be after streamout_begin */
-                       struct r600_atom *framebuffer;
-                       struct r600_atom *msaa_sample_locs;
-                       struct r600_atom *db_render_state;
-                       struct r600_atom *msaa_config;
-                       struct r600_atom *clip_regs;
-                       struct r600_atom *shader_userdata;
-                       struct r600_atom *scissors;
-                       struct r600_atom *viewports;
-               } s;
-               struct r600_atom *array[0];
-       } atoms;
+       union si_state_atoms            atoms;
 
        struct si_framebuffer           framebuffer;
        struct si_vertex_element        *vertex_elements;
index 321478316997cab6121c6824d9a61a1a10bfdf37..881f6a55251a1dd0f7f33ddb6a489e0deb371f3c 100644 (file)
@@ -106,6 +106,26 @@ union si_state {
        struct si_pm4_state     *array[0];
 };
 
+union si_state_atoms {
+       struct {
+               /* The order matters. */
+               struct r600_atom *cache_flush;
+               struct r600_atom *streamout_begin;
+               struct r600_atom *streamout_enable; /* must be after streamout_begin */
+               struct r600_atom *framebuffer;
+               struct r600_atom *msaa_sample_locs;
+               struct r600_atom *db_render_state;
+               struct r600_atom *msaa_config;
+               struct r600_atom *clip_regs;
+               struct r600_atom *shader_userdata;
+               struct r600_atom *scissors;
+               struct r600_atom *viewports;
+       } s;
+       struct r600_atom *array[0];
+};
+
+#define SI_NUM_ATOMS (sizeof(union si_state_atoms)/sizeof(struct r600_atom*))
+
 struct si_shader_data {
        struct r600_atom        atom;
        uint32_t                sh_base[SI_NUM_SHADERS];
index fd2fecaa7419437a3aad9bf0e3e36c64316ec0d7..87ee746ce6f683fc29e814299acfdffb1d7578c1 100644 (file)
@@ -822,7 +822,7 @@ void si_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info)
        si_need_cs_space(sctx, 0, TRUE);
 
        /* Emit states. */
-       for (i = 0; i < SI_NUM_ATOMS(sctx); i++) {
+       for (i = 0; i < SI_NUM_ATOMS; i++) {
                if (sctx->atoms.array[i]->dirty) {
                        sctx->atoms.array[i]->emit(&sctx->b, sctx->atoms.array[i]);
                        sctx->atoms.array[i]->dirty = false;