On Monday, April 24, 2017 3:19:30 PM PDT Rafael Antognolli wrote: > Emit 3DSTATE_MULTISAMPLE using brw_batch_emit. > > Signed-off-by: Rafael Antognolli <rafael.antogno...@intel.com> > --- > src/mesa/drivers/dri/i965/brw_context.h | 9 +- > src/mesa/drivers/dri/i965/brw_state.h | 2 +- > src/mesa/drivers/dri/i965/gen6_multisample_state.c | 6 +- > src/mesa/drivers/dri/i965/gen8_multisample_state.c | 18 +-- > src/mesa/drivers/dri/i965/genX_state_upload.c | 102 +++++++++++++- > 5 files changed, 101 insertions(+), 36 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_context.h > b/src/mesa/drivers/dri/i965/brw_context.h > index 8bd8863..cef54b8 100644 > --- a/src/mesa/drivers/dri/i965/brw_context.h > +++ b/src/mesa/drivers/dri/i965/brw_context.h > @@ -1532,15 +1532,6 @@ brw_blorp_copytexsubimage(struct brw_context *brw, > int dstX0, int dstY0, > int width, int height); > > -/* gen6_multisample_state.c */ > -unsigned > -gen6_determine_sample_mask(struct brw_context *brw); > - > -void > -gen6_emit_3dstate_multisample(struct brw_context *brw, > - unsigned num_samples); > -void > -gen6_emit_3dstate_sample_mask(struct brw_context *brw, unsigned mask); > void > gen6_get_sample_position(struct gl_context *ctx, > struct gl_framebuffer *fb, > diff --git a/src/mesa/drivers/dri/i965/brw_state.h > b/src/mesa/drivers/dri/i965/brw_state.h > index acb7334..2b5b1c4 100644 > --- a/src/mesa/drivers/dri/i965/brw_state.h > +++ b/src/mesa/drivers/dri/i965/brw_state.h > @@ -109,7 +109,6 @@ extern const struct brw_tracked_state > gen7_cs_push_constants; > extern const struct brw_tracked_state gen6_binding_table_pointers; > extern const struct brw_tracked_state gen6_color_calc_state; > extern const struct brw_tracked_state gen6_gs_binding_table; > -extern const struct brw_tracked_state gen6_multisample_state; > extern const struct brw_tracked_state gen6_renderbuffer_surfaces; > extern const struct brw_tracked_state gen6_sampler_state; > extern const struct brw_tracked_state gen6_sol_surface; > @@ -122,7 +121,6 @@ extern const struct brw_tracked_state > gen7_push_constant_space; > extern const struct brw_tracked_state gen7_urb; > extern const struct brw_tracked_state haswell_cut_index; > extern const struct brw_tracked_state gen8_index_buffer; > -extern const struct brw_tracked_state gen8_multisample_state; > extern const struct brw_tracked_state gen8_pma_fix; > extern const struct brw_tracked_state gen8_vf_topology; > extern const struct brw_tracked_state brw_cs_work_groups_surface; > diff --git a/src/mesa/drivers/dri/i965/gen6_multisample_state.c > b/src/mesa/drivers/dri/i965/gen6_multisample_state.c > index a59ffec..77c5fd6 100644 > --- a/src/mesa/drivers/dri/i965/gen6_multisample_state.c > +++ b/src/mesa/drivers/dri/i965/gen6_multisample_state.c > @@ -122,7 +122,7 @@ gen6_set_sample_maps(struct gl_context *ctx) > /** > * 3DSTATE_MULTISAMPLE > */ > -void > +static void > gen6_emit_3dstate_multisample(struct brw_context *brw, > unsigned num_samples) > { > @@ -160,7 +160,7 @@ gen6_emit_3dstate_multisample(struct brw_context *brw, > ADVANCE_BATCH(); > } > > -unsigned > +static unsigned > gen6_determine_sample_mask(struct brw_context *brw) > { > struct gl_context *ctx = &brw->ctx; > @@ -195,7 +195,7 @@ gen6_determine_sample_mask(struct brw_context *brw) > /** > * 3DSTATE_SAMPLE_MASK > */ > -void > +static void > gen6_emit_3dstate_sample_mask(struct brw_context *brw, unsigned mask) > { > BEGIN_BATCH(2);
I'm confused. Shouldn't you delete gen6_determine_sample_mask, gen6_emit_3dstate_sample_mask, upload_multisample_state, and the gen6_multisample_state atom from this file? You're also creating them in genX_state_upload.c and these look unused. > index e36d037..7a31a5d 100644 > --- a/src/mesa/drivers/dri/i965/gen8_multisample_state.c > +++ b/src/mesa/drivers/dri/i965/gen8_multisample_state.c > @@ -69,21 +69,3 @@ gen8_emit_3dstate_sample_pattern(struct brw_context *brw) > OUT_BATCH(brw_multisample_positions_1x_2x); > ADVANCE_BATCH(); > } > - > - > -static void > -upload_multisample_state(struct brw_context *brw) > -{ > - gen8_emit_3dstate_multisample(brw, brw->num_samples); > - gen6_emit_3dstate_sample_mask(brw, gen6_determine_sample_mask(brw)); > -} > - > -const struct brw_tracked_state gen8_multisample_state = { > - .dirty = { > - .mesa = _NEW_MULTISAMPLE, > - .brw = BRW_NEW_BLORP | > - BRW_NEW_CONTEXT | > - BRW_NEW_NUM_SAMPLES, > - }, > - .emit = upload_multisample_state > -}; > diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c > b/src/mesa/drivers/dri/i965/genX_state_upload.c > index b7475dc..77c9efc 100644 > --- a/src/mesa/drivers/dri/i965/genX_state_upload.c > +++ b/src/mesa/drivers/dri/i965/genX_state_upload.c > @@ -24,6 +24,7 @@ > #include <assert.h> > > #include "common/gen_device_info.h" > +#include "common/gen_sample_positions.h" > #include "genxml/gen_macros.h" > > #include "main/bufferobj.h" > @@ -36,6 +37,7 @@ > #include "brw_defines.h" > #endif > #include "brw_draw.h" > +#include "brw_multisample_state.h" > #include "brw_state.h" > #include "brw_wm.h" > #include "brw_util.h" > @@ -3105,6 +3107,98 @@ static const struct brw_tracked_state > genX(wm_push_constants) = { > .emit = genX(upload_wm_push_constants), > }; > > +/* ---------------------------------------------------------------------- */ > + > +static unsigned > +genX(determine_sample_mask)(struct brw_context *brw) > +{ > + struct gl_context *ctx = &brw->ctx; > + float coverage = 1.0f; > + float coverage_invert = false; > + unsigned sample_mask = ~0u; > + > + /* BRW_NEW_NUM_SAMPLES */ > + unsigned num_samples = brw->num_samples; > + > + if (_mesa_is_multisample_enabled(ctx)) { > + if (ctx->Multisample.SampleCoverage) { > + coverage = ctx->Multisample.SampleCoverageValue; > + coverage_invert = ctx->Multisample.SampleCoverageInvert; > + } > + if (ctx->Multisample.SampleMask) { > + sample_mask = ctx->Multisample.SampleMaskValue; > + } > + } > + > + if (num_samples > 1) { > + int coverage_int = (int) (num_samples * coverage + 0.5f); > + uint32_t coverage_bits = (1 << coverage_int) - 1; > + if (coverage_invert) > + coverage_bits ^= (1 << num_samples) - 1; > + return coverage_bits & sample_mask; > + } else { > + return 1; > + } > +} > + > +/* ---------------------------------------------------------------------- */ > + > +static void > +genX(emit_3dstate_multisample2)(struct brw_context *brw, > + unsigned num_samples) > +{ > + assert(brw->num_samples <= 16); > + > + unsigned log2_samples = ffs(MAX2(num_samples, 1)) - 1; > + > + brw_batch_emit(brw, GENX(3DSTATE_MULTISAMPLE), multi) { > + multi.PixelLocation = CENTER; > + multi.NumberofMultisamples = log2_samples; > +#if GEN_GEN < 8 > +#if GEN_GEN >= 7 We could use a single level of #if's by doing: #if GEN_GEN == 6 GEN_SAMPLE_POS_4X(multi.Sample); #elif GEN_GEN == 7 switch ... #endif With that, and the dead gen6_multisample_state.c code deleted, Reviewed-by: Kenneth Graunke <kenn...@whitecape.org> > diff --git a/src/mesa/drivers/dri/i965/gen8_multisample_state.c > b/src/mesa/drivers/dri/i965/gen8_multisample_state.c > + switch (num_samples) { > + case 1: > + GEN_SAMPLE_POS_1X(multi.Sample); > + break; > + case 2: > + GEN_SAMPLE_POS_2X(multi.Sample); > + break; > + case 4: > + GEN_SAMPLE_POS_4X(multi.Sample); > + break; > + case 8: > + GEN_SAMPLE_POS_8X(multi.Sample); > + break; > + default: > + break; > + } > +#else > + GEN_SAMPLE_POS_4X(multi.Sample); > +#endif > +#endif > + } > +} > + > +static void > +genX(upload_multisample_state)(struct brw_context *brw) > +{ > + genX(emit_3dstate_multisample2)(brw, brw->num_samples); > + > + brw_batch_emit(brw, GENX(3DSTATE_SAMPLE_MASK), sm) { > + sm.SampleMask = genX(determine_sample_mask)(brw); > + } > +} > + > +static const struct brw_tracked_state genX(multisample_state) = { > + .dirty = { > + .mesa = _NEW_MULTISAMPLE, > + .brw = BRW_NEW_BLORP | > + BRW_NEW_CONTEXT | > + BRW_NEW_NUM_SAMPLES, > + }, > + .emit = genX(upload_multisample_state) > +}; > + > #endif > > /* ---------------------------------------------------------------------- */ > @@ -3586,7 +3680,7 @@ genX(upload_ps)(struct brw_context *brw) > * in 3DSTATE_SAMPLE_MASK; the values should match. */ > /* _NEW_BUFFERS, _NEW_MULTISAMPLE */ > #if GEN_IS_HASWELL > - ps.SampleMask = gen6_determine_sample_mask(brw); > + ps.SampleMask = genX(determine_sample_mask(brw)); > #endif > > /* 3DSTATE_PS expects the number of threads per PSD, which is always > 64; > @@ -4280,7 +4374,7 @@ genX(init_atoms)(struct brw_context *brw) > &brw_vs_samplers, > &brw_gs_samplers, > &gen6_sampler_state, > - &gen6_multisample_state, > + &genX(multisample_state), > > &genX(vs_state), > &genX(gs_state), > @@ -4364,7 +4458,7 @@ genX(init_atoms)(struct brw_context *brw) > &brw_tcs_samplers, > &brw_tes_samplers, > &brw_gs_samplers, > - &gen6_multisample_state, > + &genX(multisample_state), > > &genX(vs_state), > &genX(hs_state), > @@ -4451,7 +4545,7 @@ genX(init_atoms)(struct brw_context *brw) > &brw_tcs_samplers, > &brw_tes_samplers, > &brw_gs_samplers, > - &gen8_multisample_state, > + &genX(multisample_state), > > &genX(vs_state), > &genX(hs_state), >
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev