summaryrefslogtreecommitdiffstats
path: root/src/intel/vulkan/gen7_cmd_buffer.c
diff options
context:
space:
mode:
authorJordan Justen <jordan.l.justen@intel.com>2016-05-27 00:53:27 -0700
committerJordan Justen <jordan.l.justen@intel.com>2016-06-01 19:29:02 -0700
commit3ba9594f32239031ddeff764e9896d48d05125d0 (patch)
tree8f9acf25ab2c8400770afdd581e2f59960fe1808 /src/intel/vulkan/gen7_cmd_buffer.c
parent30685392e0e477771e6c6ba232a63df6b0e2ed83 (diff)
downloadexternal_mesa3d-3ba9594f32239031ddeff764e9896d48d05125d0.zip
external_mesa3d-3ba9594f32239031ddeff764e9896d48d05125d0.tar.gz
external_mesa3d-3ba9594f32239031ddeff764e9896d48d05125d0.tar.bz2
anv: Support new local ID generation & cross-thread constants
The cross thread constant support appears on Haswell. It allows us to upload a set of uniform data for all threads without duplicating it per thread. We also support per-thread data which allows us to store a per-thread ID in one of the uniforms that can be used to calculate the gl_LocalInvocationIndex and gl_LocalInvocationID variables. v4: * Support the old local ID push constant layout as well (Jason) Cc: "12.0" <mesa-stable@lists.freedesktop.org> Signed-off-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Diffstat (limited to 'src/intel/vulkan/gen7_cmd_buffer.c')
-rw-r--r--src/intel/vulkan/gen7_cmd_buffer.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/src/intel/vulkan/gen7_cmd_buffer.c b/src/intel/vulkan/gen7_cmd_buffer.c
index 40ab008..478122b 100644
--- a/src/intel/vulkan/gen7_cmd_buffer.c
+++ b/src/intel/vulkan/gen7_cmd_buffer.c
@@ -234,12 +234,6 @@ flush_compute_descriptor_set(struct anv_cmd_buffer *cmd_buffer)
const struct brw_cs_prog_data *cs_prog_data = get_cs_prog_data(pipeline);
const struct brw_stage_prog_data *prog_data = &cs_prog_data->base;
- unsigned local_id_dwords = cs_prog_data->local_invocation_id_regs * 8;
- unsigned push_constant_data_size =
- (prog_data->nr_params + local_id_dwords) * 4;
- unsigned reg_aligned_constant_size = ALIGN(push_constant_data_size, 32);
- unsigned push_constant_regs = reg_aligned_constant_size / 32;
-
if (push_state.alloc_size) {
anv_batch_emit(&cmd_buffer->batch, GENX(MEDIA_CURBE_LOAD), curbe) {
curbe.CURBETotalDataLength = push_state.alloc_size;
@@ -264,8 +258,11 @@ flush_compute_descriptor_set(struct anv_cmd_buffer *cmd_buffer)
.BindingTablePointer = surfaces.offset,
.SamplerStatePointer = samplers.offset,
.ConstantURBEntryReadLength =
- push_constant_regs,
-#if !GEN_IS_HASWELL
+ cs_prog_data->push.per_thread.regs,
+#if GEN_IS_HASWELL
+ .CrossThreadConstantDataReadLength =
+ cs_prog_data->push.cross_thread.regs,
+#else
.ConstantURBEntryReadOffset = 0,
#endif
.BarrierEnable = cs_prog_data->uses_barrier,