i965: Use bo_map instead of subdata to upload the bits of constant buffer.

Saves CPU time, resulting in a 2.5% FPS win on ETQW.
This commit is contained in:
Eric Anholt 2009-11-12 14:57:30 -08:00
parent 8e8586e626
commit ded0ec1ea5
2 changed files with 26 additions and 2 deletions

View file

@ -68,10 +68,13 @@ brw_vs_update_constant_buffer(struct brw_context *brw)
*/
_mesa_load_state_parameters(&brw->intel.ctx, vp->program.Base.Parameters);
intel_bo_map_gtt_preferred(intel, const_buffer, GL_TRUE);
for (i = 0; i < params->NumParameters; i++) {
dri_bo_subdata(const_buffer, i * 4 * sizeof(float), 4 * sizeof(float),
params->ParameterValues[i]);
memcpy(const_buffer->virtual + i * 4 * sizeof(float),
params->ParameterValues[i],
4 * sizeof(float));
}
intel_bo_unmap_gtt_preferred(intel, const_buffer);
return const_buffer;
}

View file

@ -590,4 +590,25 @@ is_power_of_two(uint32_t value)
return (value & (value - 1)) == 0;
}
static inline void
intel_bo_map_gtt_preferred(struct intel_context *intel,
drm_intel_bo *bo,
GLboolean write)
{
if (intel->intelScreen->kernel_exec_fencing)
drm_intel_gem_bo_map_gtt(bo);
else
drm_intel_bo_map(bo, write);
}
static inline void
intel_bo_unmap_gtt_preferred(struct intel_context *intel,
drm_intel_bo *bo)
{
if (intel->intelScreen->kernel_exec_fencing)
drm_intel_gem_bo_unmap_gtt(bo);
else
drm_intel_bo_unmap(bo);
}
#endif