Revert "radeonsi: reduce the size of si_pm4_state"
authorMarek Olšák <marek.olsak@amd.com>
Wed, 7 Jan 2015 23:10:18 +0000 (00:10 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 7 Jan 2015 23:10:36 +0000 (00:10 +0100)
This reverts commit 9141d8855555e45a057970e78969e1518ad3617d.

It broke OpenCL.

src/gallium/drivers/radeonsi/si_pm4.c
src/gallium/drivers/radeonsi/si_pm4.h

index 27293464e5cef56bbc454f5fd7249c004120fb15..5edf15218f6ba2fbc9f6b661fe38003bf3ad8fae 100644 (file)
@@ -145,13 +145,17 @@ unsigned si_pm4_dirty_dw(struct si_context *sctx)
 void si_pm4_emit(struct si_context *sctx, struct si_pm4_state *state)
 {
        struct radeon_winsys_cs *cs = sctx->b.rings.gfx.cs;
-
        for (int i = 0; i < state->nbo; ++i) {
                r600_context_bo_reloc(&sctx->b, &sctx->b.rings.gfx, state->bo[i],
                                      state->bo_usage[i], state->bo_priority[i]);
        }
 
        memcpy(&cs->buf[cs->cdw], state->pm4, state->ndw * 4);
+
+       for (int i = 0; i < state->nrelocs; ++i) {
+               cs->buf[cs->cdw + state->relocs[i]] += cs->cdw << 2;
+       }
+
        cs->cdw += state->ndw;
 
 #if SI_TRACE_CS
index 388bb4b47f13a29ff7d56b8abd647a2086e47e45..8680a9ef11c93bb7c2efd741185ab9ce07fd144b 100644 (file)
@@ -29,8 +29,9 @@
 
 #include "radeon/drm/radeon_winsys.h"
 
-#define SI_PM4_MAX_DW          140
-#define SI_PM4_MAX_BO          4
+#define SI_PM4_MAX_DW          256
+#define SI_PM4_MAX_BO          32
+#define SI_PM4_MAX_RELOCS      4
 
 // forward defines
 struct si_context;
@@ -53,6 +54,10 @@ struct si_pm4_state
        enum radeon_bo_usage    bo_usage[SI_PM4_MAX_BO];
        enum radeon_bo_priority bo_priority[SI_PM4_MAX_BO];
 
+       /* relocs for shader data */
+       unsigned        nrelocs;
+       unsigned        relocs[SI_PM4_MAX_RELOCS];
+
        bool compute_pkt;
 };