Skip to content

Commit 620e601

Browse files
committed
Merge branch 'master' into more_fft_utils
2 parents fdba8ce + e8f4dca commit 620e601

File tree

10 files changed

+108
-11
lines changed

10 files changed

+108
-11
lines changed

3rdparty/Vulkan-Headers

Submodule Vulkan-Headers updated 84 files

include/nbl/application_templates/MonoDeviceApplication.hpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -203,16 +203,11 @@ class MonoDeviceApplication : public virtual MonoSystemMonoLoggerApplication
203203
}
204204

205205
// These features are features you'll enable if present but won't interfere with your choice of device
206-
// There's no intersection operator (yet) on the features, so its not used yet!
207206
// virtual function so you can override as needed for some example father down the line
208207
virtual video::SPhysicalDeviceFeatures getPreferredDeviceFeatures() const
209208
{
210209
video::SPhysicalDeviceFeatures retval = {};
211210

212-
/*retval.shaderFloat64 = true;
213-
retval.shaderDrawParameters = true;
214-
retval.drawIndirectCount = true;*/
215-
216211
return retval;
217212
}
218213

include/nbl/builtin/hlsl/spirv_intrinsics/core.hlsl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,12 @@ SquareMatrix matrixInverse(NBL_CONST_REF_ARG(SquareMatrix) mat);
197197
[[vk::ext_instruction(GLSLstd450UnpackSnorm2x16, "GLSL.std.450")]]
198198
float32_t2 unpackSnorm2x16(uint32_t p);
199199

200+
[[vk::ext_instruction(GLSLstd450UnpackSnorm4x8, "GLSL.std.450")]]
201+
float32_t4 unpackSnorm4x8(uint32_t p);
202+
203+
[[vk::ext_instruction(GLSLstd450UnpackUnorm4x8, "GLSL.std.450")]]
204+
float32_t4 unpackUnorm4x8(uint32_t p);
205+
200206
// Memory Semantics link here: https://registry.khronos.org/SPIR-V/specs/unified1/SPIRV.html#Memory_Semantics_-id-
201207

