diff --git a/src/intel/vulkan/anv_generated_indirect_draws.c b/src/intel/vulkan/anv_generated_indirect_draws.c index 98f495612aa..474a89b0503 100644 --- a/src/intel/vulkan/anv_generated_indirect_draws.c +++ b/src/intel/vulkan/anv_generated_indirect_draws.c @@ -134,6 +134,7 @@ compile_upload_spirv(struct anv_device *device, { struct spirv_to_nir_options spirv_options = { .caps = { + .int64 = true, }, .ubo_addr_format = nir_address_format_32bit_index_offset, .ssbo_addr_format = nir_address_format_64bit_global_32bit_offset, diff --git a/src/intel/vulkan/anv_generated_indirect_draws.h b/src/intel/vulkan/anv_generated_indirect_draws.h index e653c05c297..05fa26fac95 100644 --- a/src/intel/vulkan/anv_generated_indirect_draws.h +++ b/src/intel/vulkan/anv_generated_indirect_draws.h @@ -41,8 +41,7 @@ struct anv_generated_indirect_draw_params { uint32_t max_draw_count; uint32_t instance_multiplier; uint32_t indirect_data_stride; - uint32_t end_addr_ldw; - uint32_t end_addr_udw; + uint64_t end_addr; }; struct anv_generated_indirect_params { diff --git a/src/intel/vulkan/genX_cmd_draw_generated_indirect.h b/src/intel/vulkan/genX_cmd_draw_generated_indirect.h index e23060e0f72..01d052f50f8 100644 --- a/src/intel/vulkan/genX_cmd_draw_generated_indirect.h +++ b/src/intel/vulkan/genX_cmd_draw_generated_indirect.h @@ -450,8 +450,7 @@ genX(cmd_buffer_rewrite_forward_end_addr)(struct anv_cmd_buffer *cmd_buffer, uint64_t end_addr = anv_address_physical(anv_batch_current_address(&cmd_buffer->batch)); while (params != NULL) { - params->draw.end_addr_ldw = end_addr & 0xffffffff; - params->draw.end_addr_udw = end_addr >> 32; + params->draw.end_addr = end_addr; params = params->prev; } } diff --git a/src/intel/vulkan/shaders/gfx11_generated_draws.glsl b/src/intel/vulkan/shaders/gfx11_generated_draws.glsl index 8039d09ef66..79cd1ac70db 100644 --- a/src/intel/vulkan/shaders/gfx11_generated_draws.glsl +++ b/src/intel/vulkan/shaders/gfx11_generated_draws.glsl @@ -22,6 +22,7 @@ */ #version 450 +#extension GL_ARB_gpu_shader_int64 : enable #define BITFIELD_BIT(i) (1u << (i)) @@ -46,8 +47,7 @@ layout(set = 0, binding = 2) uniform block { uint max_draw_count; uint instance_multiplier; uint indirect_data_stride; - uint end_addr_ldw; - uint end_addr_udw; + uint64_t end_addr; }; void main() @@ -115,7 +115,7 @@ void main() 49 << 23 | /* MI Command Opcode */ 1 << 8 | /* Address Space Indicator (PPGTT) */ 1 << 0); /* DWord Length */ - commands[cmd_idx + 1] = end_addr_ldw; - commands[cmd_idx + 2] = end_addr_udw; + commands[cmd_idx + 1] = uint(end_addr & 0xffffffff); + commands[cmd_idx + 2] = uint(end_addr >> 32); } }