summaryrefslogtreecommitdiffstats
path: root/tools/gfx/vulkan
diff options
context:
space:
mode:
authorArielG-NV <159081215+ArielG-NV@users.noreply.github.com>2024-06-10 16:29:56 -0400
committerGitHub <noreply@github.com>2024-06-10 13:29:56 -0700
commit21bbebb19dfdbbee107b9fd9830e18d5fb6a573a (patch)
tree3792cb476b724f465c9b64b03787965b33b562f4 /tools/gfx/vulkan
parent72016f9201e4d7820f62e7ef78cee98ed1fc4da0 (diff)
Address glslang ordering requirments for 'derivative_group_*NV' (#4323)
* Address glslang ordering requirments for 'derivative_group_*NV' fixes: #4305 The solution is to emit some `layout`s after a module source is emitted. Added to slangs gfx backend code to enable the compute shader derivative extension for testing purposes. * address review * enable removed test --------- Co-authored-by: Yong He <yonghe@outlook.com>
Diffstat (limited to 'tools/gfx/vulkan')
-rw-r--r--tools/gfx/vulkan/vk-api.h4
-rw-r--r--tools/gfx/vulkan/vk-device.cpp11
2 files changed, 15 insertions, 0 deletions
diff --git a/tools/gfx/vulkan/vk-api.h b/tools/gfx/vulkan/vk-api.h
index 79d4f8cfd..dd3681537 100644
--- a/tools/gfx/vulkan/vk-api.h
+++ b/tools/gfx/vulkan/vk-api.h
@@ -287,6 +287,10 @@ struct VulkanExtendedFeatureProperties
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR
};
+ VkPhysicalDeviceComputeShaderDerivativesFeaturesNV computeShaderDerivativeFeatures = {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV
+ };
+
// Clock features
VkPhysicalDeviceShaderClockFeaturesKHR clockFeatures = {
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR
diff --git a/tools/gfx/vulkan/vk-device.cpp b/tools/gfx/vulkan/vk-device.cpp
index ad0924294..3583e2a1f 100644
--- a/tools/gfx/vulkan/vk-device.cpp
+++ b/tools/gfx/vulkan/vk-device.cpp
@@ -464,6 +464,10 @@ Result DeviceImpl::initVulkanInstanceAndDevice(
extendedFeatures.variablePointersFeatures.pNext = deviceFeatures2.pNext;
deviceFeatures2.pNext = &extendedFeatures.variablePointersFeatures;
+ // Compute shader derivative features.
+ extendedFeatures.computeShaderDerivativeFeatures.pNext = deviceFeatures2.pNext;
+ deviceFeatures2.pNext = &extendedFeatures.computeShaderDerivativeFeatures;
+
// Extended dynamic states
extendedFeatures.extendedDynamicStateFeatures.pNext = deviceFeatures2.pNext;
deviceFeatures2.pNext = &extendedFeatures.extendedDynamicStateFeatures;
@@ -696,6 +700,13 @@ Result DeviceImpl::initVulkanInstanceAndDevice(
VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME,
"variable-pointer"
);
+
+ SIMPLE_EXTENSION_FEATURE(
+ extendedFeatures.computeShaderDerivativeFeatures,
+ computeDerivativeGroupLinear,
+ VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME,
+ "computeDerivativeGroupLinear"
+ );
#undef SIMPLE_EXTENSION_FEATURE