Move GPU mesh collection out of the extract phase, in preparation for bindless textures.#14127
Closed
pcwalton wants to merge 1 commit intobevyengine:mainfrom
Closed
Move GPU mesh collection out of the extract phase, in preparation for bindless textures.#14127pcwalton wants to merge 1 commit intobevyengine:mainfrom
pcwalton wants to merge 1 commit intobevyengine:mainfrom
Conversation
bindless textures. Currently, the `MeshInputUniform` data, which is used to prepare `MeshUniform` data for use by the GPU, is constructed during the extraction phase. This poses a problem for bindless materials. With bindless, we need the `MeshUniform` to contain the index of the material in a buffer, and the material isn't prepared until *after* extraction, at which point it's too late because the `MeshInputUniform`s have already been built. By moving `collect_meshes_for_gpu_building` to the new `CollectMeshes` phase, which runs after extraction but before asset preparation, we fix this ordering problem. Because an up-to-date `RenderMeshInstances` is no longer available during extraction, the lightmap extraction system has been reworked to fetch the mesh ID directly from the main world instead of going through `RenderMeshInstances`. This patch was broken out from the larger forthcoming bindless patch because it has performance benefits on its own. It allows the extraction phase to finish quicker, which allows main world systems to resume faster.
Contributor
Author
|
Actually let me mark this as a draft because there's more stuff I may want to do (note to self: get rid of |
Contributor
|
Fyi RenderMaterialInstances is used for meshlets, so be careful there. Materials for meshlets are less tied to entities. Each entity has a material ID (u32) associated with it, but the actual material rendering are fullscreen draws independent of the mesh rasterization. |
Contributor
Author
|
I'm just going to roll this into bindless textures. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Currently, the
MeshInputUniformdata, which is used to prepareMeshUniformdata for use by the GPU, is constructed during the extraction phase. This poses a problem for bindless materials. With bindless, we need theMeshUniformto contain the index of the material in a buffer, and the material isn't prepared until after extraction, at which point it's too late because theMeshInputUniforms have already been built. By movingcollect_meshes_for_gpu_buildingto the newCollectMeshesphase, which runs after asset preparation but before mesh queuing, we fix this ordering problem.Because an up-to-date
RenderMeshInstancesis no longer available during extraction, the lightmap extraction system has been reworked to fetch the mesh ID directly from the main world instead of going throughRenderMeshInstances.This patch was broken out from the larger forthcoming bindless patch because it has performance benefits on its own. It allows the extraction phase to finish quicker, which allows main world systems to resume faster.