diff options
| author | Ellie Hermaszewska <ellieh@nvidia.com> | 2024-10-29 14:49:26 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-29 14:49:26 +0800 |
| commit | f65d756bff8d4c5cbc15bd0322a2ae8e6b896a21 (patch) | |
| tree | ea1d61342cd29368e19135000ec2948813096205 /tools/gfx/vulkan/vk-device.cpp | |
| parent | a729c15e9dce9f5116a38afc66329ab2ca4cea54 (diff) | |
format
* format
* Minor test fixes
* enable checking cpp format in ci
Diffstat (limited to 'tools/gfx/vulkan/vk-device.cpp')
| -rw-r--r-- | tools/gfx/vulkan/vk-device.cpp | 698 |
1 files changed, 392 insertions, 306 deletions
diff --git a/tools/gfx/vulkan/vk-device.cpp b/tools/gfx/vulkan/vk-device.cpp index bc1641aff..68b8ba1db 100644 --- a/tools/gfx/vulkan/vk-device.cpp +++ b/tools/gfx/vulkan/vk-device.cpp @@ -1,30 +1,28 @@ // vk-device.cpp #include "vk-device.h" +#include "source/core/slang-platform.h" #include "vk-buffer.h" #include "vk-command-queue.h" #include "vk-fence.h" +#include "vk-helper-functions.h" +#include "vk-pipeline-dump-layer.h" #include "vk-query.h" #include "vk-render-pass.h" #include "vk-resource-views.h" #include "vk-sampler.h" -#include "vk-shader-object.h" #include "vk-shader-object-layout.h" +#include "vk-shader-object.h" #include "vk-shader-program.h" #include "vk-shader-table.h" #include "vk-swap-chain.h" #include "vk-transient-heap.h" #include "vk-vertex-layout.h" -#include "vk-pipeline-dump-layer.h" - -#include "vk-helper-functions.h" - -#include "source/core/slang-platform.h" #ifdef GFX_NV_AFTERMATH -# include "GFSDK_Aftermath.h" -# include "GFSDK_Aftermath_Defines.h" -# include "GFSDK_Aftermath_GpuCrashDump.h" +#include "GFSDK_Aftermath.h" +#include "GFSDK_Aftermath_Defines.h" +#include "GFSDK_Aftermath_GpuCrashDump.h" #endif namespace gfx @@ -150,12 +148,14 @@ static bool _hasAnySetBits(const T& val, size_t offset) { const uint8_t* ptr = reinterpret_cast<const uint8_t*>(&val); for (size_t i = offset; i < sizeof(val); i++) - if (ptr[i]) return true; + if (ptr[i]) + return true; return false; } Result DeviceImpl::initVulkanInstanceAndDevice( - const InteropHandle* handles, bool useValidationLayer) + const InteropHandle* handles, + bool useValidationLayer) { m_features.clear(); @@ -171,7 +171,9 @@ Result DeviceImpl::initVulkanInstanceAndDevice( switch (stype) { case StructType::RayTracingValidationDesc: - enableRayTracingValidation = static_cast<RayTracingValidationDesc*>(m_desc.extendedDescs[i])->enableRaytracingValidation; + enableRayTracingValidation = + static_cast<RayTracingValidationDesc*>(m_desc.extendedDescs[i]) + ->enableRaytracingValidation; break; } } @@ -180,7 +182,7 @@ Result DeviceImpl::initVulkanInstanceAndDevice( VkInstance instance = VK_NULL_HANDLE; if (handles[0].handleValue == 0) { - VkApplicationInfo applicationInfo = { VK_STRUCTURE_TYPE_APPLICATION_INFO }; + VkApplicationInfo applicationInfo = {VK_STRUCTURE_TYPE_APPLICATION_INFO}; applicationInfo.pApplicationName = "slang-gfx"; applicationInfo.pEngineName = "slang-gfx"; applicationInfo.apiVersion = VK_API_VERSION_1_1; @@ -215,7 +217,7 @@ Result DeviceImpl::initVulkanInstanceAndDevice( if (ENABLE_VALIDATION_LAYER || isGfxDebugLayerEnabled()) instanceExtensions.add(VK_EXT_DEBUG_REPORT_EXTENSION_NAME); - VkInstanceCreateInfo instanceCreateInfo = { VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO }; + VkInstanceCreateInfo instanceCreateInfo = {VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO}; #if SLANG_APPLE_FAMILY instanceCreateInfo.flags = VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR; #endif @@ -223,10 +225,11 @@ Result DeviceImpl::initVulkanInstanceAndDevice( instanceCreateInfo.enabledExtensionCount = (uint32_t)instanceExtensions.getCount(); instanceCreateInfo.ppEnabledExtensionNames = &instanceExtensions[0]; - const char* layerNames[] = { nullptr }; + const char* layerNames[] = {nullptr}; VkValidationFeaturesEXT validationFeatures = {}; - VkValidationFeatureEnableEXT enabledValidationFeatures[1] = { VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT }; + VkValidationFeatureEnableEXT enabledValidationFeatures[1] = { + VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT}; if (useValidationLayer) { // Depending on driver version, validation layer may or may not exist. @@ -245,9 +248,9 @@ Result DeviceImpl::initVulkanInstanceAndDevice( for (auto& layer : availableLayers) { if (strncmp( - layer.layerName, - "VK_LAYER_KHRONOS_validation", - sizeof("VK_LAYER_KHRONOS_validation")) == 0) + layer.layerName, + "VK_LAYER_KHRONOS_validation", + sizeof("VK_LAYER_KHRONOS_validation")) == 0) { layerNames[0] = "VK_LAYER_KHRONOS_validation"; break; @@ -260,9 +263,9 @@ Result DeviceImpl::initVulkanInstanceAndDevice( for (auto& layer : availableLayers) { if (strncmp( - layer.layerName, - "VK_LAYER_LUNARG_standard_validation", - sizeof("VK_LAYER_LUNARG_standard_validation")) == 0) + layer.layerName, + "VK_LAYER_LUNARG_standard_validation", + sizeof("VK_LAYER_LUNARG_standard_validation")) == 0) { layerNames[0] = "VK_LAYER_LUNARG_standard_validation"; break; @@ -281,7 +284,7 @@ Result DeviceImpl::initVulkanInstanceAndDevice( instanceCreateInfo.pNext = &validationFeatures; } } - uint32_t apiVersionsToTry[] = { VK_API_VERSION_1_2, VK_API_VERSION_1_1, VK_API_VERSION_1_0 }; + uint32_t apiVersionsToTry[] = {VK_API_VERSION_1_2, VK_API_VERSION_1_1, VK_API_VERSION_1_0}; for (auto apiVersion : apiVersionsToTry) { applicationInfo.apiVersion = apiVersion; @@ -290,7 +293,7 @@ Result DeviceImpl::initVulkanInstanceAndDevice( // the layer is known earlier). It might, for example, be absent // from the system library search path, and not referenced with an // absolute path in VkLayer_khronos_validation.json. - const auto r = m_api.vkCreateInstance(&instanceCreateInfo, nullptr, &instance) ; + const auto r = m_api.vkCreateInstance(&instanceCreateInfo, nullptr, &instance); if (r == VK_SUCCESS) { break; @@ -311,13 +314,16 @@ Result DeviceImpl::initVulkanInstanceAndDevice( VK_DEBUG_REPORT_ERROR_BIT_EXT | VK_DEBUG_REPORT_WARNING_BIT_EXT; VkDebugReportCallbackCreateInfoEXT debugCreateInfo = { - VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT }; + VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT}; debugCreateInfo.pfnCallback = &debugMessageCallback; debugCreateInfo.pUserData = this; debugCreateInfo.flags = debugFlags; SLANG_VK_RETURN_ON_FAIL(m_api.vkCreateDebugReportCallbackEXT( - instance, &debugCreateInfo, nullptr, &m_debugReportCallback)); + instance, + &debugCreateInfo, + nullptr, + &m_debugReportCallback)); } VkPhysicalDevice physicalDevice = VK_NULL_HANDLE; @@ -330,7 +336,9 @@ Result DeviceImpl::initVulkanInstanceAndDevice( List<VkPhysicalDevice> physicalDevices; physicalDevices.setCount(numPhysicalDevices); SLANG_VK_RETURN_ON_FAIL(m_api.vkEnumeratePhysicalDevices( - instance, &numPhysicalDevices, physicalDevices.getBuffer())); + instance, + &numPhysicalDevices, + physicalDevices.getBuffer())); // Use first physical device by default. Index selectedDeviceIndex = 0; @@ -373,12 +381,14 @@ Result DeviceImpl::initVulkanInstanceAndDevice( // Query the available extensions uint32_t extensionCount = 0; - m_api.vkEnumerateDeviceExtensionProperties( - m_api.m_physicalDevice, NULL, &extensionCount, NULL); + m_api.vkEnumerateDeviceExtensionProperties(m_api.m_physicalDevice, NULL, &extensionCount, NULL); Slang::List<VkExtensionProperties> extensions; extensions.setCount(extensionCount); m_api.vkEnumerateDeviceExtensionProperties( - m_api.m_physicalDevice, NULL, &extensionCount, extensions.getBuffer()); + m_api.m_physicalDevice, + NULL, + &extensionCount, + extensions.getBuffer()); HashSet<String> extensionNames; for (const auto& e : extensions) extensionNames.add(e.extensionName); @@ -390,7 +400,7 @@ Result DeviceImpl::initVulkanInstanceAndDevice( deviceExtensions.add("VK_KHR_portability_subset"); #endif - VkDeviceCreateInfo deviceCreateInfo = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO }; + VkDeviceCreateInfo deviceCreateInfo = {VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO}; deviceCreateInfo.queueCreateInfoCount = 1; deviceCreateInfo.pEnabledFeatures = &m_api.m_deviceFeatures; @@ -480,7 +490,7 @@ Result DeviceImpl::initVulkanInstanceAndDevice( // Variable pointer features. extendedFeatures.variablePointersFeatures.pNext = deviceFeatures2.pNext; deviceFeatures2.pNext = &extendedFeatures.variablePointersFeatures; - + // Compute shader derivative features. extendedFeatures.computeShaderDerivativeFeatures.pNext = deviceFeatures2.pNext; deviceFeatures2.pNext = &extendedFeatures.computeShaderDerivativeFeatures; @@ -501,7 +511,7 @@ Result DeviceImpl::initVulkanInstanceAndDevice( extendedFeatures.clockFeatures.pNext = deviceFeatures2.pNext; deviceFeatures2.pNext = &extendedFeatures.clockFeatures; - // Atomic Float + // Atomic Float // To detect atomic float we need // https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPhysicalDeviceShaderAtomicFloatFeaturesEXT.html @@ -564,12 +574,14 @@ Result DeviceImpl::initVulkanInstanceAndDevice( m_features.add("half"); } - const auto addFeatureExtension = [&](const bool feature, auto& featureStruct, const char* extension = nullptr){ - if(!feature) + const auto addFeatureExtension = + [&](const bool feature, auto& featureStruct, const char* extension = nullptr) + { + if (!feature) return false; - if(extension) + if (extension) { - if(!extensionNames.contains(extension)) + if (!extensionNames.contains(extension)) return false; deviceExtensions.add(extension); } @@ -585,51 +597,47 @@ Result DeviceImpl::initVulkanInstanceAndDevice( // linked into the deviceCreateInfo chain and the features added to the // supported features list. #define SIMPLE_EXTENSION_FEATURE(s, m, e, ...) \ - do{ \ - const static auto fs = {__VA_ARGS__}; \ - if(addFeatureExtension(s.m, s, e)) \ - for(const auto& p : fs) \ - m_features.add(p); \ - } while(0) + do \ + { \ + const static auto fs = {__VA_ARGS__}; \ + if (addFeatureExtension(s.m, s, e)) \ + for (const auto& p : fs) \ + m_features.add(p); \ + } while (0) SIMPLE_EXTENSION_FEATURE( extendedFeatures.storage16BitFeatures, storageBuffer16BitAccess, VK_KHR_16BIT_STORAGE_EXTENSION_NAME, - "16-bit-storage" - ); + "16-bit-storage"); SIMPLE_EXTENSION_FEATURE( extendedFeatures.atomicFloatFeatures, shaderBufferFloat32Atomics, VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME, - "atomic-float" - ); + "atomic-float"); SIMPLE_EXTENSION_FEATURE( extendedFeatures.atomicFloat2Features, shaderBufferFloat16Atomics, VK_EXT_SHADER_ATOMIC_FLOAT_2_EXTENSION_NAME, - "atomic-float-2" - ); + "atomic-float-2"); SIMPLE_EXTENSION_FEATURE( extendedFeatures.imageInt64AtomicFeatures, shaderImageInt64Atomics, VK_EXT_SHADER_IMAGE_ATOMIC_INT64_EXTENSION_NAME, - "image-atomic-int64" - ); + "image-atomic-int64"); SIMPLE_EXTENSION_FEATURE( extendedFeatures.extendedDynamicStateFeatures, extendedDynamicState, VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME, - "extended-dynamic-states" - ); + "extended-dynamic-states"); - if (extendedFeatures.accelerationStructureFeatures.accelerationStructure - && extensionNames.contains(VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME) - && extensionNames.contains(VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME)) + if (extendedFeatures.accelerationStructureFeatures.accelerationStructure && + extensionNames.contains(VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME) && + extensionNames.contains(VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME)) { extendedFeatures.accelerationStructureFeatures.pNext = (void*)deviceCreateInfo.pNext; deviceCreateInfo.pNext = &extendedFeatures.accelerationStructureFeatures; @@ -644,89 +652,78 @@ Result DeviceImpl::initVulkanInstanceAndDevice( rayQuery, VK_KHR_RAY_QUERY_EXTENSION_NAME, "ray-query", - "ray-tracing" - ); + "ray-tracing"); SIMPLE_EXTENSION_FEATURE( extendedFeatures.rayTracingPipelineFeatures, rayTracingPipeline, VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME, - "ray-tracing-pipeline" - ); + "ray-tracing-pipeline"); } SIMPLE_EXTENSION_FEATURE( extendedFeatures.inlineUniformBlockFeatures, inlineUniformBlock, VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME, - "inline-uniform-block", - ); + "inline-uniform-block", ); SIMPLE_EXTENSION_FEATURE( extendedFeatures.robustness2Features, nullDescriptor, VK_EXT_ROBUSTNESS_2_EXTENSION_NAME, - "robustness2", - ); + "robustness2", ); SIMPLE_EXTENSION_FEATURE( extendedFeatures.clockFeatures, shaderDeviceClock, VK_KHR_SHADER_CLOCK_EXTENSION_NAME, - "realtime-clock" - ); + "realtime-clock"); SIMPLE_EXTENSION_FEATURE( extendedFeatures.meshShaderFeatures, meshShader, VK_EXT_MESH_SHADER_EXTENSION_NAME, - "mesh-shader" - ); + "mesh-shader"); SIMPLE_EXTENSION_FEATURE( extendedFeatures.multiviewFeatures, multiview, VK_KHR_MULTIVIEW_EXTENSION_NAME, - "multiview" - ); + "multiview"); SIMPLE_EXTENSION_FEATURE( extendedFeatures.fragmentShadingRateFeatures, primitiveFragmentShadingRate, VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME, - "fragment-shading-rate" - ); + "fragment-shading-rate"); SIMPLE_EXTENSION_FEATURE( extendedFeatures.rayTracingInvocationReorderFeatures, rayTracingInvocationReorder, VK_NV_RAY_TRACING_INVOCATION_REORDER_EXTENSION_NAME, - "shader-execution-reorder" - ); + "shader-execution-reorder"); SIMPLE_EXTENSION_FEATURE( extendedFeatures.variablePointersFeatures, variablePointers, VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME, - "variable-pointer" - ); - + "variable-pointer"); + SIMPLE_EXTENSION_FEATURE( extendedFeatures.computeShaderDerivativeFeatures, computeDerivativeGroupLinear, VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME, - "computeDerivativeGroupLinear" - ); + "computeDerivativeGroupLinear"); // Only enable raytracing validation if both requested and supported - if(enableRayTracingValidation && extendedFeatures.rayTracingValidationFeatures.rayTracingValidation) + if (enableRayTracingValidation && + extendedFeatures.rayTracingValidationFeatures.rayTracingValidation) { SIMPLE_EXTENSION_FEATURE( extendedFeatures.rayTracingValidationFeatures, rayTracingValidation, VK_NV_RAY_TRACING_VALIDATION_EXTENSION_NAME, - "ray-tracing-validation" - ); + "ray-tracing-validation"); } #undef SIMPLE_EXTENSION_FEATURE @@ -752,11 +749,11 @@ Result DeviceImpl::initVulkanInstanceAndDevice( } VkPhysicalDeviceProperties2 extendedProps = { - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2 }; + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2}; VkPhysicalDeviceRayTracingPipelinePropertiesKHR rtProps = { - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR }; + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR}; VkPhysicalDeviceSubgroupProperties subgroupProps = { - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES }; + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES}; rtProps.pNext = extendedProps.pNext; extendedProps.pNext = &rtProps; @@ -767,16 +764,12 @@ Result DeviceImpl::initVulkanInstanceAndDevice( m_api.m_rtProperties = rtProps; // Approximate DX12's WaveOps boolean - if(subgroupProps.supportedOperations & - ( VK_SUBGROUP_FEATURE_BASIC_BIT - | VK_SUBGROUP_FEATURE_VOTE_BIT - | VK_SUBGROUP_FEATURE_ARITHMETIC_BIT - | VK_SUBGROUP_FEATURE_BALLOT_BIT - | VK_SUBGROUP_FEATURE_SHUFFLE_BIT - | VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT - | VK_SUBGROUP_FEATURE_CLUSTERED_BIT - | VK_SUBGROUP_FEATURE_QUAD_BIT - | VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV)) + if (subgroupProps.supportedOperations & + (VK_SUBGROUP_FEATURE_BASIC_BIT | VK_SUBGROUP_FEATURE_VOTE_BIT | + VK_SUBGROUP_FEATURE_ARITHMETIC_BIT | VK_SUBGROUP_FEATURE_BALLOT_BIT | + VK_SUBGROUP_FEATURE_SHUFFLE_BIT | VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT | + VK_SUBGROUP_FEATURE_CLUSTERED_BIT | VK_SUBGROUP_FEATURE_QUAD_BIT | + VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV)) { m_features.add("wave-ops"); } @@ -860,13 +853,32 @@ Result DeviceImpl::initVulkanInstanceAndDevice( // Derive approximate DX12 shader model. const char* featureTable[] = { - "sm_6_0", "wave-ops", "atomic-int64", nullptr, - "sm_6_1", "barycentrics", "multiview", nullptr, - "sm_6_2", "half", nullptr, - "sm_6_3", "ray-tracing-pipeline", nullptr, - "sm_6_4", "fragment-shading-rate", nullptr, - "sm_6_5", "ray-query", "mesh-shader", nullptr, - "sm_6_6", "wave-ops", "atomic-float", "atomic-int64", nullptr, + "sm_6_0", + "wave-ops", + "atomic-int64", + nullptr, + "sm_6_1", + "barycentrics", + "multiview", + nullptr, + "sm_6_2", + "half", + nullptr, + "sm_6_3", + "ray-tracing-pipeline", + nullptr, + "sm_6_4", + "fragment-shading-rate", + nullptr, + "sm_6_5", + "ray-query", + "mesh-shader", + nullptr, + "sm_6_6", + "wave-ops", + "atomic-float", + "atomic-int64", + nullptr, nullptr, }; @@ -924,11 +936,17 @@ Result DeviceImpl::initVulkanInstanceAndDevice( // Set up device creation info for Aftermath feature flag configuration. VkDeviceDiagnosticsConfigFlagsNV aftermathFlags = - VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV | // Enable automatic call stack checkpoints. - VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV | // Enable tracking of resources. - VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV; // Generate debug information for shaders. - // Not available on the version of Vulkan currently building with. - //VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_ERROR_REPORTING_BIT_NV; // Enable additional runtime shader error reporting. + VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV | // Enable automatic + // call stack + // checkpoints. + VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV | // Enable tracking of + // resources. + VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV; // Generate debug + // information for + // shaders. + // Not available on the version of Vulkan currently building with. + // VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_ERROR_REPORTING_BIT_NV; // Enable additional + // runtime shader error reporting. aftermathInfo.sType = VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV; aftermathInfo.flags = aftermathFlags; @@ -941,7 +959,7 @@ Result DeviceImpl::initVulkanInstanceAndDevice( if (handles[2].handleValue == 0) { float queuePriority = 0.0f; - VkDeviceQueueCreateInfo queueCreateInfo = { VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO }; + VkDeviceQueueCreateInfo queueCreateInfo = {VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO}; queueCreateInfo.queueFamilyIndex = m_queueFamilyIndex; queueCreateInfo.queueCount = 1; queueCreateInfo.pQueuePriorities = &queuePriority; @@ -978,7 +996,7 @@ SlangResult DeviceImpl::initialize(const Desc& desc) m_info.bindingStyle = BindingStyle::Vulkan; m_info.projectionStyle = ProjectionStyle::Vulkan; m_info.deviceType = DeviceType::Vulkan; - static const float kIdentity[] = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 }; + static const float kIdentity[] = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}; ::memcpy(m_info.identityProjectionMatrix, kIdentity, sizeof(kIdentity)); } @@ -997,7 +1015,8 @@ SlangResult DeviceImpl::initialize(const Desc& desc) continue; descriptorSetAllocator.m_api = &m_api; initDeviceResult = initVulkanInstanceAndDevice( - desc.existingDeviceHandles.handles, ENABLE_VALIDATION_LAYER != 0 || isGfxDebugLayerEnabled()); + desc.existingDeviceHandles.handles, + ENABLE_VALIDATION_LAYER != 0 || isGfxDebugLayerEnabled()); if (initDeviceResult == SLANG_OK) break; } @@ -1015,11 +1034,11 @@ SlangResult DeviceImpl::initialize(const Desc& desc) desc.extendedDescs, SLANG_SPIRV, "sm_5_1", - makeArray(slang::PreprocessorMacroDesc{ "__VK__", "1" }).getView())); + makeArray(slang::PreprocessorMacroDesc{"__VK__", "1"}).getView())); // Create default sampler. { - VkSamplerCreateInfo samplerInfo = { VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO }; + VkSamplerCreateInfo samplerInfo = {VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO}; samplerInfo.magFilter = VK_FILTER_NEAREST; samplerInfo.minFilter = VK_FILTER_NEAREST; samplerInfo.addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER; @@ -1056,12 +1075,19 @@ SlangResult DeviceImpl::initialize(const Desc& desc) return SLANG_OK; } -void DeviceImpl::waitForGpu() { m_deviceQueue.flushAndWait(); } +void DeviceImpl::waitForGpu() +{ + m_deviceQueue.flushAndWait(); +} -SLANG_NO_THROW const DeviceInfo& SLANG_MCALL DeviceImpl::getDeviceInfo() const { return m_info; } +SLANG_NO_THROW const DeviceInfo& SLANG_MCALL DeviceImpl::getDeviceInfo() const +{ + return m_info; +} Result DeviceImpl::createTransientResourceHeap( - const ITransientResourceHeap::Desc& desc, ITransientResourceHeap** outHeap) + const ITransientResourceHeap::Desc& desc, + ITransientResourceHeap** outHeap) { RefPtr<TransientResourceHeapImpl> result = new TransientResourceHeapImpl(); SLANG_RETURN_ON_FAIL(result->init(desc, this)); @@ -1085,7 +1111,9 @@ Result DeviceImpl::createCommandQueue(const ICommandQueue::Desc& desc, ICommandQ } Result DeviceImpl::createSwapchain( - const ISwapchain::Desc& desc, WindowHandle window, ISwapchain** outSwapchain) + const ISwapchain::Desc& desc, + WindowHandle window, + ISwapchain** outSwapchain) { #if !defined(SLANG_ENABLE_XLIB) if (window.type == WindowHandle::Type::XLibHandle) @@ -1101,7 +1129,8 @@ Result DeviceImpl::createSwapchain( } Result DeviceImpl::createFramebufferLayout( - const IFramebufferLayout::Desc& desc, IFramebufferLayout** outLayout) + const IFramebufferLayout::Desc& desc, + IFramebufferLayout** outLayout) { RefPtr<FramebufferLayoutImpl> layout = new FramebufferLayoutImpl(); SLANG_RETURN_ON_FAIL(layout->init(this, desc)); @@ -1110,7 +1139,8 @@ Result DeviceImpl::createFramebufferLayout( } Result DeviceImpl::createRenderPassLayout( - const IRenderPassLayout::Desc& desc, IRenderPassLayout** outRenderPassLayout) + const IRenderPassLayout::Desc& desc, + IRenderPassLayout** outRenderPassLayout) { RefPtr<RenderPassLayoutImpl> result = new RenderPassLayoutImpl(); SLANG_RETURN_ON_FAIL(result->init(this, desc)); @@ -1196,16 +1226,24 @@ SlangResult DeviceImpl::readTextureResource( region.bufferRowLength = 0; region.bufferImageHeight = 0; - region.imageSubresource.aspectMask = getAspectMaskFromFormat(VulkanUtil::getVkFormat(desc->format)); + region.imageSubresource.aspectMask = + getAspectMaskFromFormat(VulkanUtil::getVkFormat(desc->format)); region.imageSubresource.mipLevel = uint32_t(j); region.imageSubresource.baseArrayLayer = i; region.imageSubresource.layerCount = 1; - region.imageOffset = { 0, 0, 0 }; + region.imageOffset = {0, 0, 0}; region.imageExtent = { - uint32_t(mipSize.width), uint32_t(mipSize.height), uint32_t(mipSize.depth) }; + uint32_t(mipSize.width), + uint32_t(mipSize.height), + uint32_t(mipSize.depth)}; m_api.vkCmdCopyImageToBuffer( - commandBuffer, srcImage, srcImageLayout, staging.m_buffer, 1, ®ion); + commandBuffer, + srcImage, + srcImageLayout, + staging.m_buffer, + 1, + ®ion); dstOffset += rowSizeInBytes * numRows * mipSize.depth; } @@ -1231,7 +1269,10 @@ SlangResult DeviceImpl::readTextureResource( } SlangResult DeviceImpl::readBufferResource( - IBufferResource* inBuffer, Offset offset, Size size, ISlangBlob** outBlob) + IBufferResource* inBuffer, + Offset offset, + Size size, + ISlangBlob** outBlob) { BufferResourceImpl* buffer = static_cast<BufferResourceImpl*>(inBuffer); @@ -1280,7 +1321,7 @@ Result DeviceImpl::getAccelerationStructurePrebuildInfo( return SLANG_E_NOT_AVAILABLE; } VkAccelerationStructureBuildSizesInfoKHR sizeInfo = { - VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR }; + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR}; AccelerationStructureBuildGeometryInfoBuilder geomInfoBuilder; SLANG_RETURN_ON_FAIL(geomInfoBuilder.build(buildInputs, getDebugCallback())); m_api.vkGetAccelerationStructureBuildSizesKHR( @@ -1296,7 +1337,8 @@ Result DeviceImpl::getAccelerationStructurePrebuildInfo( } Result DeviceImpl::createAccelerationStructure( - const IAccelerationStructure::CreateDesc& desc, IAccelerationStructure** outAS) + const IAccelerationStructure::CreateDesc& desc, + IAccelerationStructure** outAS) { if (!m_api.vkCreateAccelerationStructureKHR) { @@ -1309,7 +1351,7 @@ Result DeviceImpl::createAccelerationStructure( resultAS->m_device = this; resultAS->m_desc.type = IResourceView::Type::AccelerationStructure; VkAccelerationStructureCreateInfoKHR createInfo = { - VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR }; + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR}; createInfo.buffer = resultAS->m_buffer->m_buffer.m_buffer; createInfo.offset = desc.offset; createInfo.size = desc.size; @@ -1330,7 +1372,10 @@ Result DeviceImpl::createAccelerationStructure( } SLANG_VK_RETURN_ON_FAIL(m_api.vkCreateAccelerationStructureKHR( - m_api.m_device, &createInfo, nullptr, &resultAS->m_vkHandle)); + m_api.m_device, + &createInfo, + nullptr, + &resultAS->m_vkHandle)); returnComPtr(outAS, resultAS); return SLANG_OK; } @@ -1367,7 +1412,16 @@ void DeviceImpl::_transitionImageLayout( VkPipelineStageFlags destinationStage = calcPipelineStageFlagsFromImageLayout(newLayout); m_api.vkCmdPipelineBarrier( - commandBuffer, sourceStage, destinationStage, 0, 0, nullptr, 0, nullptr, 1, &barrier); + commandBuffer, + sourceStage, + destinationStage, + 0, + 0, + nullptr, + 0, + nullptr, + 1, + &barrier); } uint32_t DeviceImpl::getQueueFamilyIndex(ICommandQueue::QueueType queueType) @@ -1375,8 +1429,7 @@ uint32_t DeviceImpl::getQueueFamilyIndex(ICommandQueue::QueueType queueType) switch (queueType) { case ICommandQueue::QueueType::Graphics: - default: - return m_queueFamilyIndex; + default: return m_queueFamilyIndex; } } @@ -1392,7 +1445,9 @@ void DeviceImpl::_transitionImageLayout( } Result DeviceImpl::getTextureAllocationInfo( - const ITextureResource::Desc& descIn, Size* outSize, Size* outAlignment) + const ITextureResource::Desc& descIn, + Size* outSize, + Size* outAlignment) { TextureResource::Desc desc = fixupTextureDesc(descIn); @@ -1404,47 +1459,47 @@ Result DeviceImpl::getTextureAllocationInfo( } const int arraySize = calcEffectiveArraySize(desc); - VkImageCreateInfo imageInfo = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO }; + VkImageCreateInfo imageInfo = {VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO}; switch (desc.type) { case IResource::Type::Texture1D: - { - imageInfo.imageType = VK_IMAGE_TYPE_1D; - imageInfo.extent = VkExtent3D{ uint32_t(descIn.size.width), 1, 1 }; - break; - } + { + imageInfo.imageType = VK_IMAGE_TYPE_1D; + imageInfo.extent = VkExtent3D{uint32_t(descIn.size.width), 1, 1}; + break; + } case IResource::Type::Texture2D: - { - imageInfo.imageType = VK_IMAGE_TYPE_2D; - imageInfo.extent = - VkExtent3D{ uint32_t(descIn.size.width), uint32_t(descIn.size.height), 1 }; - break; - } + { + imageInfo.imageType = VK_IMAGE_TYPE_2D; + imageInfo.extent = + VkExtent3D{uint32_t(descIn.size.width), uint32_t(descIn.size.height), 1}; + break; + } case IResource::Type::TextureCube: - { - imageInfo.imageType = VK_IMAGE_TYPE_2D; - imageInfo.extent = - VkExtent3D{ uint32_t(descIn.size.width), uint32_t(descIn.size.height), 1 }; - imageInfo.flags = VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT; - break; - } + { + imageInfo.imageType = VK_IMAGE_TYPE_2D; + imageInfo.extent = + VkExtent3D{uint32_t(descIn.size.width), uint32_t(descIn.size.height), 1}; + imageInfo.flags = VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT; + break; + } case IResource::Type::Texture3D: - { - // Can't have an array and 3d texture - assert(desc.arraySize <= 1); - - imageInfo.imageType = VK_IMAGE_TYPE_3D; - imageInfo.extent = VkExtent3D{ - uint32_t(descIn.size.width), - uint32_t(descIn.size.height), - uint32_t(descIn.size.depth) }; - break; - } + { + // Can't have an array and 3d texture + assert(desc.arraySize <= 1); + + imageInfo.imageType = VK_IMAGE_TYPE_3D; + imageInfo.extent = VkExtent3D{ + uint32_t(descIn.size.width), + uint32_t(descIn.size.height), + uint32_t(descIn.size.depth)}; + break; + } default: - { - assert(!"Unhandled type"); - return SLANG_FAIL; - } + { + assert(!"Unhandled type"); + return SLANG_FAIL; + } } imageInfo.mipLevels = desc.numMipLevels; @@ -1497,47 +1552,47 @@ Result DeviceImpl::createTextureResource( texture->m_vkformat = format; // Create the image - VkImageCreateInfo imageInfo = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO }; + VkImageCreateInfo imageInfo = {VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO}; switch (desc.type) { case IResource::Type::Texture1D: - { - imageInfo.imageType = VK_IMAGE_TYPE_1D; - imageInfo.extent = VkExtent3D{ uint32_t(descIn.size.width), 1, 1 }; - break; - } + { + imageInfo.imageType = VK_IMAGE_TYPE_1D; + imageInfo.extent = VkExtent3D{uint32_t(descIn.size.width), 1, 1}; + break; + } case IResource::Type::Texture2D: - { - imageInfo.imageType = VK_IMAGE_TYPE_2D; - imageInfo.extent = - VkExtent3D{ uint32_t(descIn.size.width), uint32_t(descIn.size.height), 1 }; - break; - } + { + imageInfo.imageType = VK_IMAGE_TYPE_2D; + imageInfo.extent = + VkExtent3D{uint32_t(descIn.size.width), uint32_t(descIn.size.height), 1}; + break; + } case IResource::Type::TextureCube: - { - imageInfo.imageType = VK_IMAGE_TYPE_2D; - imageInfo.extent = - VkExtent3D{ uint32_t(descIn.size.width), uint32_t(descIn.size.height), 1 }; - imageInfo.flags = VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT; - break; - } + { + imageInfo.imageType = VK_IMAGE_TYPE_2D; + imageInfo.extent = + VkExtent3D{uint32_t(descIn.size.width), uint32_t(descIn.size.height), 1}; + imageInfo.flags = VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT; + break; + } case IResource::Type::Texture3D: - { - // Can't have an array and 3d texture - assert(desc.arraySize <= 1); - - imageInfo.imageType = VK_IMAGE_TYPE_3D; - imageInfo.extent = VkExtent3D{ - uint32_t(descIn.size.width), - uint32_t(descIn.size.height), - uint32_t(descIn.size.depth) }; - break; - } + { + // Can't have an array and 3d texture + assert(desc.arraySize <= 1); + + imageInfo.imageType = VK_IMAGE_TYPE_3D; + imageInfo.extent = VkExtent3D{ + uint32_t(descIn.size.width), + uint32_t(descIn.size.height), + uint32_t(descIn.size.depth)}; + break; + } default: - { - assert(!"Unhandled type"); - return SLANG_FAIL; - } + { + assert(!"Unhandled type"); + return SLANG_FAIL; + } } imageInfo.mipLevels = desc.numMipLevels; @@ -1552,7 +1607,7 @@ Result DeviceImpl::createTextureResource( imageInfo.samples = (VkSampleCountFlagBits)desc.sampleDesc.numSamples; VkExternalMemoryImageCreateInfo externalMemoryImageCreateInfo = { - VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO }; + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO}; VkExternalMemoryHandleTypeFlags extMemoryHandleType = #if SLANG_WINDOWS_FAMILY VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT; @@ -1578,15 +1633,15 @@ Result DeviceImpl::createTextureResource( VkMemoryPropertyFlags actualMemoryProperites = m_api.m_deviceMemoryProperties.memoryTypes[memoryTypeIndex].propertyFlags; - VkMemoryAllocateInfo allocInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO }; + VkMemoryAllocateInfo allocInfo = {VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO}; allocInfo.allocationSize = memRequirements.size; allocInfo.memoryTypeIndex = memoryTypeIndex; #if SLANG_WINDOWS_FAMILY VkExportMemoryWin32HandleInfoKHR exportMemoryWin32HandleInfo = { - VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR }; + VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR}; #endif VkExportMemoryAllocateInfoKHR exportMemoryAllocateInfo = { - VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR }; + VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR}; if (descIn.isShared) { #if SLANG_WINDOWS_FAMILY @@ -1598,8 +1653,8 @@ Result DeviceImpl::createTextureResource( exportMemoryAllocateInfo.pNext = extMemoryHandleType & VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR - ? &exportMemoryWin32HandleInfo - : nullptr; + ? &exportMemoryWin32HandleInfo + : nullptr; #endif exportMemoryAllocateInfo.handleTypes = extMemoryHandleType; allocInfo.pNext = &exportMemoryAllocateInfo; @@ -1705,7 +1760,7 @@ Result DeviceImpl::createTextureResource( VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); - if(desc.sampleDesc.numSamples != 1) + if (desc.sampleDesc.numSamples != 1) { // Handle senario where texture is sampled. We cannot use // a simple buffer copy for sampled textures. ClearColorImage @@ -1714,70 +1769,81 @@ Result DeviceImpl::createTextureResource( gfxGetFormatInfo(desc.format, &formatInfo); uint32_t data = 0; VkClearColorValue clearColor; - switch(formatInfo.channelType) + switch (formatInfo.channelType) { case SLANG_SCALAR_TYPE_INT32: - for(int i = 0; i < 4; i++) - clearColor.int32[i] = *reinterpret_cast<int32_t*>(const_cast<void*>(initData->data)); + for (int i = 0; i < 4; i++) + clearColor.int32[i] = + *reinterpret_cast<int32_t*>(const_cast<void*>(initData->data)); break; case SLANG_SCALAR_TYPE_UINT32: - for(int i = 0; i < 4; i++) - clearColor.uint32[i] = *reinterpret_cast<uint32_t*>(const_cast<void*>(initData->data)); + for (int i = 0; i < 4; i++) + clearColor.uint32[i] = + *reinterpret_cast<uint32_t*>(const_cast<void*>(initData->data)); break; case SLANG_SCALAR_TYPE_INT64: - { - for(int i = 0; i < 4; i++) - clearColor.int32[i] = int32_t(*reinterpret_cast<int64_t*>(const_cast<void*>(initData->data))); - break; - } + { + for (int i = 0; i < 4; i++) + clearColor.int32[i] = + int32_t(*reinterpret_cast<int64_t*>(const_cast<void*>(initData->data))); + break; + } case SLANG_SCALAR_TYPE_UINT64: - { - for(int i = 0; i < 4; i++) - clearColor.uint32[i] = uint32_t(*reinterpret_cast<uint64_t*>(const_cast<void*>(initData->data))); - break; - } + { + for (int i = 0; i < 4; i++) + clearColor.uint32[i] = uint32_t( + *reinterpret_cast<uint64_t*>(const_cast<void*>(initData->data))); + break; + } case SLANG_SCALAR_TYPE_FLOAT16: - { - for(int i = 0; i < 4; i++) - clearColor.float32[i] = HalfToFloat(*reinterpret_cast<uint16_t*>(const_cast<void*>(initData->data))); - break; - } + { + for (int i = 0; i < 4; i++) + clearColor.float32[i] = HalfToFloat( + *reinterpret_cast<uint16_t*>(const_cast<void*>(initData->data))); + break; + } case SLANG_SCALAR_TYPE_FLOAT32: - { - for(int i = 0; i < 4; i++) - clearColor.float32[i] = (*reinterpret_cast<float*>(const_cast<void*>(initData->data))); - break; - } + { + for (int i = 0; i < 4; i++) + clearColor.float32[i] = + (*reinterpret_cast<float*>(const_cast<void*>(initData->data))); + break; + } case SLANG_SCALAR_TYPE_FLOAT64: - { - for(int i = 0; i < 4; i++) - clearColor.float32[i] = float(*reinterpret_cast<double*>(const_cast<void*>(initData->data))); - break; - } + { + for (int i = 0; i < 4; i++) + clearColor.float32[i] = + float(*reinterpret_cast<double*>(const_cast<void*>(initData->data))); + break; + } case SLANG_SCALAR_TYPE_INT8: - { - for(int i = 0; i < 4; i++) - clearColor.int32[i] = int32_t(*reinterpret_cast<int8_t*>(const_cast<void*>(initData->data))); - break; - } + { + for (int i = 0; i < 4; i++) + clearColor.int32[i] = + int32_t(*reinterpret_cast<int8_t*>(const_cast<void*>(initData->data))); + break; + } case SLANG_SCALAR_TYPE_UINT8: - { - for(int i = 0; i < 4; i++) - clearColor.uint32[i] = uint32_t(*reinterpret_cast<uint8_t*>(const_cast<void*>(initData->data))); - break; - } + { + for (int i = 0; i < 4; i++) + clearColor.uint32[i] = uint32_t( + *reinterpret_cast<uint8_t*>(const_cast<void*>(initData->data))); + break; + } case SLANG_SCALAR_TYPE_INT16: - { - for(int i = 0; i < 4; i++) - clearColor.int32[i] = int32_t(*reinterpret_cast<int16_t*>(const_cast<void*>(initData->data))); - break; - } + { + for (int i = 0; i < 4; i++) + clearColor.int32[i] = + int32_t(*reinterpret_cast<int16_t*>(const_cast<void*>(initData->data))); + break; + } case SLANG_SCALAR_TYPE_UINT16: - { - for(int i = 0; i < 4; i++) - clearColor.uint32[i] = uint32_t(*reinterpret_cast<uint16_t*>(const_cast<void*>(initData->data))); - break; - } + { + for (int i = 0; i < 4; i++) + clearColor.uint32[i] = uint32_t( + *reinterpret_cast<uint16_t*>(const_cast<void*>(initData->data))); + break; + } }; VkImageSubresourceRange range{}; @@ -1824,9 +1890,11 @@ Result DeviceImpl::createTextureResource( region.imageSubresource.mipLevel = uint32_t(j); region.imageSubresource.baseArrayLayer = i; region.imageSubresource.layerCount = 1; - region.imageOffset = { 0, 0, 0 }; + region.imageOffset = {0, 0, 0}; region.imageExtent = { - uint32_t(mipSize.width), uint32_t(mipSize.height), uint32_t(mipSize.depth) }; + uint32_t(mipSize.width), + uint32_t(mipSize.height), + uint32_t(mipSize.depth)}; // Do the copy (do all depths in a single go) m_api.vkCmdCopyBufferToImage( @@ -1869,7 +1937,9 @@ Result DeviceImpl::createTextureResource( } Result DeviceImpl::createBufferResource( - const IBufferResource::Desc& descIn, const void* initData, IBufferResource** outResource) + const IBufferResource::Desc& descIn, + const void* initData, + IBufferResource** outResource) { return createBufferResourceImpl(descIn, 0, initData, outResource); } @@ -1947,7 +2017,12 @@ Result DeviceImpl::createBufferResourceImpl( // Copy into staging buffer void* mappedData = nullptr; SLANG_VK_CHECK(m_api.vkMapMemory( - m_device, buffer->m_uploadBuffer.m_memory, 0, bufferSize, 0, &mappedData)); + m_device, + buffer->m_uploadBuffer.m_memory, + 0, + bufferSize, + 0, + &mappedData)); ::memcpy(mappedData, initData, bufferSize); m_api.vkUnmapMemory(m_device, buffer->m_uploadBuffer.m_memory); @@ -1969,7 +2044,12 @@ Result DeviceImpl::createBufferResourceImpl( // Copy into mapped buffer directly void* mappedData = nullptr; SLANG_VK_CHECK(m_api.vkMapMemory( - m_device, buffer->m_buffer.m_memory, 0, bufferSize, 0, &mappedData)); + m_device, + buffer->m_buffer.m_memory, + 0, + bufferSize, + 0, + &mappedData)); ::memcpy(mappedData, initData, bufferSize); m_api.vkUnmapMemory(m_device, buffer->m_buffer.m_memory); } @@ -1980,7 +2060,9 @@ Result DeviceImpl::createBufferResourceImpl( } Result DeviceImpl::createBufferFromNativeHandle( - InteropHandle handle, const IBufferResource::Desc& srcDesc, IBufferResource** outResource) + InteropHandle handle, + const IBufferResource::Desc& srcDesc, + IBufferResource** outResource) { RefPtr<BufferResourceImpl> buffer(new BufferResourceImpl(srcDesc, this)); @@ -1999,7 +2081,7 @@ Result DeviceImpl::createBufferFromNativeHandle( Result DeviceImpl::createSamplerState(ISamplerState::Desc const& desc, ISamplerState** outSampler) { - VkSamplerCreateInfo samplerInfo = { VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO }; + VkSamplerCreateInfo samplerInfo = {VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO}; samplerInfo.magFilter = VulkanUtil::translateFilterMode(desc.minFilter); samplerInfo.minFilter = VulkanUtil::translateFilterMode(desc.magFilter); @@ -2021,7 +2103,8 @@ Result DeviceImpl::createSamplerState(ISamplerState::Desc const& desc, ISamplerS samplerInfo.minLod = Math::Max(0.0f, desc.minLOD); samplerInfo.maxLod = Math::Clamp(desc.maxLOD, samplerInfo.minLod, VK_LOD_CLAMP_NONE); - VkSamplerReductionModeCreateInfo reductionInfo = { VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO }; + VkSamplerReductionModeCreateInfo reductionInfo = { + VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO}; reductionInfo.reductionMode = VulkanUtil::translateReductionOp(desc.reductionOp); samplerInfo.pNext = &reductionInfo; @@ -2035,7 +2118,9 @@ Result DeviceImpl::createSamplerState(ISamplerState::Desc const& desc, ISamplerS } Result DeviceImpl::createTextureView( - ITextureResource* texture, IResourceView::Desc const& desc, IResourceView** outView) + ITextureResource* texture, + IResourceView::Desc const& desc, + IResourceView** outView) { auto resourceImpl = static_cast<TextureResourceImpl*>(texture); RefPtr<TextureResourceViewImpl> view = new TextureResourceViewImpl(this); @@ -2053,14 +2138,14 @@ Result DeviceImpl::createTextureView( createInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; createInfo.flags = 0; createInfo.format = gfxIsTypelessFormat(texture->getDesc()->format) - ? VulkanUtil::getVkFormat(desc.format) - : resourceImpl->m_vkformat; + ? VulkanUtil::getVkFormat(desc.format) + : resourceImpl->m_vkformat; createInfo.image = resourceImpl->m_image; createInfo.components = VkComponentMapping{ VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_B, - VK_COMPONENT_SWIZZLE_A }; + VK_COMPONENT_SWIZZLE_A}; switch (resourceImpl->getType()) { case IResource::Type::Texture1D: @@ -2069,15 +2154,11 @@ Result DeviceImpl::createTextureView( case IResource::Type::Texture2D: createInfo.viewType = isArray ? VK_IMAGE_VIEW_TYPE_2D_ARRAY : VK_IMAGE_VIEW_TYPE_2D; break; - case IResource::Type::Texture3D: - createInfo.viewType = VK_IMAGE_VIEW_TYPE_3D; - break; + case IResource::Type::Texture3D: createInfo.viewType = VK_IMAGE_VIEW_TYPE_3D; break; case IResource::Type::TextureCube: createInfo.viewType = isArray ? VK_IMAGE_VIEW_TYPE_CUBE_ARRAY : VK_IMAGE_VIEW_TYPE_CUBE; break; - default: - SLANG_UNIMPLEMENTED_X("Unknown Texture type."); - break; + default: SLANG_UNIMPLEMENTED_X("Unknown Texture type."); break; } createInfo.subresourceRange.aspectMask = getAspectMaskFromFormat(resourceImpl->m_vkformat); @@ -2094,8 +2175,8 @@ Result DeviceImpl::createTextureView( } } createInfo.subresourceRange.levelCount = desc.subresourceRange.mipLevelCount == 0 - ? VK_REMAINING_MIP_LEVELS - : desc.subresourceRange.mipLevelCount; + ? VK_REMAINING_MIP_LEVELS + : desc.subresourceRange.mipLevelCount; switch (desc.type) { case IResourceView::Type::DepthStencil: @@ -2109,12 +2190,8 @@ Result DeviceImpl::createTextureView( case IResourceView::Type::ShaderResource: view->m_layout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; break; - case IResourceView::Type::UnorderedAccess: - view->m_layout = VK_IMAGE_LAYOUT_GENERAL; - break; - default: - SLANG_UNIMPLEMENTED_X("Unknown TextureViewDesc type."); - break; + case IResourceView::Type::UnorderedAccess: view->m_layout = VK_IMAGE_LAYOUT_GENERAL; break; + default: SLANG_UNIMPLEMENTED_X("Unknown TextureViewDesc type."); break; } m_api.vkCreateImageView(m_device, &createInfo, nullptr, &view->m_view); returnComPtr(outView, view); @@ -2129,7 +2206,9 @@ Result DeviceImpl::getFormatSupportedResourceStates(Format format, ResourceState VkFormatProperties supportedProperties = {}; m_api.vkGetPhysicalDeviceFormatProperties( - m_api.m_physicalDevice, vkFormat, &supportedProperties); + m_api.m_physicalDevice, + vkFormat, + &supportedProperties); HashSet<VkFormat> presentableFormats; // TODO: enable this once we have VK_GOOGLE_surfaceless_query. @@ -2147,8 +2226,8 @@ Result DeviceImpl::getFormatSupportedResourceStates(Format format, ResourceState presentableFormats.add(surfaceFormat.format); } #else -// Until we have a solution to query presentable formats without needing a surface, -// hard code presentable formats that is supported by most drivers. + // Until we have a solution to query presentable formats without needing a surface, + // hard code presentable formats that is supported by most drivers. presentableFormats.add(VK_FORMAT_R8G8B8A8_UNORM); presentableFormats.add(VK_FORMAT_B8G8R8A8_UNORM); presentableFormats.add(VK_FORMAT_R8G8B8A8_SRGB); @@ -2167,11 +2246,8 @@ Result DeviceImpl::getFormatSupportedResourceStates(Format format, ResourceState switch (format) { case Format::R32_UINT: - case Format::R16_UINT: - allowedStates.add(ResourceState::IndexBuffer); - break; - default: - break; + case Format::R16_UINT: allowedStates.add(ResourceState::IndexBuffer); break; + default: break; } // ConstantBuffer allowedStates.add(ResourceState::ConstantBuffer); @@ -2186,7 +2262,7 @@ Result DeviceImpl::getFormatSupportedResourceStates(Format format, ResourceState (VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)) allowedStates.add(ResourceState::UnorderedAccess); if (bufferFeatures & (VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | - VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)) + VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)) allowedStates.add(ResourceState::UnorderedAccess); // RenderTarget if (imageFeatures & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT) @@ -2235,8 +2311,8 @@ Result DeviceImpl::createBufferView( VkDeviceSize offset = (VkDeviceSize)desc.bufferRange.offset; VkDeviceSize size = desc.bufferRange.size == 0 - ? (buffer ? resourceImpl->getDesc()->sizeInBytes : 0) - : (VkDeviceSize)desc.bufferRange.size; + ? (buffer ? resourceImpl->getDesc()->sizeInBytes : 0) + : (VkDeviceSize)desc.bufferRange.size; // There are two different cases we need to think about for buffers. // @@ -2259,9 +2335,7 @@ Result DeviceImpl::createBufferView( switch (desc.type) { - default: - assert(!"unhandled"); - return SLANG_FAIL; + default: assert(!"unhandled"); return SLANG_FAIL; case IResourceView::Type::UnorderedAccess: case IResourceView::Type::ShaderResource: @@ -2286,7 +2360,7 @@ Result DeviceImpl::createBufferView( // // FALLTHROUGH { - VkBufferViewCreateInfo info = { VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO }; + VkBufferViewCreateInfo info = {VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO}; VkBufferView view = VK_NULL_HANDLE; @@ -2352,8 +2426,8 @@ Result DeviceImpl::createInputLayout(IInputLayout::Desc const& desc, IInputLayou dstStream.stride = (uint32_t)srcStream.stride; dstStream.binding = (uint32_t)i; dstStream.inputRate = (srcStream.slotClass == InputSlotClass::PerInstance) - ? VK_VERTEX_INPUT_RATE_INSTANCE - : VK_VERTEX_INPUT_RATE_VERTEX; + ? VK_VERTEX_INPUT_RATE_INSTANCE + : VK_VERTEX_INPUT_RATE_VERTEX; } for (Int i = 0; i < numElements; ++i) @@ -2380,7 +2454,9 @@ Result DeviceImpl::createInputLayout(IInputLayout::Desc const& desc, IInputLayou } Result DeviceImpl::createProgram( - const IShaderProgram::Desc& desc, IShaderProgram** outProgram, ISlangBlob** outDiagnosticBlob) + const IShaderProgram::Desc& desc, + IShaderProgram** outProgram, + ISlangBlob** outDiagnosticBlob) { RefPtr<ShaderProgramImpl> shaderProgram = new ShaderProgramImpl(this); shaderProgram->init(desc); @@ -2418,13 +2494,16 @@ Result DeviceImpl::createShaderObject(ShaderObjectLayoutBase* layout, IShaderObj { RefPtr<ShaderObjectImpl> shaderObject; SLANG_RETURN_ON_FAIL(ShaderObjectImpl::create( - this, static_cast<ShaderObjectLayoutImpl*>(layout), shaderObject.writeRef())); + this, + static_cast<ShaderObjectLayoutImpl*>(layout), + shaderObject.writeRef())); returnComPtr(outObject, shaderObject); return SLANG_OK; } Result DeviceImpl::createMutableShaderObject( - ShaderObjectLayoutBase* layout, IShaderObject** outObject) + ShaderObjectLayoutBase* layout, + IShaderObject** outObject) { auto layoutImpl = static_cast<ShaderObjectLayoutImpl*>(layout); @@ -2454,7 +2533,8 @@ Result DeviceImpl::createShaderTable(const IShaderTable::Desc& desc, IShaderTabl } Result DeviceImpl::createGraphicsPipelineState( - const GraphicsPipelineStateDesc& inDesc, IPipelineState** outState) + const GraphicsPipelineStateDesc& inDesc, + IPipelineState** outState) { GraphicsPipelineStateDesc desc = inDesc; RefPtr<PipelineStateImpl> pipelineStateImpl = new PipelineStateImpl(this); @@ -2467,7 +2547,8 @@ Result DeviceImpl::createGraphicsPipelineState( } Result DeviceImpl::createComputePipelineState( - const ComputePipelineStateDesc& inDesc, IPipelineState** outState) + const ComputePipelineStateDesc& inDesc, + IPipelineState** outState) { ComputePipelineStateDesc desc = inDesc; RefPtr<PipelineStateImpl> pipelineStateImpl = new PipelineStateImpl(this); @@ -2479,7 +2560,8 @@ Result DeviceImpl::createComputePipelineState( } Result DeviceImpl::createRayTracingPipelineState( - const RayTracingPipelineStateDesc& desc, IPipelineState** outState) + const RayTracingPipelineStateDesc& desc, + IPipelineState** outState) { RefPtr<RayTracingPipelineStateImpl> pipelineStateImpl = new RayTracingPipelineStateImpl(this); pipelineStateImpl->init(desc); @@ -2506,7 +2588,11 @@ Result DeviceImpl::createFence(const IFence::Desc& desc, IFence** outFence) } Result DeviceImpl::waitForFences( - GfxCount fenceCount, IFence** fences, uint64_t* fenceValues, bool waitForAll, uint64_t timeout) + GfxCount fenceCount, + IFence** fences, + uint64_t* fenceValues, + bool waitForAll, + uint64_t timeout) { ShortList<VkSemaphore> semaphores; for (GfxIndex i = 0; i < fenceCount; ++i) |
