diff --git a/docs/features.txt b/docs/features.txt index 461d84e703e..c965042da2d 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -662,7 +662,7 @@ Khronos extensions that are not part of any Vulkan version: VK_EXT_map_memory_placed DONE (anv, hk, nvk, panvk, pvr, radv, tu, vn) VK_EXT_memory_budget DONE (anv, dzn, hasvk, kk, lvp, nvk, panvk, radv, tu, v3dv, vn) VK_EXT_memory_priority DONE (lvp, radv) - VK_EXT_mesh_shader DONE (anv/gfx12.5+, lvp, radv, vn) + VK_EXT_mesh_shader DONE (anv/gfx12.5+, lvp, nvk, radv, vn) VK_EXT_multi_draw DONE (anv, hasvk, hk, kk, lvp, nvk, radv, tu, vn, v3dv) VK_EXT_multisampled_render_to_single_sampled DONE (lvp, vn, panvk, tu) VK_EXT_mutable_descriptor_type DONE (anv, hk, kk, lvp, nvk, panvk/v9+, radv, tu, vn) diff --git a/docs/relnotes/new_features.txt b/docs/relnotes/new_features.txt index 62e5ee0f25b..69bfc6d79a6 100644 --- a/docs/relnotes/new_features.txt +++ b/docs/relnotes/new_features.txt @@ -21,3 +21,4 @@ Support for G1-Ultra, G1-Premium and G1-Pro GPUs on Panfrost and PanVK VK_EXT_shader_atomic_float on nvk VK_{KHR,EXT}_index_type_uint8 on pvr VK_EXT_debug_marker in vulkan runtime +VK_EXT_mesh_shader on NVK diff --git a/src/nouveau/vulkan/nvk_physical_device.c b/src/nouveau/vulkan/nvk_physical_device.c index 5d8b4c3c5b3..54c6125cf6d 100644 --- a/src/nouveau/vulkan/nvk_physical_device.c +++ b/src/nouveau/vulkan/nvk_physical_device.c @@ -257,6 +257,7 @@ nvk_get_device_extensions(const struct nvk_instance *instance, .EXT_legacy_vertex_attributes = true, .EXT_line_rasterization = true, .EXT_load_store_op_none = true, + .EXT_mesh_shader = info->cls_eng3d >= TURING_A, .EXT_map_memory_placed = true, .EXT_memory_budget = true, .EXT_multi_draw = true, @@ -692,6 +693,14 @@ nvk_get_device_features(const struct nv_device_info *info, .memoryMapRangePlaced = false, .memoryUnmapReserve = true, + /* VK_EXT_mesh_shader */ + .taskShader = info->cls_eng3d >= TURING_A, + .meshShader = info->cls_eng3d >= TURING_A, + .multiviewMeshShader = info->cls_eng3d >= TURING_A, + .primitiveFragmentShadingRateMeshShader = info->cls_eng3d >= TURING_A, + /* TODO: Implement TASK_SHADER_INVOCATIONS_BIT_EXT & MESH_SHADER_INVOCATIONS_BIT_EXT */ + .meshShaderQueries = false, + /* VK_EXT_multi_draw */ .multiDraw = true, @@ -950,12 +959,9 @@ nvk_get_device_properties(const struct nvk_instance *instance, /* Vulkan 1.1 properties */ .subgroupSize = 32, - .subgroupSupportedStages = VK_SHADER_STAGE_VERTEX_BIT | - VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | - VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT | - VK_SHADER_STAGE_GEOMETRY_BIT | - VK_SHADER_STAGE_FRAGMENT_BIT | - VK_SHADER_STAGE_COMPUTE_BIT, + .subgroupSupportedStages = + VK_SHADER_STAGE_ALL_GRAPHICS | VK_SHADER_STAGE_COMPUTE_BIT | + VK_SHADER_STAGE_MESH_BIT_EXT | VK_SHADER_STAGE_TASK_BIT_EXT, .subgroupSupportedOperations = VK_SUBGROUP_FEATURE_ARITHMETIC_BIT | VK_SUBGROUP_FEATURE_BALLOT_BIT | VK_SUBGROUP_FEATURE_BASIC_BIT | @@ -1205,6 +1211,36 @@ nvk_get_device_properties(const struct nvk_instance *instance, /* VK_EXT_multi_draw */ .maxMultiDrawCount = UINT32_MAX, + /* VK_EXT_mesh_shader */ + .maxTaskWorkGroupTotalCount = 1 << 22, + .maxTaskWorkGroupCount = {1 << 22, UINT16_MAX, UINT16_MAX}, + .maxTaskWorkGroupInvocations = 128, + .maxTaskWorkGroupSize = {128, 128, 128}, + .maxTaskPayloadSize = 1 << 14, + .maxTaskSharedMemorySize = 1 << 15, + .maxTaskPayloadAndSharedMemorySize = 1 << 15, + .maxMeshWorkGroupTotalCount = 1 << 22, + .maxMeshWorkGroupCount = {1 << 22, UINT16_MAX, UINT16_MAX}, + .maxMeshWorkGroupInvocations = 128, + .maxMeshWorkGroupSize = {128, 128, 128}, + .maxMeshSharedMemorySize = 28672, + .maxMeshPayloadAndSharedMemorySize = 28672, + .maxMeshOutputMemorySize = 1 << 15, + .maxMeshPayloadAndOutputMemorySize = 48128, + .maxMeshOutputComponents = 128, + .maxMeshOutputVertices = 256, + .maxMeshOutputPrimitives = 256, + .maxMeshOutputLayers = 2048, + .maxMeshMultiviewViewCount = 4, + .meshOutputPerVertexGranularity = 32, + .meshOutputPerPrimitiveGranularity = 32, + .maxPreferredTaskWorkGroupInvocations = 32, + .maxPreferredMeshWorkGroupInvocations = 32, + .prefersLocalInvocationVertexOutput = false, + .prefersLocalInvocationPrimitiveOutput = false, + .prefersCompactVertexOutput = false, + .prefersCompactPrimitiveOutput = true, + /* VK_EXT_nested_command_buffer */ .maxCommandBufferNestingLevel = UINT32_MAX,