202208
// https://registry.khronos.org/SPIR-V/specs/unified1/SPIRV.html#_memory_semantics_id
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
// Copyright (C) 2023 - DevSH Graphics Programming Sp. z O.O.
2+
// This file is part of the "Nabla Engine".
3+
// For conditions of distribution and use, see copyright notice in nabla.h
4+
#ifndef _NBL_BUILTIN_HLSL_SPIRV_INTRINSICS_RAYTRACING_INCLUDED_
5+
#define _NBL_BUILTIN_HLSL_SPIRV_INTRINSICS_RAYTRACING_INCLUDED_
6+
7+
#include "nbl/builtin/hlsl/spirv_intrinsics/core.hlsl"
8+
9+
namespace nbl
10+
{
11+
namespace hlsl
12+
{
13+
namespace spirv
14+
{
15+
16+
//[[vk::ext_capability(spv::CapabilityRayQueryKHR)]] https://github.com/microsoft/DirectXShaderCompiler/issues/6958
17+
using RayQueryKHR = vk::SpirvOpaqueType<spv::OpTypeRayQueryKHR>;
18+
19+
//[[vk::ext_capability(spv::CapabilityAccelerationStructureKHR)]]
20+
using AccelerationStructureKHR = vk::SpirvOpaqueType<spv::OpTypeAccelerationStructureKHR>;
21+
22+
[[vk::ext_instruction(spv::OpConvertUToAccelerationStructureKHR)]]
23+
AccelerationStructureKHR accelerationStructureKHR(uint64_t u);
24+
25+
[[vk::ext_capability(spv::CapabilityRayQueryKHR)]]
26+
[[vk::ext_extension("SPV_KHR_ray_query")]]
27+
[[vk::ext_instruction(spv::OpRayQueryInitializeKHR)]]
28+
void rayQueryInitializeKHR([[vk::ext_reference]] RayQueryKHR query, AccelerationStructureKHR AS, uint32_t flags, uint32_t cullMask, float32_t3 origin, float32_t tmin, float32_t3 direction, float32_t tmax);
29+
30+
[[vk::ext_capability(spv::CapabilityRayQueryKHR)]]
31+
[[vk::ext_extension("SPV_KHR_ray_query")]]
32+
[[vk::ext_instruction(spv::OpRayQueryInitializeKHR)]]
33+
void rayQueryInitializeKHR([[vk::ext_reference]] RayQueryKHR query, RaytracingAccelerationStructure AS, uint32_t flags, uint32_t cullMask, float32_t3 origin, float32_t tmin, float32_t3 direction, float32_t tmax);
34+
35+
[[vk::ext_capability(spv::CapabilityRayQueryKHR)]]
36+
[[vk::ext_extension("SPV_KHR_ray_query")]]
37+
[[vk::ext_instruction(spv::OpRayQueryProceedKHR)]]
38+
bool rayQueryProceedKHR([[vk::ext_reference]] RayQueryKHR query);
39+
40+
[[vk::ext_capability(spv::CapabilityRayQueryKHR)]]
41+
[[vk::ext_extension("SPV_KHR_ray_query")]]
42+
[[vk::ext_instruction(spv::OpRayQueryGetIntersectionTypeKHR)]]
43+
int rayQueryGetIntersectionTypeKHR([[vk::ext_reference]] RayQueryKHR query, uint32_t committed);
44+
45+
[[vk::ext_capability(spv::CapabilityRayQueryKHR)]]
46+
[[vk::ext_extension("SPV_KHR_ray_query")]]
47+
[[vk::ext_instruction(spv::OpRayQueryGetIntersectionInstanceIdKHR)]]
48+
int rayQueryGetIntersectionInstanceIdKHR([[vk::ext_reference]] RayQueryKHR query, uint32_t committed);
49+
50+
[[vk::ext_capability(spv::CapabilityRayQueryKHR)]]
51+
[[vk::ext_extension("SPV_KHR_ray_query")]]
52+
[[vk::ext_instruction(spv::OpRayQueryGetIntersectionPrimitiveIndexKHR)]]
53+
int rayQueryGetIntersectionPrimitiveIndexKHR([[vk::ext_reference]] RayQueryKHR query, uint32_t committed);
54+
55+
[[vk::ext_capability(spv::CapabilityRayQueryKHR)]]
56+
[[vk::ext_extension("SPV_KHR_ray_query")]]
57+
[[vk::ext_instruction(spv::OpRayQueryGetIntersectionBarycentricsKHR)]]
58+
float2 rayQueryGetIntersectionBarycentricsKHR([[vk::ext_reference]] RayQueryKHR query, uint32_t committed);
59+
60+
// position fetch for ray tracing uses gl_HitTriangleVertexPositionsEXT -> HitTriangleVertexPositionsKHR decorated OpVariable
61+
[[vk::ext_builtin_input(spv::BuiltInHitTriangleVertexPositionsKHR)]]
62+
static const float32_t3 HitTriangleVertexPositionsKHR[3];
63+
64+
// ray query version
65+
[[vk::ext_capability(spv::CapabilityRayQueryPositionFetchKHR)]]
66+
[[vk::ext_extension("SPV_KHR_ray_tracing_position_fetch")]]
67+
[[vk::ext_instruction(spv::OpRayQueryGetIntersectionTriangleVertexPositionsKHR)]]
68+
float3 rayQueryGetIntersectionTriangleVertexPositionsKHR([[vk::ext_reference]] RayQueryKHR query, uint32_t committed)[3];
69+
70+
}
71+
}
72+
}
73+
74+
#endif

