GithubHelp home page GithubHelp logo

Comments (2)

NBickford-NV avatar NBickford-NV commented on August 25, 2024

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.

FuXiii avatar FuXiii commented on August 25, 2024

Ok, thank you very much! (๑•̀ㅂ•́)و✧

from vk_raytracing_tutorial_khr.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.