diff --git a/docs/features.txt b/docs/features.txt index cc800f3e556..ec70bd47bd8 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -583,6 +583,7 @@ Khronos extensions that are not part of any Vulkan version: VK_EXT_descriptor_buffer DONE (anv, lvp, nvk, radv, tu) VK_EXT_device_address_binding_report DONE (radv, tu) VK_EXT_device_fault DONE (radv) + VK_EXT_device_generated_commands DONE (nvk/Turing+) VK_EXT_device_memory_report DONE (vn) VK_EXT_direct_mode_display DONE (anv, lvp, nvk, radv, tu, v3dv) VK_EXT_discard_rectangles DONE (radv) diff --git a/docs/relnotes/new_features.txt b/docs/relnotes/new_features.txt index d93d1c54d64..f93d947319f 100644 --- a/docs/relnotes/new_features.txt +++ b/docs/relnotes/new_features.txt @@ -17,3 +17,4 @@ VK_KHR_shader_relaxed_extended_instruction on anv, hasvk, hk, nvk, radv, tu, v3d GL_OVR_multiview and GL_OVR_multiview2 on zink VK_KHR_shader_float_controls2 on radv VK_KHR_shader_float_controls2 on nvk +VK_EXT_device_generated_commands on nvk diff --git a/src/nouveau/vulkan/nvk_physical_device.c b/src/nouveau/vulkan/nvk_physical_device.c index b2119ea6f84..4dd2ce3f285 100644 --- a/src/nouveau/vulkan/nvk_physical_device.c +++ b/src/nouveau/vulkan/nvk_physical_device.c @@ -28,6 +28,7 @@ #include +#include "nv_push.h" #include "cl90c0.h" #include "cl91c0.h" #include "cla097.h" @@ -191,6 +192,7 @@ nvk_get_device_extensions(const struct nvk_instance *instance, .EXT_depth_range_unrestricted = info->cls_eng3d >= VOLTA_A, .EXT_descriptor_buffer = true, .EXT_descriptor_indexing = true, + .EXT_device_generated_commands = true, #ifdef VK_USE_PLATFORM_DISPLAY_KHR .EXT_display_control = true, #endif @@ -515,6 +517,10 @@ nvk_get_device_features(const struct nv_device_info *info, .descriptorBufferImageLayoutIgnored = true, .descriptorBufferPushDescriptors = false, + /* VK_EXT_device_generated_commands */ + .deviceGeneratedCommands = true, + .dynamicGeneratedPipelineLayout = true, + /* VK_EXT_dynamic_rendering_unused_attachments */ .dynamicRenderingUnusedAttachments = true, @@ -962,6 +968,25 @@ nvk_get_device_properties(const struct nvk_instance *instance, .resourceDescriptorBufferAddressSpaceSize = UINT32_MAX, .descriptorBufferAddressSpaceSize = UINT32_MAX, + /* VK_EXT_device_generated_commands */ + .maxIndirectPipelineCount = UINT32_MAX, + .maxIndirectShaderObjectCount = UINT32_MAX, + .maxIndirectSequenceCount = 1 << 20, + .maxIndirectCommandsTokenCount = 16, + .maxIndirectCommandsTokenOffset = 2047, + .maxIndirectCommandsIndirectStride = 1 << 12, + .supportedIndirectCommandsInputModes = + VK_INDIRECT_COMMANDS_INPUT_MODE_VULKAN_INDEX_BUFFER_EXT | + VK_INDIRECT_COMMANDS_INPUT_MODE_DXGI_INDEX_BUFFER_EXT, + .supportedIndirectCommandsShaderStages = + NVK_SHADER_STAGE_GRAPHICS_BITS | VK_SHADER_STAGE_COMPUTE_BIT, + .supportedIndirectCommandsShaderStagesPipelineBinding = + NVK_SHADER_STAGE_GRAPHICS_BITS | VK_SHADER_STAGE_COMPUTE_BIT, + .supportedIndirectCommandsShaderStagesShaderBinding = + NVK_SHADER_STAGE_GRAPHICS_BITS | VK_SHADER_STAGE_COMPUTE_BIT, + .deviceGeneratedCommandsTransformFeedback = true, + .deviceGeneratedCommandsMultiDrawIndirectCount = true, + /* VK_EXT_extended_dynamic_state3 */ .dynamicPrimitiveTopologyUnrestricted = true,