include/nbl/video/ILogicalDevice.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -941,7 +941,7 @@ class NBL_API2 ILogicalDevice : public core::IReferenceCounted, public IDeviceMe
941941
NBL_LOG_ERROR("The queryPool was not created by this device");
942942
return false;
943943
}
944-
if (firstQuery + queryCount >= queryPool->getCreationParameters().queryCount)
944+
if (firstQuery + queryCount > queryPool->getCreationParameters().queryCount)
945945
{
946946
NBL_LOG_ERROR("Query index out of bounds");
947947
return false;

include/nbl/video/utilities/IUtilities.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,9 @@ class NBL_API2 IUtilities : public core::IReferenceCounted
390390
auto buffer = m_device->createBuffer(std::move(params));
391391
auto mreqs = buffer->getMemoryReqs();
392392
mreqs.memoryTypeBits &= m_device->getPhysicalDevice()->getDeviceLocalMemoryTypeBits();
393-
auto mem = m_device->allocate(mreqs,buffer.get());
393+
auto allocFlags = (params.usage & asset::IBuffer::EUF_SHADER_DEVICE_ADDRESS_BIT) ?
394+
IDeviceMemoryAllocation::E_MEMORY_ALLOCATE_FLAGS::EMAF_DEVICE_ADDRESS_BIT : IDeviceMemoryAllocation::E_MEMORY_ALLOCATE_FLAGS::EMAF_NONE;
395+
auto mem = m_device->allocate(mreqs,buffer.get(), allocFlags);
394396

395397
auto submitSuccess = autoSubmit(
396398
submit,

src/nbl/builtin/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "hlsl/macros.h")
213213
#spirv intrinsics
214214
LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "hlsl/spirv_intrinsics/core.hlsl")
215215
LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "hlsl/spirv_intrinsics/fragment_shader_pixel_interlock.hlsl")
216+
LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "hlsl/spirv_intrinsics/raytracing.hlsl")
216217
LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "hlsl/spirv_intrinsics/subgroup_arithmetic.hlsl")
217218
LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "hlsl/spirv_intrinsics/subgroup_ballot.hlsl")
218219
LIST_BUILTIN_RESOURCE(NBL_RESOURCES_TO_EMBED "hlsl/spirv_intrinsics/subgroup_basic.hlsl")

src/nbl/video/CVulkanAccelerationStructure.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ void getVkASGeometryFrom(const IGPUBottomLevelAccelerationStructure::Triangles<c
128128
outBase.geometry.triangles.vertexData = QueryOnly ? NullAddress:getVkDeviceOrHostAddress<const BufferType>(triangles.vertexData[0]);
129129
outBase.geometry.triangles.vertexStride = triangles.vertexStride;
130130
outBase.geometry.triangles.maxVertex = triangles.maxVertex;
131-
outBase.geometry.triangles.indexType = static_cast<VkIndexType>(triangles.indexType);
131+
outBase.geometry.triangles.indexType = (triangles.indexType == asset::E_INDEX_TYPE::EIT_UNKNOWN) ? VK_INDEX_TYPE_NONE_KHR : static_cast<VkIndexType>(triangles.indexType);
132132
outBase.geometry.triangles.indexData = QueryOnly ? NullAddress:getVkDeviceOrHostAddress<const BufferType>(triangles.indexData);
133133
// except that the hostAddress member of VkAccelerationStructureGeometryTrianglesDataKHR::transformData will be examined to check if it is NULL.
134134
if (!triangles.hasTransform())

src/nbl/video/CVulkanPhysicalDevice.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -705,6 +705,7 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
705705
VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR workgroupMemoryExplicitLayout = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR };
706706
VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR raytracingMaintenance1Features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR };
707707
VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM rasterizationOrderAttachmentAccessFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM };
708+
VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR rayTracingPositionFetchFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_POSITION_FETCH_FEATURES_KHR };
708709
VkPhysicalDeviceColorWriteEnableFeaturesEXT colorWriteEnableFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT };
709710
#if 0
710711
VkPhysicalDeviceCooperativeMatrixFeaturesKHR cooperativeMatrixFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR };
@@ -768,6 +769,8 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
768769
addToPNextChain(&workgroupMemoryExplicitLayout);
769770
if (isExtensionSupported(VK_ARM_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_EXTENSION_NAME))
770771
addToPNextChain(&rasterizationOrderAttachmentAccessFeatures);
772+
if (isExtensionSupported(VK_KHR_RAY_TRACING_POSITION_FETCH_EXTENSION_NAME))
773+
addToPNextChain(&rayTracingPositionFetchFeatures);
771774
if (isExtensionSupported(VK_EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME))
772775
addToPNextChain(&colorWriteEnableFeatures);
773776
// call
@@ -1196,6 +1199,9 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
11961199
properties.limits.workgroupMemoryExplicitLayout16BitAccess = workgroupMemoryExplicitLayout.workgroupMemoryExplicitLayout16BitAccess;
11971200
}
11981201

