diff options
author | Jason Ekstrand <jason.ekstrand@intel.com> | 2016-04-22 11:38:23 -0700 |
---|---|---|
committer | Jason Ekstrand <jason.ekstrand@intel.com> | 2016-04-26 14:55:22 -0700 |
commit | 2dda4ff014aba08df484cce94621c7844d4e4ee8 (patch) | |
tree | cb9ba4ff72f4030672a5bbf4b2e5965f81471d21 /src/mesa/drivers/dri/i965/gen6_blorp.cpp | |
parent | 18d1658633d5ca5147e0b1a2cd22ea7ffa1b5093 (diff) | |
download | external_mesa3d-2dda4ff014aba08df484cce94621c7844d4e4ee8.zip external_mesa3d-2dda4ff014aba08df484cce94621c7844d4e4ee8.tar.gz external_mesa3d-2dda4ff014aba08df484cce94621c7844d4e4ee8.tar.bz2 |
i965/blorp: Refactor to get rid of the get_wm_prog virtual function
Instead of having a virtual member function for getting the WM/PS kernel,
we simply add fields for prog_data and the kernel to brw_blorp_parms and
always make sure those get set as part of the different constructors.
v2: Use use prog_data != NULL to check for a valid program instead of a
magic kernel offset value
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Diffstat (limited to 'src/mesa/drivers/dri/i965/gen6_blorp.cpp')
-rw-r--r-- | src/mesa/drivers/dri/i965/gen6_blorp.cpp | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/src/mesa/drivers/dri/i965/gen6_blorp.cpp b/src/mesa/drivers/dri/i965/gen6_blorp.cpp index 5c0fa0c..aa9180e 100644 --- a/src/mesa/drivers/dri/i965/gen6_blorp.cpp +++ b/src/mesa/drivers/dri/i965/gen6_blorp.cpp @@ -614,10 +614,9 @@ gen6_blorp_emit_sf_config(struct brw_context *brw, */ static void gen6_blorp_emit_wm_config(struct brw_context *brw, - const brw_blorp_params *params, - uint32_t prog_offset, - brw_blorp_prog_data *prog_data) + const brw_blorp_params *params) { + const struct brw_blorp_prog_data *prog_data = params->wm_prog_data; uint32_t dw2, dw4, dw5, dw6; /* Even when thread dispatch is disabled, max threads (dw5.25:31) must be @@ -650,7 +649,7 @@ gen6_blorp_emit_wm_config(struct brw_context *brw, dw5 |= (brw->max_wm_threads - 1) << GEN6_WM_MAX_THREADS_SHIFT; dw6 |= 0 << GEN6_WM_BARYCENTRIC_INTERPOLATION_MODE_SHIFT; /* No interp */ dw6 |= 0 << GEN6_WM_NUM_SF_OUTPUTS_SHIFT; /* No inputs from SF */ - if (params->use_wm_prog) { + if (params->wm_prog_data) { dw4 |= prog_data->first_curbe_grf << GEN6_WM_DISPATCH_START_GRF_SHIFT_0; dw5 |= GEN6_WM_16_DISPATCH_ENABLE; dw5 |= GEN6_WM_DISPATCH_ENABLE; /* We are rendering */ @@ -674,7 +673,7 @@ gen6_blorp_emit_wm_config(struct brw_context *brw, BEGIN_BATCH(9); OUT_BATCH(_3DSTATE_WM << 16 | (9 - 2)); - OUT_BATCH(params->use_wm_prog ? prog_offset : 0); + OUT_BATCH(params->wm_prog_kernel); OUT_BATCH(dw2); OUT_BATCH(0); /* No scratch needed */ OUT_BATCH(dw4); @@ -977,15 +976,12 @@ void gen6_blorp_exec(struct brw_context *brw, const brw_blorp_params *params) { - brw_blorp_prog_data *prog_data = NULL; uint32_t cc_blend_state_offset = 0; uint32_t cc_state_offset = 0; uint32_t depthstencil_offset; uint32_t wm_push_const_offset = 0; uint32_t wm_bind_bo_offset = 0; - uint32_t prog_offset = params->get_wm_prog(brw, &prog_data); - /* Emit workaround flushes when we switch from drawing to blorping. */ brw_emit_post_sync_nonzero_flush(brw); @@ -998,14 +994,14 @@ gen6_blorp_exec(struct brw_context *brw, (1 << params->dst.num_samples) - 1 : 1); gen6_blorp_emit_vertices(brw, params); gen6_blorp_emit_urb_config(brw, params); - if (params->use_wm_prog) { + if (params->wm_prog_data) { cc_blend_state_offset = gen6_blorp_emit_blend_state(brw, params); cc_state_offset = gen6_blorp_emit_cc_state(brw); } depthstencil_offset = gen6_blorp_emit_depth_stencil_state(brw, params); gen6_blorp_emit_cc_state_pointers(brw, params, cc_blend_state_offset, depthstencil_offset, cc_state_offset); - if (params->use_wm_prog) { + if (params->wm_prog_data) { uint32_t wm_surf_offset_renderbuffer; uint32_t wm_surf_offset_texture = 0; wm_push_const_offset = gen6_blorp_emit_wm_constants(brw, params); @@ -1034,12 +1030,12 @@ gen6_blorp_exec(struct brw_context *brw, gen6_blorp_emit_gs_disable(brw, params); gen6_blorp_emit_clip_disable(brw); gen6_blorp_emit_sf_config(brw, params); - if (params->use_wm_prog) + if (params->wm_prog_data) gen6_blorp_emit_constant_ps(brw, params, wm_push_const_offset); else gen6_blorp_emit_constant_ps_disable(brw, params); - gen6_blorp_emit_wm_config(brw, params, prog_offset, prog_data); - if (params->use_wm_prog) + gen6_blorp_emit_wm_config(brw, params); + if (params->wm_prog_data) gen6_blorp_emit_binding_table_pointers(brw, wm_bind_bo_offset); gen6_blorp_emit_viewport_state(brw, params); |