nvk: Advertise VK_KHR_fragment_shading_rate

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31585>
This commit is contained in:
Faith Ekstrand
2024-10-04 19:39:22 -05:00
committed by Marge Bot
parent e45effe555
commit 2fb4aed9d8
4 changed files with 33 additions and 1 deletions

View File

@@ -523,7 +523,7 @@ Khronos extensions that are not part of any Vulkan version:
VK_KHR_external_semaphore_fd DONE (anv, dzn, hasvk, nvk, pvr, radv, tu, v3dv, vn)
VK_KHR_external_semaphore_win32 DONE (dzn)
VK_KHR_fragment_shader_barycentric DONE (nvk/Turing+, radv/gfx10.3+)
VK_KHR_fragment_shading_rate DONE (anv/gen11+, radv/gfx10.3+, vn)
VK_KHR_fragment_shading_rate DONE (anv/gen11+, nvk/Turing+, radv/gfx10.3+, vn)
VK_KHR_get_display_properties2 DONE (anv, nvk, pvr, radv, tu, v3dv)
VK_KHR_get_surface_capabilities2 DONE (anv, lvp, nvk, pvr, radv, tu, v3dv, vn)
VK_KHR_global_priority DONE (anv, radv, tu)

View File

@@ -23,3 +23,4 @@ VK_EXT_depth_clamp_control on anv, hasvk, nvk, radv
VK_KHR_shader_quad_control on nvk
GL_EXT_draw_buffers2 on etnaviv/HALTI5+
GL_ARB_draw_buffers_blend on etnaviv/HALTI5+
VK_KHR_fragment_shading_rate on NVK

View File

@@ -85,6 +85,9 @@ nvk_get_image_plane_format_features(struct nvk_physical_device *pdev,
p_format == PIPE_FORMAT_R64_UINT || p_format == PIPE_FORMAT_R64_SINT)
features |= VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT;
if (p_format == PIPE_FORMAT_R8_UINT && tiling == VK_IMAGE_TILING_OPTIMAL)
features |= VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR;
if (features != 0) {
features |= VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT;
features |= VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT;
@@ -273,6 +276,8 @@ vk_image_usage_to_format_features(VkImageUsageFlagBits usage_flag)
case VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT:
return VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT |
VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT;
case VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR:
return VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR;
default:
return 0;
}

View File

@@ -45,6 +45,7 @@
#include "clc3c0.h"
#include "clc597.h"
#include "clc5c0.h"
#include "clc797.h"
#include "clc997.h"
static bool
@@ -108,6 +109,7 @@ nvk_get_device_extensions(const struct nvk_instance *instance,
.KHR_format_feature_flags2 = true,
.KHR_fragment_shader_barycentric = info->cls_eng3d >= TURING_A &&
(nvk_nak_stages(info) & VK_SHADER_STAGE_FRAGMENT_BIT) != 0,
.KHR_fragment_shading_rate = info->cls_eng3d >= TURING_A,
.KHR_get_memory_requirements2 = true,
.KHR_image_format_list = true,
.KHR_imageless_framebuffer = true,
@@ -421,6 +423,11 @@ nvk_get_device_features(const struct nv_device_info *info,
.fragmentShaderBarycentric = info->cls_eng3d >= TURING_A &&
(nvk_nak_stages(info) & VK_SHADER_STAGE_FRAGMENT_BIT) != 0,
/* VK_KHR_fragment_shading_rate */
.pipelineFragmentShadingRate = info->cls_eng3d >= TURING_A,
.primitiveFragmentShadingRate = info->cls_eng3d >= TURING_A,
.attachmentFragmentShadingRate = info->cls_eng3d >= TURING_A,
/* VK_KHR_index_type_uint8 */
.indexTypeUint8 = true,
@@ -1100,6 +1107,25 @@ nvk_get_device_properties(const struct nvk_instance *instance,
/* VK_KHR_fragment_shader_barycentric */
.triStripVertexOrderIndependentOfProvokingVertex = false,
/* VK_KHR_fragment_shading_rate */
.minFragmentShadingRateAttachmentTexelSize = { 16, 16 },
.maxFragmentShadingRateAttachmentTexelSize = { 16, 16 },
.maxFragmentShadingRateAttachmentTexelSizeAspectRatio = 1,
.primitiveFragmentShadingRateWithMultipleViewports = info->cls_eng3d >= AMPERE_B,
.layeredShadingRateAttachments = true,
.fragmentShadingRateNonTrivialCombinerOps = true,
.maxFragmentSize = { 4, 4 },
.maxFragmentSizeAspectRatio = 2,
.maxFragmentShadingRateCoverageSamples = 16,
.maxFragmentShadingRateRasterizationSamples = 16,
.fragmentShadingRateWithShaderDepthStencilWrites = true,
.fragmentShadingRateWithSampleMask = true,
.fragmentShadingRateWithShaderSampleMask = true,
.fragmentShadingRateWithConservativeRasterization = true,
//.fragmentShadingRateWithFragmentShaderInterlock = true,
.fragmentShadingRateWithCustomSampleLocations = true,
.fragmentShadingRateStrictMultiplyCombiner = true,
/* VK_NV_shader_sm_builtins */
.shaderSMCount = (uint32_t)info->tpc_count * info->mp_per_tpc,
.shaderWarpsPerSM = info->max_warps_per_mp,