1202+
if (isExtensionSupported(VK_KHR_RAY_TRACING_POSITION_FETCH_EXTENSION_NAME) && isExtensionSupported(VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME))
1203+
properties.limits.rayTracingPositionFetch = rayTracingPositionFetchFeatures.rayTracingPositionFetch;
1204+
11991205
if (isExtensionSupported(VK_EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME))
12001206
properties.limits.colorWriteEnable = colorWriteEnableFeatures.colorWriteEnable;
12011207
#if 0 //TODO
@@ -1566,6 +1572,9 @@ core::smart_refctd_ptr<ILogicalDevice> CVulkanPhysicalDevice::createLogicalDevic
15661572
&rasterizationOrderAttachmentAccessFeatures
15671573
);
15681574

1575+
VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR rayTracingPositionFetchFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_POSITION_FETCH_FEATURES_KHR, nullptr };
1576+
REQUIRE_EXTENSION_IF(enabledFeatures.accelerationStructure && m_initData.properties.limits.rayTracingPositionFetch, VK_KHR_RAY_TRACING_POSITION_FETCH_EXTENSION_NAME, &rayTracingPositionFetchFeatures);
1577+
15691578
VkPhysicalDeviceColorWriteEnableFeaturesEXT colorWriteEnableFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT,nullptr };
15701579
enableExtensionIfAvailable(VK_EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME,&colorWriteEnableFeatures);
15711580
#if 0
@@ -1751,6 +1760,8 @@ core::smart_refctd_ptr<ILogicalDevice> CVulkanPhysicalDevice::createLogicalDevic
17511760

17521761
rayQueryFeatures.rayQuery = enabledFeatures.rayQuery;
17531762

1763+
rayTracingPositionFetchFeatures.rayTracingPositionFetch = limits.rayTracingPositionFetch;
1764+
17541765
//shaderSMBuiltinsFeaturesNV [LIMIT SO ENABLE EVERYTHING BY DEFAULT]
17551766

17561767
representativeFragmentTestFeatures.representativeFragmentTest = enabledFeatures.representativeFragmentTest;

src/nbl/video/device_capabilities/device_features.json

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4023,8 +4023,16 @@
40234023
"VK_AMD_extension_478",
40244024
"VK_AMD_extension_479",
40254025
"VK_EXT_extension_480",
4026-
"VK_EXT_extension_481",
4027-
"TODO: implement",
4026+
"VK_EXT_extension_481"
4027+
]
4028+
},
4029+
{
4030+
"type": "bool",
4031+
"name": "rayTracingPositionFetch",
4032+
"value": false,
4033+
"expose": "MOVE_TO_LIMIT",
4034+
"comment": [
4035+
"RayTracingPositionFetchFeaturesKHR",
40284036
"VK_KHR_ray_tracing_position_fetch"
40294037
]
40304038
},

0 commit comments

Comments
 (0)