diff options
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/gfx/debug-layer/debug-helper-functions.cpp | 4 | ||||
| -rw-r--r-- | tools/gfx/vulkan/vk-api.h | 19 | ||||
| -rw-r--r-- | tools/gfx/vulkan/vk-device.cpp | 90 | ||||
| -rw-r--r-- | tools/gfx/vulkan/vk-device.h | 5 | ||||
| -rw-r--r-- | tools/gfx/vulkan/vk-fence.cpp | 2 | ||||
| -rw-r--r-- | tools/gfx/vulkan/vk-shader-table.cpp | 6 |
6 files changed, 56 insertions, 70 deletions
diff --git a/tools/gfx/debug-layer/debug-helper-functions.cpp b/tools/gfx/debug-layer/debug-helper-functions.cpp index e7c4e0246..e75d0a3c3 100644 --- a/tools/gfx/debug-layer/debug-helper-functions.cpp +++ b/tools/gfx/debug-layer/debug-helper-functions.cpp @@ -53,14 +53,14 @@ void validateAccelerationStructureBuildInputs( case IAccelerationStructure::Kind::TopLevel: if (!buildInputs.instanceDescs) { - GFX_DIAGNOSE_ERROR("IAccelerationStructure::BuildInputs::instanceDescs cannot be null " + GFX_DIAGNOSE_WARNING("IAccelerationStructure::BuildInputs::instanceDescs is null " "when creating a top-level acceleration structure."); } break; case IAccelerationStructure::Kind::BottomLevel: if (!buildInputs.geometryDescs) { - GFX_DIAGNOSE_ERROR("IAccelerationStructure::BuildInputs::geometryDescs cannot be null " + GFX_DIAGNOSE_WARNING("IAccelerationStructure::BuildInputs::geometryDescs is null " "when creating a bottom-level acceleration structure."); } for (int i = 0; i < buildInputs.descCount; i++) diff --git a/tools/gfx/vulkan/vk-api.h b/tools/gfx/vulkan/vk-api.h index c34372f45..f4caa8251 100644 --- a/tools/gfx/vulkan/vk-api.h +++ b/tools/gfx/vulkan/vk-api.h @@ -230,27 +230,15 @@ namespace gfx { struct VulkanExtendedFeatureProperties { - // Float16 features - VkPhysicalDeviceFloat16Int8FeaturesKHR float16Features = { - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR}; // 16 bit storage features VkPhysicalDevice16BitStorageFeatures storage16BitFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR}; - // AtomicInt64 features - VkPhysicalDeviceShaderAtomicInt64FeaturesKHR atomicInt64Features = { - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR}; // Atomic Float features VkPhysicalDeviceShaderAtomicFloatFeaturesEXT atomicFloatFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT}; - // Timeline Semaphore features - VkPhysicalDeviceTimelineSemaphoreFeatures timelineFeatures = { - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES}; // Extended dynamic state features VkPhysicalDeviceExtendedDynamicStateFeaturesEXT extendedDynamicStateFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT}; - // Subgroup extended type features - VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures shaderSubgroupExtendedTypeFeatures = { - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES}; // Acceleration structure features VkPhysicalDeviceAccelerationStructureFeaturesKHR accelerationStructureFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR}; @@ -261,9 +249,6 @@ struct VulkanExtendedFeatureProperties // Ray query (inline ray-tracing) features VkPhysicalDeviceRayQueryFeaturesKHR rayQueryFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR}; - // Buffer device address features - VkPhysicalDeviceBufferDeviceAddressFeatures bufferDeviceAddressFeatures = { - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES}; // Inline uniform block features VkPhysicalDeviceInlineUniformBlockFeaturesEXT inlineUniformBlockFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT}; @@ -275,6 +260,10 @@ struct VulkanExtendedFeatureProperties VkPhysicalDeviceShaderClockFeaturesKHR clockFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR }; + + // Vulkan 1.2 features. + VkPhysicalDeviceVulkan12Features vulkan12Features = { + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES}; }; struct VulkanApi diff --git a/tools/gfx/vulkan/vk-device.cpp b/tools/gfx/vulkan/vk-device.cpp index b9dbb264f..b9ae23b15 100644 --- a/tools/gfx/vulkan/vk-device.cpp +++ b/tools/gfx/vulkan/vk-device.cpp @@ -124,6 +124,15 @@ Result DeviceImpl::getNativeDeviceHandles(InteropHandles* outHandles) return SLANG_OK; } +template<typename T> +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; + return false; +} + Result DeviceImpl::initVulkanInstanceAndDevice( const InteropHandle* handles, bool useValidationLayer) { @@ -380,10 +389,6 @@ Result DeviceImpl::initVulkanInstanceAndDevice( extendedFeatures.inlineUniformBlockFeatures.pNext = deviceFeatures2.pNext; deviceFeatures2.pNext = &extendedFeatures.inlineUniformBlockFeatures; - // Buffer device address features - extendedFeatures.bufferDeviceAddressFeatures.pNext = deviceFeatures2.pNext; - deviceFeatures2.pNext = &extendedFeatures.bufferDeviceAddressFeatures; - // Ray query features extendedFeatures.rayQueryFeatures.pNext = deviceFeatures2.pNext; deviceFeatures2.pNext = &extendedFeatures.rayQueryFeatures; @@ -396,30 +401,14 @@ Result DeviceImpl::initVulkanInstanceAndDevice( extendedFeatures.accelerationStructureFeatures.pNext = deviceFeatures2.pNext; deviceFeatures2.pNext = &extendedFeatures.accelerationStructureFeatures; - // Subgroup features - extendedFeatures.shaderSubgroupExtendedTypeFeatures.pNext = deviceFeatures2.pNext; - deviceFeatures2.pNext = &extendedFeatures.shaderSubgroupExtendedTypeFeatures; - // Extended dynamic states extendedFeatures.extendedDynamicStateFeatures.pNext = deviceFeatures2.pNext; deviceFeatures2.pNext = &extendedFeatures.extendedDynamicStateFeatures; - // Timeline Semaphore - extendedFeatures.timelineFeatures.pNext = deviceFeatures2.pNext; - deviceFeatures2.pNext = &extendedFeatures.timelineFeatures; - - // Float16 - extendedFeatures.float16Features.pNext = deviceFeatures2.pNext; - deviceFeatures2.pNext = &extendedFeatures.float16Features; - // 16-bit storage extendedFeatures.storage16BitFeatures.pNext = deviceFeatures2.pNext; deviceFeatures2.pNext = &extendedFeatures.storage16BitFeatures; - // Atomic64 - extendedFeatures.atomicInt64Features.pNext = deviceFeatures2.pNext; - deviceFeatures2.pNext = &extendedFeatures.atomicInt64Features; - // robustness2 features extendedFeatures.robustness2Features.pNext = deviceFeatures2.pNext; deviceFeatures2.pNext = &extendedFeatures.robustness2Features; @@ -435,6 +424,12 @@ Result DeviceImpl::initVulkanInstanceAndDevice( extendedFeatures.atomicFloatFeatures.pNext = deviceFeatures2.pNext; deviceFeatures2.pNext = &extendedFeatures.atomicFloatFeatures; + if (VK_MAKE_VERSION(majorVersion, minorVersion, 0) >= VK_API_VERSION_1_2) + { + extendedFeatures.vulkan12Features.pNext = deviceFeatures2.pNext; + deviceFeatures2.pNext = &extendedFeatures.vulkan12Features; + } + m_api.vkGetPhysicalDeviceFeatures2(m_api.m_physicalDevice, &deviceFeatures2); if (deviceFeatures2.features.shaderResourceMinLod) @@ -454,15 +449,8 @@ Result DeviceImpl::initVulkanInstanceAndDevice( m_features.add("int16"); } // If we have float16 features then enable - if (extendedFeatures.float16Features.shaderFloat16) + if (extendedFeatures.vulkan12Features.shaderFloat16) { - // Link into the creation features - extendedFeatures.float16Features.pNext = (void*)deviceCreateInfo.pNext; - deviceCreateInfo.pNext = &extendedFeatures.float16Features; - - // Add the Float16 extension - deviceExtensions.add(VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME); - // We have half support m_features.add("half"); } @@ -480,13 +468,8 @@ Result DeviceImpl::initVulkanInstanceAndDevice( m_features.add("16-bit-storage"); } - if (extendedFeatures.atomicInt64Features.shaderBufferInt64Atomics) + if (extendedFeatures.vulkan12Features.shaderBufferInt64Atomics) { - // Link into the creation features - extendedFeatures.atomicInt64Features.pNext = (void*)deviceCreateInfo.pNext; - deviceCreateInfo.pNext = &extendedFeatures.atomicInt64Features; - - deviceExtensions.add(VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME); m_features.add("atomic-int64"); } @@ -500,12 +483,8 @@ Result DeviceImpl::initVulkanInstanceAndDevice( m_features.add("atomic-float"); } - if (extendedFeatures.timelineFeatures.timelineSemaphore) + if (extendedFeatures.vulkan12Features.timelineSemaphore) { - // Link into the creation features - extendedFeatures.timelineFeatures.pNext = (void*)deviceCreateInfo.pNext; - deviceCreateInfo.pNext = &extendedFeatures.timelineFeatures; - deviceExtensions.add(VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME); m_features.add("timeline-semaphore"); } @@ -518,12 +497,8 @@ Result DeviceImpl::initVulkanInstanceAndDevice( m_features.add("extended-dynamic-states"); } - if (extendedFeatures.shaderSubgroupExtendedTypeFeatures.shaderSubgroupExtendedTypes) + if (extendedFeatures.vulkan12Features.shaderSubgroupExtendedTypes) { - extendedFeatures.shaderSubgroupExtendedTypeFeatures.pNext = - (void*)deviceCreateInfo.pNext; - deviceCreateInfo.pNext = &extendedFeatures.shaderSubgroupExtendedTypeFeatures; - deviceExtensions.add(VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME); m_features.add("shader-subgroup-extended-types"); } @@ -554,12 +529,8 @@ Result DeviceImpl::initVulkanInstanceAndDevice( m_features.add("sm_6_6"); } - if (extendedFeatures.bufferDeviceAddressFeatures.bufferDeviceAddress) + if (extendedFeatures.vulkan12Features.bufferDeviceAddress) { - extendedFeatures.bufferDeviceAddressFeatures.pNext = (void*)deviceCreateInfo.pNext; - deviceCreateInfo.pNext = &extendedFeatures.bufferDeviceAddressFeatures; - deviceExtensions.add(VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME); - m_features.add("buffer-device-address"); } @@ -589,6 +560,14 @@ Result DeviceImpl::initVulkanInstanceAndDevice( m_features.add("realtime-clock"); } + if (_hasAnySetBits( + extendedFeatures.vulkan12Features, + offsetof(VkPhysicalDeviceVulkan12Features, pNext) + sizeof(void*))) + { + extendedFeatures.vulkan12Features.pNext = (void*)deviceCreateInfo.pNext; + deviceCreateInfo.pNext = &extendedFeatures.vulkan12Features; + } + VkPhysicalDeviceProperties2 extendedProps = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2 }; VkPhysicalDeviceRayTracingPipelinePropertiesKHR rtProps = { @@ -1505,14 +1484,23 @@ Result DeviceImpl::createTextureResource( Result DeviceImpl::createBufferResource( const IBufferResource::Desc& descIn, const void* initData, IBufferResource** outResource) { + return createBufferResourceImpl(descIn, 0, initData, outResource); +} + +Result DeviceImpl::createBufferResourceImpl( + const IBufferResource::Desc& descIn, + VkBufferUsageFlags additionalUsageFlag, + const void* initData, + IBufferResource** outResource) +{ BufferResource::Desc desc = fixupBufferDesc(descIn); const Size bufferSize = desc.sizeInBytes; VkMemoryPropertyFlags reqMemoryProperties = 0; - VkBufferUsageFlags usage = _calcBufferUsageFlags(desc.allowedStates); - if (m_api.m_extendedFeatures.bufferDeviceAddressFeatures.bufferDeviceAddress) + VkBufferUsageFlags usage = _calcBufferUsageFlags(desc.allowedStates) | additionalUsageFlag; + if (m_api.m_extendedFeatures.vulkan12Features.bufferDeviceAddress) { usage |= VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT; } diff --git a/tools/gfx/vulkan/vk-device.h b/tools/gfx/vulkan/vk-device.h index 462ba79c2..9731fd1d4 100644 --- a/tools/gfx/vulkan/vk-device.h +++ b/tools/gfx/vulkan/vk-device.h @@ -40,6 +40,11 @@ public: const IBufferResource::Desc& desc, const void* initData, IBufferResource** outResource) override; + SLANG_NO_THROW Result SLANG_MCALL createBufferResourceImpl( + const IBufferResource::Desc& desc, + VkBufferUsageFlags additionalUsageFlag, + const void* initData, + IBufferResource** outResource); virtual SLANG_NO_THROW Result SLANG_MCALL createBufferFromNativeHandle( InteropHandle handle, const IBufferResource::Desc& srcDesc, diff --git a/tools/gfx/vulkan/vk-fence.cpp b/tools/gfx/vulkan/vk-fence.cpp index ce4d29a0c..0cef86a13 100644 --- a/tools/gfx/vulkan/vk-fence.cpp +++ b/tools/gfx/vulkan/vk-fence.cpp @@ -26,7 +26,7 @@ FenceImpl::~FenceImpl() Result FenceImpl::init(const IFence::Desc& desc) { - if (!m_device->m_api.m_extendedFeatures.timelineFeatures.timelineSemaphore) + if (!m_device->m_api.m_extendedFeatures.vulkan12Features.timelineSemaphore) return SLANG_E_NOT_AVAILABLE; VkSemaphoreTypeCreateInfo timelineCreateInfo; diff --git a/tools/gfx/vulkan/vk-shader-table.cpp b/tools/gfx/vulkan/vk-shader-table.cpp index f40331432..0b6488465 100644 --- a/tools/gfx/vulkan/vk-shader-table.cpp +++ b/tools/gfx/vulkan/vk-shader-table.cpp @@ -39,7 +39,11 @@ RefPtr<BufferResource> ShaderTableImpl::createDeviceBuffer( ResourceStateSet(ResourceState::General, ResourceState::CopyDestination); bufferDesc.type = IResource::Type::Buffer; bufferDesc.sizeInBytes = tableSize; - m_device->createBufferResource(bufferDesc, nullptr, bufferResource.writeRef()); + static_cast<vk::DeviceImpl*>(m_device)->createBufferResourceImpl( + bufferDesc, + VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR, + nullptr, + bufferResource.writeRef()); TransientResourceHeapImpl* transientHeapImpl = static_cast<TransientResourceHeapImpl*>(transientHeap); |
