Comments (2)
Hi FuXiii! Is your first question about why we use VK_BUFFER_USAGE_STORAGE_BUFFER_BIT
and not e.g. VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT
?
One reason we don't use VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT
here is because roughly 60% of devices measured by GPUInfo have a maximum uniform buffer size of 65536 bytes, which would significantly limit the size of the meshes we could represent: https://vulkan.gpuinfo.org/displaydevicelimit.php?name=maxUniformBufferRange&platform=all. Compared to that, the maximum storage buffer size is 128 MiB or larger on almost all devices: https://vulkan.gpuinfo.org/displaydevicelimit.php?name=maxStorageBufferRange&platform=all .
Additionally, if uniform buffers aren't uniformly accessed (i.e. each thread may divergently read a different element, as is the case for vertex and index buffers), uniform buffers can be slower than storage buffers (although this depends on the hardware). Sebastian Aaltonen has made some DirectX benchmarks at https://github.com/sebbbi/perftest; you can compare ByteAddressBuffer<float4>.Load random
against cbuffer{float4} load random
lines to get a rough idea.
Since our global uniform data (i.e. camera matrices) is small, fixed-size, and accessed uniformly, a uniform buffer works well for eGlobals
.
Note that Vulkan introduced VK_KHR_ray_tracing_position_fetch in March 2023, which allows you to fetch vertex positions directly from a ray hit! However, if you have per-vertex shading attributes such as normals or texture coordinates, you'll still want to store and load those from storage buffers, as those aren't stored in the acceleration structure.
Hopefully this also answers your second question: storage buffers are useful for more than storing data written by the GPU; they're also a good fit for buffers that are greater than 64 KiB in size or that will be divergently read.
from vk_raytracing_tutorial_khr.
Ok, thank you very much! (๑•̀ㅂ•́)و✧
from vk_raytracing_tutorial_khr.
Related Issues (20)
- Error in hello-vulkan during compilation HOT 4
- Why did the QUADRO P620 support raytrace? HOT 2
- ray_tracing_motionblur: Validation error HOT 2
- ray_tracing_ao crashes when Nsight is used HOT 2
- Fix raytrace.rgen in ray_tracing__advance HOT 1
- Incorrect srcStageMask in vkCmdPipelineBarrier in ray_tracing_ao HOT 2
- Second rmiss shader defined too early in the tutorial HOT 1
- add new simple sample showing usage of Ada SER functionality (via new VK NV SER ext) HOT 1
- add new simple sample showing new Ada OMM functionality (via new VK NV OMM ext) HOT 1
- What does Nb mean? HOT 2
- confusion about Path_tracing cosine distributed Pdf HOT 7
- gl_InstanceId and gl_InstanceCustomIndex HOT 5
- gl_LaunchSizeEXT corresponds to the image size provided when calling traceRayEXT HOT 2
- Could NOT find VulkanSDK (missing: VULKAN_LIB VULKANSDK_SHADERC_LIB) HOT 3
- Runtime error in creating swapchain on Tesla T4
- The tutorial page is blank HOT 2
- Link is broken HOT 4
- issue on win10 when cmake HOT 2
- Framebuffer becomes invalid (ray_tracing_gltf) HOT 7
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from vk_raytracing_tutorial_khr.