[Mesa-dev] [PATCH 2/2] blorp: Embed a wm_prog_data in blorp_prog_data

Jason Ekstrand jason at jlekstrand.net
Tue Jan 31 19:05:28 UTC 2017


While we're at it, we rename it to remove the brw_ prefix

Signed-off-by: Jason Ekstrand <jason at jlekstrand.net>
---
 src/intel/blorp/blorp.c           | 26 +++++---------
 src/intel/blorp/blorp_blit.c      |  2 +-
 src/intel/blorp/blorp_clear.c     |  2 +-
 src/intel/blorp/blorp_genX_exec.h | 72 +++++++++++++++++++--------------------
 src/intel/blorp/blorp_priv.h      | 30 ++++------------
 5 files changed, 52 insertions(+), 80 deletions(-)

diff --git a/src/intel/blorp/blorp.c b/src/intel/blorp/blorp.c
index 2f27274..8a90c3b 100644
--- a/src/intel/blorp/blorp.c
+++ b/src/intel/blorp/blorp.c
@@ -145,7 +145,7 @@ const unsigned *
 brw_blorp_compile_nir_shader(struct blorp_context *blorp, struct nir_shader *nir,
                              const struct brw_wm_prog_key *wm_key,
                              bool use_repclear,
-                             struct brw_blorp_prog_data *prog_data,
+                             struct blorp_prog_data *prog_data,
                              unsigned *program_size)
 {
    const struct brw_compiler *compiler = blorp->compiler;
@@ -160,15 +160,14 @@ brw_blorp_compile_nir_shader(struct blorp_context *blorp, struct nir_shader *nir
    nir->options =
       compiler->glsl_compiler_options[MESA_SHADER_FRAGMENT].NirOptions;
 
-   struct brw_wm_prog_data wm_prog_data;
-   memset(&wm_prog_data, 0, sizeof(wm_prog_data));
+   memset(prog_data, 0, sizeof(*prog_data));
 
-   wm_prog_data.base.nr_params = 0;
-   wm_prog_data.base.param = NULL;
+   prog_data->wm.base.nr_params = 0;
+   prog_data->wm.base.param = NULL;
 
    /* BLORP always just uses the first two binding table entries */
-   wm_prog_data.binding_table.render_target_start = BLORP_RENDERBUFFER_BT_INDEX;
-   wm_prog_data.base.binding_table.texture_start = BLORP_TEXTURE_BT_INDEX;
+   prog_data->wm.binding_table.render_target_start = BLORP_RENDERBUFFER_BT_INDEX;
+   prog_data->wm.base.binding_table.texture_start = BLORP_TEXTURE_BT_INDEX;
 
    nir = brw_preprocess_nir(compiler, nir);
    nir_remove_dead_variables(nir, nir_var_shader_in);
@@ -176,21 +175,12 @@ brw_blorp_compile_nir_shader(struct blorp_context *blorp, struct nir_shader *nir
 
    const unsigned *program =
       brw_compile_fs(compiler, blorp->driver_ctx, mem_ctx,
-                     wm_key, &wm_prog_data, nir,
+                     wm_key, &prog_data->wm, nir,
                      NULL, -1, -1, false, use_repclear, program_size, NULL);
 
-   /* Copy the relavent bits of wm_prog_data over into the blorp prog data */
-   prog_data->dispatch_8 = wm_prog_data.dispatch_8;
-   prog_data->dispatch_16 = wm_prog_data.dispatch_16;
-   prog_data->first_curbe_grf_0 = wm_prog_data.base.dispatch_grf_start_reg;
-   prog_data->first_curbe_grf_2 = wm_prog_data.dispatch_grf_start_reg_2;
-   prog_data->ksp_offset_2 = wm_prog_data.prog_offset_2;
-   prog_data->persample_msaa_dispatch = wm_prog_data.persample_dispatch;
-   prog_data->flat_inputs = wm_prog_data.flat_inputs;
-   prog_data->num_varying_inputs = wm_prog_data.num_varying_inputs;
    prog_data->inputs_read = nir->info.inputs_read;
 
-   assert(wm_prog_data.base.nr_params == 0);
+   assert(prog_data->wm.base.nr_params == 0);
 
    return program;
 }
diff --git a/src/intel/blorp/blorp_blit.c b/src/intel/blorp/blorp_blit.c
index af46389..fc9e737 100644
--- a/src/intel/blorp/blorp_blit.c
+++ b/src/intel/blorp/blorp_blit.c
@@ -1235,7 +1235,7 @@ brw_blorp_get_blit_kernel(struct blorp_context *blorp,
 
    const unsigned *program;
    unsigned program_size;
-   struct brw_blorp_prog_data prog_data;
+   struct blorp_prog_data prog_data;
 
    /* Try and compile with NIR first.  If that fails, fall back to the old
     * method of building shaders manually.
diff --git a/src/intel/blorp/blorp_clear.c b/src/intel/blorp/blorp_clear.c
index ce9b292..01889b8 100644
--- a/src/intel/blorp/blorp_clear.c
+++ b/src/intel/blorp/blorp_clear.c
@@ -73,7 +73,7 @@ blorp_params_get_clear_kernel(struct blorp_context *blorp,
    struct brw_wm_prog_key wm_key;
    brw_blorp_init_wm_prog_key(&wm_key);
 
-   struct brw_blorp_prog_data prog_data;
+   struct blorp_prog_data prog_data;
    unsigned program_size;
    const unsigned *program =
       brw_blorp_compile_nir_shader(blorp, b.shader, &wm_key, use_replicated_data,
diff --git a/src/intel/blorp/blorp_genX_exec.h b/src/intel/blorp/blorp_genX_exec.h
index 71beadc..bb665e2 100644
--- a/src/intel/blorp/blorp_genX_exec.h
+++ b/src/intel/blorp/blorp_genX_exec.h
@@ -156,7 +156,7 @@ emit_urb_config(struct blorp_batch *batch,
     * where 'n' stands for number of varying inputs expressed as vec4s.
     */
     const unsigned num_varyings =
-       params->wm_prog_data ? params->wm_prog_data->num_varying_inputs : 0;
+       params->wm_prog_data ? params->wm_prog_data->wm.num_varying_inputs : 0;
     const unsigned total_needed = 16 + 16 + num_varyings * 16;
 
    /* The URB size is expressed in units of 64 bytes (512 bits) */
@@ -191,7 +191,7 @@ blorp_emit_input_varying_data(struct blorp_batch *batch,
    const unsigned vec4_size_in_bytes = 4 * sizeof(float);
    const unsigned max_num_varyings =
       DIV_ROUND_UP(sizeof(params->wm_inputs), vec4_size_in_bytes);
-   const unsigned num_varyings = params->wm_prog_data->num_varying_inputs;
+   const unsigned num_varyings = params->wm_prog_data->wm.num_varying_inputs;
 
    *size = num_varyings * vec4_size_in_bytes;
 
@@ -239,7 +239,7 @@ blorp_emit_vertex_buffers(struct blorp_batch *batch,
    vb[0].EndAddress.offset += size - 1;
 #endif
 
-   if (params->wm_prog_data && params->wm_prog_data->num_varying_inputs) {
+   if (params->wm_prog_data && params->wm_prog_data->wm.num_varying_inputs) {
       blorp_emit_input_varying_data(batch, params,
                                     &vb[1].BufferStartingAddress, &size);
       vb[1].VertexBufferIndex = 1;
@@ -273,7 +273,7 @@ blorp_emit_vertex_elements(struct blorp_batch *batch,
                            const struct blorp_params *params)
 {
    const unsigned num_varyings =
-      params->wm_prog_data ? params->wm_prog_data->num_varying_inputs : 0;
+      params->wm_prog_data ? params->wm_prog_data->wm.num_varying_inputs : 0;
    const unsigned num_elements = 2 + num_varyings;
 
    struct GENX(VERTEX_ELEMENT_STATE) ve[num_elements];
@@ -381,7 +381,7 @@ static void
 blorp_emit_sf_config(struct blorp_batch *batch,
                      const struct blorp_params *params)
 {
-   const struct brw_blorp_prog_data *prog_data = params->wm_prog_data;
+   const struct blorp_prog_data *prog_data = params->wm_prog_data;
 
    /* 3DSTATE_SF
     *
@@ -412,11 +412,11 @@ blorp_emit_sf_config(struct blorp_batch *batch,
 
    blorp_emit(batch, GENX(3DSTATE_SBE), sbe) {
       sbe.VertexURBEntryReadOffset = 1;
-      sbe.NumberofSFOutputAttributes = prog_data->num_varying_inputs;
-      sbe.VertexURBEntryReadLength = brw_blorp_get_urb_length(prog_data);
+      sbe.NumberofSFOutputAttributes = prog_data->wm.num_varying_inputs;
+      sbe.VertexURBEntryReadLength = blorp_get_urb_length(prog_data);
       sbe.ForceVertexURBEntryReadLength = true;
       sbe.ForceVertexURBEntryReadOffset = true;
-      sbe.ConstantInterpolationEnable = prog_data->flat_inputs;
+      sbe.ConstantInterpolationEnable = prog_data->wm.flat_inputs;
 
 #if GEN_GEN >= 9
       for (unsigned i = 0; i < 32; i++)
@@ -441,9 +441,9 @@ blorp_emit_sf_config(struct blorp_batch *batch,
    blorp_emit(batch, GENX(3DSTATE_SBE), sbe) {
       sbe.VertexURBEntryReadOffset = 1;
       if (prog_data) {
-         sbe.NumberofSFOutputAttributes = prog_data->num_varying_inputs;
-         sbe.VertexURBEntryReadLength = brw_blorp_get_urb_length(prog_data);
-         sbe.ConstantInterpolationEnable = prog_data->flat_inputs;
+         sbe.NumberofSFOutputAttributes = prog_data->wm.num_varying_inputs;
+         sbe.VertexURBEntryReadLength = blorp_get_urb_length(prog_data);
+         sbe.ConstantInterpolationEnable = prog_data->wm.flat_inputs;
       } else {
          sbe.NumberofSFOutputAttributes = 0;
          sbe.VertexURBEntryReadLength = 1;
@@ -461,9 +461,9 @@ blorp_emit_sf_config(struct blorp_batch *batch,
 
       sf.VertexURBEntryReadOffset = 1;
       if (prog_data) {
-         sf.NumberofSFOutputAttributes = prog_data->num_varying_inputs;
-         sf.VertexURBEntryReadLength = brw_blorp_get_urb_length(prog_data);
-         sf.ConstantInterpolationEnable = prog_data->flat_inputs;
+         sf.NumberofSFOutputAttributes = prog_data->wm.num_varying_inputs;
+         sf.VertexURBEntryReadLength = blorp_get_urb_length(prog_data);
+         sf.ConstantInterpolationEnable = prog_data->wm.flat_inputs;
       } else {
          sf.NumberofSFOutputAttributes = 0;
          sf.VertexURBEntryReadLength = 1;
@@ -477,7 +477,7 @@ static void
 blorp_emit_ps_config(struct blorp_batch *batch,
                      const struct blorp_params *params)
 {
-   const struct brw_blorp_prog_data *prog_data = params->wm_prog_data;
+   const struct blorp_prog_data *prog_data = params->wm_prog_data;
 
    /* Even when thread dispatch is disabled, max threads (dw5.25:31) must be
     * nonzero to prevent the GPU from hanging.  While the documentation doesn't
@@ -501,16 +501,16 @@ blorp_emit_ps_config(struct blorp_batch *batch,
       }
 
       ps.DispatchGRFStartRegisterForConstantSetupData0 =
-         prog_data->first_curbe_grf_0;
+         prog_data->wm.base.dispatch_grf_start_reg;
       ps.DispatchGRFStartRegisterForConstantSetupData2 =
-         prog_data->first_curbe_grf_2;
+         prog_data->wm.dispatch_grf_start_reg_2;
 
-      ps._8PixelDispatchEnable = prog_data->dispatch_8;
-      ps._16PixelDispatchEnable = prog_data->dispatch_16;
+      ps._8PixelDispatchEnable = prog_data->wm.dispatch_8;
+      ps._16PixelDispatchEnable = prog_data->wm.dispatch_16;
 
       ps.KernelStartPointer0 = params->wm_prog_kernel;
       ps.KernelStartPointer2 =
-         params->wm_prog_kernel + prog_data->ksp_offset_2;
+         params->wm_prog_kernel + prog_data->wm.prog_offset_2;
 
       /* 3DSTATE_PS expects the number of threads per PSD, which is always 64;
        * it implicitly scales for different GT levels (which have some # of
@@ -552,9 +552,9 @@ blorp_emit_ps_config(struct blorp_batch *batch,
       if (params->src.addr.buffer)
          psx.PixelShaderKillsPixel = true;
 
-      psx.AttributeEnable = prog_data->num_varying_inputs > 0;
+      psx.AttributeEnable = prog_data->wm.num_varying_inputs > 0;
 
-      if (prog_data && prog_data->persample_msaa_dispatch)
+      if (prog_data && prog_data->wm.persample_dispatch)
          psx.PixelShaderIsPerSample = true;
    }
 
@@ -586,7 +586,7 @@ blorp_emit_ps_config(struct blorp_batch *batch,
       if (params->dst.surf.samples > 1) {
          wm.MultisampleRasterizationMode = MSRASTMODE_ON_PATTERN;
          wm.MultisampleDispatchMode =
-            (prog_data && prog_data->persample_msaa_dispatch) ?
+            (prog_data && prog_data->wm.persample_dispatch) ?
             MSDISPMODE_PERSAMPLE : MSDISPMODE_PERPIXEL;
       } else {
          wm.MultisampleRasterizationMode = MSRASTMODE_OFF_PIXEL;
@@ -604,18 +604,18 @@ blorp_emit_ps_config(struct blorp_batch *batch,
 
       if (prog_data) {
          ps.DispatchGRFStartRegisterforConstantSetupData0 =
-            prog_data->first_curbe_grf_0;
+            prog_data->wm.base.dispatch_grf_start_reg;
          ps.DispatchGRFStartRegisterforConstantSetupData2 =
-            prog_data->first_curbe_grf_2;
+            prog_data->wm.dispatch_grf_start_reg_2;
 
          ps.KernelStartPointer0 = params->wm_prog_kernel;
          ps.KernelStartPointer2 =
-            params->wm_prog_kernel + prog_data->ksp_offset_2;
+            params->wm_prog_kernel + prog_data->wm.prog_offset_2;
 
-         ps._8PixelDispatchEnable = prog_data->dispatch_8;
-         ps._16PixelDispatchEnable = prog_data->dispatch_16;
+         ps._8PixelDispatchEnable = prog_data->wm.dispatch_8;
+         ps._16PixelDispatchEnable = prog_data->wm.dispatch_16;
 
-         ps.AttributeEnable = prog_data->num_varying_inputs > 0;
+         ps.AttributeEnable = prog_data->wm.num_varying_inputs > 0;
       } else {
          /* Gen7 hardware gets angry if we don't enable at least one dispatch
           * mode, so just enable 16-pixel dispatch if we don't have a program.
@@ -666,18 +666,18 @@ blorp_emit_ps_config(struct blorp_batch *batch,
          wm.ThreadDispatchEnable = true;
 
          wm.DispatchGRFStartRegisterforConstantSetupData0 =
-            prog_data->first_curbe_grf_0;
+            prog_data->wm.base.dispatch_grf_start_reg;
          wm.DispatchGRFStartRegisterforConstantSetupData2 =
-            prog_data->first_curbe_grf_2;
+            prog_data->wm.dispatch_grf_start_reg_2;
 
          wm.KernelStartPointer0 = params->wm_prog_kernel;
          wm.KernelStartPointer2 =
-            params->wm_prog_kernel + prog_data->ksp_offset_2;
+            params->wm_prog_kernel + prog_data->wm.prog_offset_2;
 
-         wm._8PixelDispatchEnable = prog_data->dispatch_8;
-         wm._16PixelDispatchEnable = prog_data->dispatch_16;
+         wm._8PixelDispatchEnable = prog_data->wm.dispatch_8;
+         wm._16PixelDispatchEnable = prog_data->wm.dispatch_16;
 
-         wm.NumberofSFOutputAttributes = prog_data->num_varying_inputs;
+         wm.NumberofSFOutputAttributes = prog_data->wm.num_varying_inputs;
       }
 
       if (params->src.addr.buffer) {
@@ -688,7 +688,7 @@ blorp_emit_ps_config(struct blorp_batch *batch,
       if (params->dst.surf.samples > 1) {
          wm.MultisampleRasterizationMode = MSRASTMODE_ON_PATTERN;
          wm.MultisampleDispatchMode =
-            (prog_data && prog_data->persample_msaa_dispatch) ?
+            (prog_data && prog_data->wm.persample_dispatch) ?
             MSDISPMODE_PERSAMPLE : MSDISPMODE_PERPIXEL;
       } else {
          wm.MultisampleRasterizationMode = MSRASTMODE_OFF_PIXEL;
diff --git a/src/intel/blorp/blorp_priv.h b/src/intel/blorp/blorp_priv.h
index a88d0f8..70cdfbc 100644
--- a/src/intel/blorp/blorp_priv.h
+++ b/src/intel/blorp/blorp_priv.h
@@ -135,33 +135,15 @@ struct brw_blorp_wm_inputs
    uint32_t pad[1];
 };
 
-struct brw_blorp_prog_data
+struct blorp_prog_data
 {
-   bool dispatch_8;
-   bool dispatch_16;
+   struct brw_wm_prog_data wm;
 
-   uint8_t first_curbe_grf_0;
-   uint8_t first_curbe_grf_2;
-
-   uint32_t ksp_offset_2;
-
-   /**
-    * True if the WM program should be run in MSDISPMODE_PERSAMPLE with more
-    * than one sample per pixel.
-    */
-   bool persample_msaa_dispatch;
-
-   /**
-    * Mask of which FS inputs are marked flat by the shader source.  This is
-    * needed for setting up 3DSTATE_SF/SBE.
-    */
-   uint32_t flat_inputs;
-   unsigned num_varying_inputs;
    uint64_t inputs_read;
 };
 
 static inline unsigned
-brw_blorp_get_urb_length(const struct brw_blorp_prog_data *prog_data)
+blorp_get_urb_length(const struct blorp_prog_data *prog_data)
 {
    if (prog_data == NULL)
       return 1;
@@ -170,7 +152,7 @@ brw_blorp_get_urb_length(const struct brw_blorp_prog_data *prog_data)
     *
     * read_length = ceiling((max_source_attr+1)/2)
     */
-   return MAX2((prog_data->num_varying_inputs + 1) / 2, 1);
+   return MAX2((prog_data->wm.num_varying_inputs + 1) / 2, 1);
 }
 
 struct blorp_params
@@ -190,7 +172,7 @@ struct blorp_params
    unsigned num_draw_buffers;
    unsigned num_layers;
    uint32_t wm_prog_kernel;
-   struct brw_blorp_prog_data *wm_prog_data;
+   struct blorp_prog_data *wm_prog_data;
 };
 
 void blorp_params_init(struct blorp_params *params);
@@ -306,7 +288,7 @@ const unsigned *
 brw_blorp_compile_nir_shader(struct blorp_context *blorp, struct nir_shader *nir,
                              const struct brw_wm_prog_key *wm_key,
                              bool use_repclear,
-                             struct brw_blorp_prog_data *prog_data,
+                             struct blorp_prog_data *prog_data,
                              unsigned *program_size);
 
 /** \} */
-- 
2.5.0.400.gff86faf



More information about the mesa-dev mailing list