i965/state: Add compute pipeline with empty atom lists
authorJordan Justen <jordan.l.justen@intel.com>
Sun, 8 Mar 2015 08:08:18 +0000 (00:08 -0800)
committerJordan Justen <jordan.l.justen@intel.com>
Tue, 31 Mar 2015 23:40:24 +0000 (16:40 -0700)
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_context.h
src/mesa/drivers/dri/i965/brw_state.h
src/mesa/drivers/dri/i965/brw_state_upload.c

index 52b27a95eca8d79c7b6f3d81092c7a289f5ed509..ed250d2c6a7f3952a7703a1091f8c4da36c8868d 100644 (file)
@@ -151,6 +151,7 @@ struct brw_wm_prog_data;
 
 enum brw_pipeline {
    BRW_RENDER_PIPELINE,
+   BRW_COMPUTE_PIPELINE,
 
    BRW_NUM_PIPELINES
 };
@@ -1411,6 +1412,7 @@ struct brw_context
 
    int num_atoms[BRW_NUM_PIPELINES];
    const struct brw_tracked_state render_atoms[57];
+   const struct brw_tracked_state compute_atoms[1];
 
    /* If (INTEL_DEBUG & DEBUG_BATCH) */
    struct {
index f175c29d790e5e23cac6e1b43e89eb746c0a3176..e428183122515ddc9e123ff556a1dba303019e54 100644 (file)
@@ -170,6 +170,8 @@ brw_depthbuffer_format(struct brw_context *brw);
  */
 void brw_upload_render_state(struct brw_context *brw);
 void brw_render_state_finished(struct brw_context *brw);
+void brw_upload_compute_state(struct brw_context *brw);
+void brw_compute_state_finished(struct brw_context *brw);
 void brw_init_state(struct brw_context *brw);
 void brw_destroy_state(struct brw_context *brw);
 
index f24fcc730e507dc23ce7c7cea0e73861f36fc24e..1e00566d5ca537fa14d632504b4fe3bc5e7325ba 100644 (file)
@@ -246,6 +246,10 @@ static const struct brw_tracked_state *gen7_render_atoms[] =
    &haswell_cut_index,
 };
 
+static const struct brw_tracked_state *gen7_compute_atoms[] =
+{
+};
+
 static const struct brw_tracked_state *gen8_render_atoms[] =
 {
    /* Command packets: */
@@ -322,6 +326,10 @@ static const struct brw_tracked_state *gen8_render_atoms[] =
    &gen8_pma_fix,
 };
 
+static const struct brw_tracked_state *gen8_compute_atoms[] =
+{
+};
+
 static void
 brw_upload_initial_gpu_state(struct brw_context *brw)
 {
@@ -359,8 +367,10 @@ brw_get_pipeline_atoms(struct brw_context *brw,
    switch (pipeline) {
    case BRW_RENDER_PIPELINE:
       return brw->render_atoms;
+   case BRW_COMPUTE_PIPELINE:
+      return brw->compute_atoms;
    default:
-      STATIC_ASSERT(BRW_NUM_PIPELINES == 1);
+      STATIC_ASSERT(BRW_NUM_PIPELINES == 2);
       unreachable("Unsupported pipeline");
       return NULL;
    }
@@ -397,6 +407,10 @@ void brw_init_state( struct brw_context *brw )
                  ARRAY_SIZE(brw->render_atoms));
    STATIC_ASSERT(ARRAY_SIZE(gen8_render_atoms) <=
                  ARRAY_SIZE(brw->render_atoms));
+   STATIC_ASSERT(ARRAY_SIZE(gen7_compute_atoms) <=
+                 ARRAY_SIZE(brw->compute_atoms));
+   STATIC_ASSERT(ARRAY_SIZE(gen8_compute_atoms) <=
+                 ARRAY_SIZE(brw->compute_atoms));
 
    brw_init_caches(brw);
 
@@ -404,10 +418,16 @@ void brw_init_state( struct brw_context *brw )
       brw_copy_pipeline_atoms(brw, BRW_RENDER_PIPELINE,
                               gen8_render_atoms,
                               ARRAY_SIZE(gen8_render_atoms));
+      brw_copy_pipeline_atoms(brw, BRW_COMPUTE_PIPELINE,
+                              gen8_compute_atoms,
+                              ARRAY_SIZE(gen8_compute_atoms));
    } else if (brw->gen == 7) {
       brw_copy_pipeline_atoms(brw, BRW_RENDER_PIPELINE,
                               gen7_render_atoms,
                               ARRAY_SIZE(gen7_render_atoms));
+      brw_copy_pipeline_atoms(brw, BRW_COMPUTE_PIPELINE,
+                              gen7_compute_atoms,
+                              ARRAY_SIZE(gen7_compute_atoms));
    } else if (brw->gen == 6) {
       brw_copy_pipeline_atoms(brw, BRW_RENDER_PIPELINE,
                               gen6_atoms, ARRAY_SIZE(gen6_atoms));
@@ -770,3 +790,15 @@ brw_render_state_finished(struct brw_context *brw)
 {
    brw_pipeline_state_finished(brw, BRW_RENDER_PIPELINE);
 }
+
+void
+brw_upload_compute_state(struct brw_context *brw)
+{
+   brw_upload_pipeline_state(brw, BRW_COMPUTE_PIPELINE);
+}
+
+void
+brw_compute_state_finished(struct brw_context *brw)
+{
+   brw_pipeline_state_finished(brw, BRW_COMPUTE_PIPELINE);
+}