diff options
author | Bas Nieuwenhuizen <[email protected]> | 2018-07-23 16:24:02 +0200 |
---|---|---|
committer | Bas Nieuwenhuizen <[email protected]> | 2018-08-14 22:13:09 +0200 |
commit | 66e12451ac4e4e1c05a48b2cd2b0d3186f779f20 (patch) | |
tree | 6eb64636f51d88b1e44974530340c45f7f26a7c6 | |
parent | 4bb6c49375ecc36b32331cc53f90c89d0eb4c8f0 (diff) |
radv: Update to new VK_EXT_vertex_attribute_divisor to version 2.
Behavior wrt firstInstance got changed, and a divisor of 0 has been
disallowed.
The new version of the ext got published in specification 1.1.81.
Sending to stable since the only known user is DXVK, which needs
this for correctness.
Reviewed-by: Samuel Pitoiset <[email protected]>
CC: 18.2 <[email protected]>
-rw-r--r-- | src/amd/vulkan/radv_extensions.py | 2 | ||||
-rw-r--r-- | src/amd/vulkan/radv_nir_to_llvm.c | 7 |
2 files changed, 5 insertions, 4 deletions
diff --git a/src/amd/vulkan/radv_extensions.py b/src/amd/vulkan/radv_extensions.py index 8b5eee867ac..b5b9c137927 100644 --- a/src/amd/vulkan/radv_extensions.py +++ b/src/amd/vulkan/radv_extensions.py @@ -105,7 +105,7 @@ EXTENSIONS = [ Extension('VK_EXT_sampler_filter_minmax', 1, 'device->rad_info.chip_class >= CIK'), Extension('VK_EXT_shader_viewport_index_layer', 1, True), Extension('VK_EXT_shader_stencil_export', 1, True), - Extension('VK_EXT_vertex_attribute_divisor', 1, True), + Extension('VK_EXT_vertex_attribute_divisor', 2, True), Extension('VK_AMD_draw_indirect_count', 1, True), Extension('VK_AMD_gcn_shader', 1, True), Extension('VK_AMD_rasterization_order', 1, 'device->has_out_of_order_rast'), diff --git a/src/amd/vulkan/radv_nir_to_llvm.c b/src/amd/vulkan/radv_nir_to_llvm.c index 64b6522cd93..bfd8b562e5c 100644 --- a/src/amd/vulkan/radv_nir_to_llvm.c +++ b/src/amd/vulkan/radv_nir_to_llvm.c @@ -1991,8 +1991,7 @@ handle_vs_input_decl(struct radv_shader_context *ctx, uint32_t divisor = ctx->options->key.vs.instance_rate_divisors[attrib_index]; if (divisor) { - buffer_index = LLVMBuildAdd(ctx->ac.builder, ctx->abi.instance_id, - ctx->abi.start_instance, ""); + buffer_index = ctx->abi.instance_id; if (divisor != 1) { buffer_index = LLVMBuildUDiv(ctx->ac.builder, buffer_index, @@ -2007,8 +2006,10 @@ handle_vs_input_decl(struct radv_shader_context *ctx, MAX2(1, ctx->shader_info->vs.vgpr_comp_cnt); } } else { - buffer_index = ctx->ac.i32_0; + unreachable("Invalid vertex attribute divisor of 0."); } + + buffer_index = LLVMBuildAdd(ctx->ac.builder, ctx->abi.start_instance, buffer_index, ""); } else buffer_index = LLVMBuildAdd(ctx->ac.builder, ctx->abi.vertex_id, ctx->abi.base_vertex, ""); |