aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYiwei Zhang <zzyiwei@chromium.org>2024-03-01 20:49:54 -0800
committerYiwei Zhang <zzyiwei@chromium.org>2024-03-04 10:16:36 -0800
commit082915db782569efcf90f89fb844e42850034992 (patch)
treed735a7a1cdb260361d0ff50ec39eab023516dd6f
parentd0dd98ad80c8b627bceeb28c1dc6a0eb5475a8f2 (diff)
downloadvirglrenderer-082915db782569efcf90f89fb844e42850034992.tar.gz
vkr: add VK_KHR_fragment_shading_rate support
Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1343>
-rw-r--r--src/venus/vkr_command_buffer.c13
-rw-r--r--src/venus/vkr_common.c1
-rw-r--r--src/venus/vkr_physical_device.c18
3 files changed, 32 insertions, 0 deletions
diff --git a/src/venus/vkr_command_buffer.c b/src/venus/vkr_command_buffer.c
index e413405d..afff258b 100644
--- a/src/venus/vkr_command_buffer.c
+++ b/src/venus/vkr_command_buffer.c
@@ -1047,6 +1047,15 @@ vkr_dispatch_vkCmdSetTessellationDomainOriginEXT(
VKR_CMD_CALL(CmdSetTessellationDomainOriginEXT, args, args->domainOrigin);
}
+static void
+vkr_dispatch_vkCmdSetFragmentShadingRateKHR(
+ UNUSED struct vn_dispatch_context *dispatch,
+ struct vn_command_vkCmdSetFragmentShadingRateKHR *args)
+{
+ VKR_CMD_CALL(CmdSetFragmentShadingRateKHR, args, args->pFragmentSize,
+ args->combinerOps);
+}
+
void
vkr_context_init_command_pool_dispatch(struct vkr_context *ctx)
{
@@ -1238,4 +1247,8 @@ vkr_context_init_command_buffer_dispatch(struct vkr_context *ctx)
dispatch->dispatch_vkCmdSetSampleMaskEXT = vkr_dispatch_vkCmdSetSampleMaskEXT;
dispatch->dispatch_vkCmdSetTessellationDomainOriginEXT =
vkr_dispatch_vkCmdSetTessellationDomainOriginEXT;
+
+ /* VK_KHR_fragment_shading_rate */
+ dispatch->dispatch_vkCmdSetFragmentShadingRateKHR =
+ vkr_dispatch_vkCmdSetFragmentShadingRateKHR;
}
diff --git a/src/venus/vkr_common.c b/src/venus/vkr_common.c
index d9860977..bce43b3d 100644
--- a/src/venus/vkr_common.c
+++ b/src/venus/vkr_common.c
@@ -96,6 +96,7 @@ static const struct vn_info_extension_table vkr_extension_table = {
.KHR_external_fence_fd = true,
.KHR_external_memory_fd = true,
.KHR_external_semaphore_fd = true,
+ .KHR_fragment_shading_rate = true,
.KHR_pipeline_library = true,
.KHR_push_descriptor = true,
.KHR_shader_clock = true,
diff --git a/src/venus/vkr_physical_device.c b/src/venus/vkr_physical_device.c
index c463064b..e6670f23 100644
--- a/src/venus/vkr_physical_device.c
+++ b/src/venus/vkr_physical_device.c
@@ -681,6 +681,20 @@ vkr_dispatch_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(
args->physicalDevice, args->pTimeDomainCount, args->pTimeDomains);
}
+static void
+vkr_dispatch_vkGetPhysicalDeviceFragmentShadingRatesKHR(
+ UNUSED struct vn_dispatch_context *ctx,
+ struct vn_command_vkGetPhysicalDeviceFragmentShadingRatesKHR *args)
+{
+ struct vkr_physical_device *physical_dev =
+ vkr_physical_device_from_handle(args->physicalDevice);
+ struct vn_physical_device_proc_table *vk = &physical_dev->proc_table;
+
+ vn_replace_vkGetPhysicalDeviceFragmentShadingRatesKHR_args_handle(args);
+ args->ret = vk->GetPhysicalDeviceFragmentShadingRatesKHR(
+ args->physicalDevice, args->pFragmentShadingRateCount, args->pFragmentShadingRates);
+}
+
void
vkr_context_init_physical_device_dispatch(struct vkr_context *ctx)
{
@@ -732,4 +746,8 @@ vkr_context_init_physical_device_dispatch(struct vkr_context *ctx)
vkr_dispatch_vkGetPhysicalDeviceExternalFenceProperties;
dispatch->dispatch_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT =
vkr_dispatch_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT;
+
+ /* VK_KHR_fragment_shading_rate */
+ dispatch->dispatch_vkGetPhysicalDeviceFragmentShadingRatesKHR =
+ vkr_dispatch_vkGetPhysicalDeviceFragmentShadingRatesKHR;
}