Also move the gen >= 7 specific logic into gen6_blorp.ccp, this will help to avoid more duplication when corresponding logic for glsl-based programs is added.
Signed-off-by: Topi Pohjolainen <topi.pohjolai...@intel.com> --- src/mesa/drivers/dri/i965/brw_blorp.h | 9 +++--- src/mesa/drivers/dri/i965/gen6_blorp.cpp | 47 ++++++++++++++++++++++---------- src/mesa/drivers/dri/i965/gen7_blorp.cpp | 16 +---------- 3 files changed, 38 insertions(+), 34 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_blorp.h b/src/mesa/drivers/dri/i965/brw_blorp.h index 0149197..7ea82c0 100644 --- a/src/mesa/drivers/dri/i965/brw_blorp.h +++ b/src/mesa/drivers/dri/i965/brw_blorp.h @@ -220,6 +220,8 @@ public: virtual void gen6_emit_wm_config(struct brw_context *brw) const; virtual void gen7_emit_wm_config(struct brw_context *brw) const; + virtual void gen6_emit_sampler_state(struct brw_context *brw) const; + virtual void gen7_emit_ps_config(struct brw_context *brw) const; uint32_t x0; @@ -360,6 +362,8 @@ public: virtual void gen6_emit_wm_config(struct brw_context *brw) const; virtual void gen7_emit_wm_config(struct brw_context *brw) const; + virtual void gen6_emit_sampler_state(struct brw_context *brw) const; + virtual void gen7_emit_ps_config(struct brw_context *brw) const; private: @@ -425,11 +429,6 @@ void gen6_blorp_emit_drawing_rectangle(struct brw_context *brw, const brw_blorp_params *params); -uint32_t -gen6_blorp_emit_sampler_state(struct brw_context *brw, - unsigned tex_filter, unsigned max_lod, - bool use_unorm_coords); - /** \} */ #endif /* __cplusplus */ diff --git a/src/mesa/drivers/dri/i965/gen6_blorp.cpp b/src/mesa/drivers/dri/i965/gen6_blorp.cpp index d42b7f3..d5f89bb 100644 --- a/src/mesa/drivers/dri/i965/gen6_blorp.cpp +++ b/src/mesa/drivers/dri/i965/gen6_blorp.cpp @@ -451,22 +451,15 @@ gen6_blorp_emit_binding_table(struct brw_context *brw, /** * SAMPLER_STATE. See brw_update_sampler_state(). */ -uint32_t +static uint32_t gen6_blorp_emit_sampler_state(struct brw_context *brw, - unsigned tex_filter, unsigned max_lod, - bool use_unorm_coords) + unsigned address_rounding, unsigned tex_filter, + unsigned max_lod, bool use_unorm_coords) { uint32_t sampler_offset; uint32_t *sampler_state = (uint32_t *) brw_state_batch(brw, AUB_TRACE_SAMPLER_STATE, 16, 32, &sampler_offset); - unsigned address_rounding = BRW_ADDRESS_ROUNDING_ENABLE_U_MIN | - BRW_ADDRESS_ROUNDING_ENABLE_V_MIN | - BRW_ADDRESS_ROUNDING_ENABLE_R_MIN | - BRW_ADDRESS_ROUNDING_ENABLE_U_MAG | - BRW_ADDRESS_ROUNDING_ENABLE_V_MAG | - BRW_ADDRESS_ROUNDING_ENABLE_R_MAG; - /* XXX: I don't think that using firstLevel, lastLevel works, * because we always setup the surface state as if firstLevel == * level zero. Probably have to subtract firstLevel from each of @@ -502,6 +495,14 @@ static void gen6_blorp_emit_sampler_state_pointers(struct brw_context *brw, uint32_t sampler_offset) { + if (brw->gen >= 7) { + BEGIN_BATCH(2); + OUT_BATCH(_3DSTATE_SAMPLER_STATE_POINTERS_PS << 16 | (2 - 2)); + OUT_BATCH(sampler_offset); + ADVANCE_BATCH(); + return; + } + BEGIN_BATCH(4); OUT_BATCH(_3DSTATE_SAMPLER_STATE_POINTERS << 16 | VS_SAMPLER_STATE_CHANGE | @@ -1011,6 +1012,11 @@ brw_blorp_params::gen6_emit_wm_config(struct brw_context *brw) const } void +brw_blorp_params::gen6_emit_sampler_state(struct brw_context *brw) const +{ +} + +void brw_blorp_blit_params::gen6_emit_wm_constants(struct brw_context *brw) { wm_push_const_offset = gen6_blorp_emit_wm_constants(brw, this); @@ -1023,6 +1029,22 @@ brw_blorp_blit_params::gen6_emit_wm_config(struct brw_context *brw) const gen6_blorp_emit_wm_config(brw, this, prog_offset, prog_data); } +void +brw_blorp_blit_params::gen6_emit_sampler_state(struct brw_context *brw) const +{ + const unsigned address_rounding = BRW_ADDRESS_ROUNDING_ENABLE_U_MIN | + BRW_ADDRESS_ROUNDING_ENABLE_V_MIN | + BRW_ADDRESS_ROUNDING_ENABLE_R_MIN | + BRW_ADDRESS_ROUNDING_ENABLE_U_MAG | + BRW_ADDRESS_ROUNDING_ENABLE_V_MAG | + BRW_ADDRESS_ROUNDING_ENABLE_R_MAG; + const unsigned max_lod = 0; + const uint32_t sampler_offset = + gen6_blorp_emit_sampler_state(brw, address_rounding, + BRW_MAPFILTER_LINEAR, max_lod, true); + gen6_blorp_emit_sampler_state_pointers(brw, sampler_offset); +} + /** * \brief Execute a blit or render pass operation. * @@ -1062,7 +1084,6 @@ gen6_blorp_exec(struct brw_context *brw, if (params->use_wm_prog) { uint32_t wm_surf_offset_renderbuffer; uint32_t wm_surf_offset_texture = 0; - uint32_t sampler_offset; intel_miptree_used_for_rendering(params->dst.mt); wm_surf_offset_renderbuffer = gen6_blorp_emit_surface_state(brw, params, ¶ms->dst, @@ -1077,10 +1098,8 @@ gen6_blorp_exec(struct brw_context *brw, gen6_blorp_emit_binding_table(brw, wm_surf_offset_renderbuffer, wm_surf_offset_texture); - sampler_offset = - gen6_blorp_emit_sampler_state(brw, BRW_MAPFILTER_LINEAR, 0, true); - gen6_blorp_emit_sampler_state_pointers(brw, sampler_offset); } + params->gen6_emit_sampler_state(brw); gen6_blorp_emit_vs_disable(brw, params); gen6_blorp_emit_gs_disable(brw, params); gen6_blorp_emit_clip_disable(brw); diff --git a/src/mesa/drivers/dri/i965/gen7_blorp.cpp b/src/mesa/drivers/dri/i965/gen7_blorp.cpp index f849a0b..ce4e46d 100644 --- a/src/mesa/drivers/dri/i965/gen7_blorp.cpp +++ b/src/mesa/drivers/dri/i965/gen7_blorp.cpp @@ -544,17 +544,6 @@ gen7_blorp_emit_binding_table_pointers_ps(struct brw_context *brw, static void -gen7_blorp_emit_sampler_state_pointers_ps(struct brw_context *brw, - uint32_t sampler_offset) -{ - BEGIN_BATCH(2); - OUT_BATCH(_3DSTATE_SAMPLER_STATE_POINTERS_PS << 16 | (2 - 2)); - OUT_BATCH(sampler_offset); - ADVANCE_BATCH(); -} - - -static void gen7_blorp_emit_constant_ps(struct brw_context *brw, uint32_t wm_push_const_offset) { @@ -799,7 +788,6 @@ gen7_blorp_exec(struct brw_context *brw, uint32_t cc_state_offset = 0; uint32_t depthstencil_offset; uint32_t wm_bind_bo_offset = 0; - uint32_t sampler_offset = 0; gen6_emit_3dstate_multisample(brw, params->dst.num_samples); gen6_emit_3dstate_sample_mask(brw, @@ -836,9 +824,8 @@ gen7_blorp_exec(struct brw_context *brw, gen6_blorp_emit_binding_table(brw, wm_surf_offset_renderbuffer, wm_surf_offset_texture); - sampler_offset = - gen6_blorp_emit_sampler_state(brw, BRW_MAPFILTER_LINEAR, 0, true); } + params->gen6_emit_sampler_state(brw); gen7_blorp_emit_vs_disable(brw); gen7_blorp_emit_hs_disable(brw); gen7_blorp_emit_te_disable(brw); @@ -850,7 +837,6 @@ gen7_blorp_exec(struct brw_context *brw, params->gen7_emit_wm_config(brw); if (params->use_wm_prog) { gen7_blorp_emit_binding_table_pointers_ps(brw, wm_bind_bo_offset); - gen7_blorp_emit_sampler_state_pointers_ps(brw, sampler_offset); } params->gen7_emit_ps_config(brw); gen7_blorp_emit_cc_viewport(brw); -- 1.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev