Mesa (master): i965: Push everything if pull_param == NULL

Jason Ekstrand jekstrand at kemper.freedesktop.org
Thu Apr 14 23:00:41 UTC 2016


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

Author: Jason Ekstrand <jason.ekstrand at intel.com>
Date:   Tue Apr  5 16:22:26 2016 -0700

i965: Push everything if pull_param == NULL

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

---

 src/mesa/drivers/dri/i965/brw_fs.cpp           | 10 ++++++++--
 src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp |  6 ++++++
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
index 6464579..aedb5a2 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -2019,8 +2019,14 @@ fs_visitor::assign_constant_locations()
       if (!contiguous[u]) {
          unsigned chunk_size = u - chunk_start + 1;
 
-         if (num_push_constants + chunk_size <= max_push_components &&
-             chunk_size <= max_chunk_size) {
+         /* Decide whether we should push or pull this parameter.  In the
+          * Vulkan driver, push constants are explicitly exposed via the API
+          * so we push everything.  In GL, we only push small arrays.
+          */
+         if (stage_prog_data->pull_param == NULL ||
+             (num_push_constants + chunk_size <= max_push_components &&
+              chunk_size <= max_chunk_size)) {
+            assert(num_push_constants + chunk_size <= max_push_components);
             for (unsigned j = chunk_start; j <= u; j++)
                push_constant_loc[j] = num_push_constants++;
          } else {
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
index 29bdacc..4b12a72 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
@@ -1629,6 +1629,12 @@ vec4_visitor::emit_pull_constant_load(bblock_t *block, vec4_instruction *inst,
 void
 vec4_visitor::move_uniform_array_access_to_pull_constants()
 {
+   /* The vulkan dirver doesn't support pull constants other than UBOs so
+    * everything has to be pushed regardless.
+    */
+   if (stage_prog_data->pull_param == NULL)
+      return;
+
    int pull_constant_loc[this->uniforms];
    memset(pull_constant_loc, -1, sizeof(pull_constant_loc));
 




More information about the mesa-commit mailing list