Module: Mesa
Branch: master
Commit: ded0ec1ea5db8e08b0bec8ac0d9d30f98e360003
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ded0ec1ea5db8e08b0bec8ac0d9d30f98e360003

Author: Eric Anholt <[email protected]>
Date:   Thu Nov 12 14:57:30 2009 -0800

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.

---

 src/mesa/drivers/dri/i965/brw_vs_surface_state.c |    7 +++++--
 src/mesa/drivers/dri/intel/intel_context.h       |   21 +++++++++++++++++++++
 2 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_vs_surface_state.c 
b/src/mesa/drivers/dri/i965/brw_vs_surface_state.c
index 5dac632..3bc9840 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_surface_state.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_surface_state.c
@@ -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;
 }
diff --git a/src/mesa/drivers/dri/intel/intel_context.h 
b/src/mesa/drivers/dri/intel/intel_context.h
index 84fbfc5..8936f75 100644
--- a/src/mesa/drivers/dri/intel/intel_context.h
+++ b/src/mesa/drivers/dri/intel/intel_context.h
@@ -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

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to