summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Ekstrand <jason@jlekstrand.net>2021-05-02 17:55:15 -0500
committerDylan Baker <dylan.c.baker@intel.com>2021-05-20 15:12:48 -0700
commitcfda314e47d10a3cf9b1c89196bd3d1e0de15ae4 (patch)
tree056adb26f86de6d53bc6148d168c67a5925ed7c2
parent439b99c7d4b44aea79a5d4e06520283af9faadc8 (diff)
downloadmesa-staging/21.0.tar.gz
anv: Support pushing shader constantsstaging/21.0
Usually, nir_opt_constant_folding will get rid of any load_constant intrinsics which might possibly be pushed but there are rare cases where we can still end up with them. Better to handle them. Cc: mesa-stable@lists.freedesktop.org Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10571> (cherry picked from commit c01354d5c4433452164e70a54e7bbfabf2443b50)
-rw-r--r--.pick_status.json2
-rw-r--r--src/intel/vulkan/genX_cmd_buffer.c10
2 files changed, 11 insertions, 1 deletions
diff --git a/.pick_status.json b/.pick_status.json
index 40c87275bd1..cefc380a2e5 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -202,7 +202,7 @@
"description": "anv: Support pushing shader constants",
"nominated": true,
"nomination_type": 0,
- "resolution": 0,
+ "resolution": 1,
"master_sha": null,
"because_sha": null
},
diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c
index e88069e4cbd..0b4bbe328d2 100644
--- a/src/intel/vulkan/genX_cmd_buffer.c
+++ b/src/intel/vulkan/genX_cmd_buffer.c
@@ -3023,6 +3023,13 @@ get_push_range_address(struct anv_cmd_buffer *cmd_buffer,
};
}
+ case ANV_DESCRIPTOR_SET_SHADER_CONSTANTS:
+ return (struct anv_address) {
+ .bo = cmd_buffer->device->instruction_state_pool.block_pool.bo,
+ .offset = shader->kernel.offset +
+ shader->prog_data->const_data_offset,
+ };
+
default: {
assert(range->set < MAX_SETS);
struct anv_descriptor_set *set =
@@ -3085,6 +3092,9 @@ get_push_range_bound_size(struct anv_cmd_buffer *cmd_buffer,
case ANV_DESCRIPTOR_SET_PUSH_CONSTANTS:
return (range->start + range->length) * 32;
+ case ANV_DESCRIPTOR_SET_SHADER_CONSTANTS:
+ return ALIGN(shader->prog_data->const_data_size, ANV_UBO_ALIGNMENT);
+
default: {
assert(range->set < MAX_SETS);
struct anv_descriptor_set *set =