[Mesa-dev] [PATCH 2/2] blorp: Embed a wm_prog_data in blorp_prog_data
Jason Ekstrand
jason at jlekstrand.net
Wed Feb 1 19:11:39 UTC 2017
Turns out these were already in-tree and I forgot I pushed them... Sorry
for the noise.
On Wed, Feb 1, 2017 at 12:01 AM, Pohjolainen, Topi <
topi.pohjolainen at gmail.com> wrote:
> On Tue, Jan 31, 2017 at 11:05:28AM -0800, Jason Ekstrand wrote:
> > While we're at it, we rename it to remove the brw_ prefix
>
> Nice! Both patches:
>
> Reviewed-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
>
> >
> > 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
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170201/d7415c41/attachment-0001.html>
More information about the mesa-dev
mailing list