Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-09-19Cleanup: prefer 'arg' over 'params' for sphinx documentationCampbell Barton
While both are supported, 'arg' is in more common use so prefer it.
2022-09-17DRW: GPU wrapper: Add new StorageVectorBufferClément Foucault
Same as `StorageArrayBuffer` but has a length counter and act like a `blender::Vector` you can clear and append to.
2022-09-05Cleanup: make formatBrecht Van Lommel
2022-09-02DRWManager: New implementation.Clément Foucault
This is a new implementation of the draw manager using modern rendering practices and GPU driven culling. This only ports features that are not considered deprecated or to be removed. The old DRW API is kept working along side this new one, and does not interfeer with it. However this needed some more hacking inside the draw_view_lib.glsl. At least the create info are well separated. The reviewer might start by looking at `draw_pass_test.cc` to see the API in usage. Important files are `draw_pass.hh`, `draw_command.hh`, `draw_command_shared.hh`. In a nutshell (for a developper used to old DRW API): - `DRWShadingGroups` are replaced by `Pass<T>::Sub`. - Contrary to DRWShadingGroups, all commands recorded inside a pass or sub-pass (even binds / push_constant / uniforms) will be executed in order. - All memory is managed per object (except for Sub-Pass which are managed by their parent pass) and not from draw manager pools. So passes "can" potentially be recorded once and submitted multiple time (but this is not really encouraged for now). The only implicit link is between resource lifetime and `ResourceHandles` - Sub passes can be any level deep. - IMPORTANT: All state propagate from sub pass to subpass. There is no state stack concept anymore. Ensure the correct render state is set before drawing anything using `Pass::state_set()`. - The drawcalls now needs a `ResourceHandle` instead of an `Object *`. This is to remove any implicit dependency between `Pass` and `Manager`. This was a huge problem in old implementation since the manager did not know what to pull from the object. Now it is explicitly requested by the engine. - The pases need to be submitted to a `draw::Manager` instance which can be retrieved using `DRW_manager_get()` (for now). Internally: - All object data are stored in contiguous storage buffers. Removing a lot of complexity in the pass submission. - Draw calls are sorted and visibility tested on GPU. Making more modern culling and better instancing usage possible in the future. - Unit Tests have been added for regression testing and avoid most API breakage. - `draw::View` now contains culling data for all objects in the scene allowing caching for multiple views. - Bounding box and sphere final setup is moved to GPU. - Some global resources locations have been hardcoded to reduce complexity. What is missing: - ~~Workaround for lack of gl_BaseInstanceARB.~~ Done - ~~Object Uniform Attributes.~~ Done (Not in this patch) - Workaround for hardware supporting a maximum of 8 SSBO. Reviewed By: jbakker Differential Revision: https://developer.blender.org/D15817
2022-08-19Merge branch 'blender-v3.3-release'Brecht Van Lommel
2022-08-19Fix build error on mips64el architectureBrecht Van Lommel
Same as D12194, name "mips" conflicts on such systems.
2022-08-17Cleanup: strip blank lines around comment blocksCampbell Barton
2022-08-15EEVEE-Next: HiZ Buffer: New implementationClément Foucault
This new implementation does all downsampling in a single compute shader dispatch, removing a lot of complexity from the previous recursive downsampling. This is heavilly inspired by the Single-Pass-Downsampler from GPUOpen: https://github.com/GPUOpen-Effects/FidelityFX-SPD However I do not implement all the optimization bits as they require vulkan (GL_KHR_shader_subgroup) and is not as versatile (it is only for HiZ). Timers inside renderdoc report ~0.4ms of saving on a 2048*1024 render for the whole downsampling. Note that the previous implementation only processed 6 mips where the new one processes 8 mips. ``` EEVEE ~1.0ms EEVEE-Next ~0.6ms ``` Padding has been bumped to be of 128px for processing 8 mips. A new debug option has been added (debug value 2) to validate the HiZ.
2022-08-05DRW: GPU Wrapper: add possibility to swap Texture and TextureFromPoolClément Foucault
Ownership is transfered from the pool to the `Texture` and vice versa. This allows to have history buffers with only 1 persistent texture.
2022-08-05Cleanup: DRW: Remove void function argumentClément Foucault
2022-08-02DRW: GPU Wrapper: Fix invalid cached texture view when ensure() reallocsClément Foucault
2022-08-02DRW: GPU wrapper: Make SwapChain renference workClément Foucault
This make using texture reference easier. But now, it makes it mandatory for the wrapped type to implement the `swap()` static method.
2022-08-02DRW: GPU wrappers: Expose more ease of use functions and cleanup styleClément Foucault
2022-07-28DRW: TextureFromPool: Change API to use acquire / releaseClément Foucault
This removes the quirk of having to call the sync function for each new render loop. # Conflicts: # source/blender/draw/engines/eevee_next/eevee_view.cc
2022-06-28Cleanup: DRW: Fix misnamed argument and add more info in a function docClément Foucault
2022-05-19DRW: GPU wrappers: Fix resize routines for StorageArrayBufferClément Foucault
Resizing was not resizing the `data_` buffer. Also use `power_of_2_max_u`.
2022-05-19DRW: Wrappers: Use runtime length of the buffer instead of the initial lenClément Foucault
This could have produce errors especially in the iterators.
2022-05-19DRW: Replace StorageFlexibleBuffer with explicit `get_or_resize()`Clément Foucault
This is to avoid hiding resize inside the `[]` operator.
2022-05-17DRWWrapper: Add StorageFlexibleBufferClément Foucault
This buffer resizes on access.
2022-05-17DRW: Add SwapChain container to allow easier usage of double bufferingClément Foucault
The template also takes the length of the chain to allow triple buffering.
2022-04-19GPU: Replace `GPUMaterialVolumeGrid` by `GPUMaterialAttribute`Clément Foucault
This is to make the codegen and shading nodes object type agnostic. This is essential for flexibility of the engine to use the nodetree as it see fits. The essential volume attributes struct properties are moved to the `GPUMaterialAttribute` which see its final input name set on creation. The binding process is centralized into `draw_volume.cc` to avoid duplicating the code between multiple engines. It mimics the hair attributes process. Volume object grid transforms and other per object uniforms are packed into one UBO per object. The grid transform is now based on object which simplify the matrix preparations. This also gets rid of the double transforms and use object info orco factors for volume objects. Tagging @brecht because he did the initial implementation of Volume Grids.
2022-03-23Cleanup: spelling in commentsCampbell Barton
2022-03-20DRW: GPU wrappers: Some quality of life improvementsClément Foucault
- Add name support to storage buffers - Delete view functions for TextureFromPool - Add support for different size acquire and assert on mulitple acquire - Allow multiple release
2022-03-18DRW: gpu wrappers: Fix compilation in release modeClément Foucault
2022-03-18GPUTexture: Add Cube view as 2D arrayClément Foucault
This is useful to read/write to the textures directly using compute shaders and imageLoad/Store.
2022-03-18DRW: Expose stencil view in gpu_wrapperClément Foucault
2022-03-18Cleanup: DRW: Fix comments in DRW_gpu_wrapperClément Foucault
2022-03-18DRW: Add simple texture view wrappers to draw::TextureClément Foucault
2022-03-18DRW: Add support for GPUStorageBuf in wrappersClément Foucault
# Conflicts: # source/blender/draw/engines/eevee/eevee_light.cc # source/blender/draw/engines/eevee/eevee_shadow.cc
2022-02-25GPUTexture: Use immutable storageClément Foucault
This means textures need to have the number of mipmap levels specified upfront. It does not mean the data is immutable. There is fallback code for OpenGL < 4.2. Immutable storage will enables texture views in the future.
2022-02-11File headers: SPDX License migrationCampbell Barton
Use a shorter/simpler license convention, stops the header taking so much space. Follow the SPDX license specification: https://spdx.org/licenses - C/C++/objc/objc++ - Python - Shell Scripts - CMake, GNUmakefile While most of the source tree has been included - `./extern/` was left out. - `./intern/cycles` & `./intern/atomic` are also excluded because they use different header conventions. doc/license/SPDX-license-identifiers.txt has been added to list SPDX all used identifiers. See P2788 for the script that automated these edits. Reviewed By: brecht, mont29, sergey Ref D14069
2022-02-05DRW: Fix memory leak in UniformArrayBufferClément Foucault
2022-02-04DRW: Fix bug in cubemap creation in draw::TextureClément Foucault
The order of if clause made impossible to create a cubemap.
2022-01-31Cleanup: use our own conventions for tags in commentsCampbell Barton
2022-01-27DRW: Fix some issues with DRW_gpu_wrapper.hhClément Foucault
- Fix assert on size. - Fix void * casting. - Pass extent by values. - Add swap function to avoid letting the types copyable. - Add back the GPUTexture * operator on TextureFromPool.
2022-01-27DRW: Fix DRW_gpu_wrapper.hhClément Foucault
The UBYTE datatype is not supported by the clear fallback. Also fix vector types headers.
2022-01-14Cleanup: spelling in comments, C++ style comments for disabled codeCampbell Barton
Also ensure space at end of comment.
2022-01-12DRW: Add DRW_gpu_wrapper.hhClément Foucault
This adds wrapper classes that make it easier to use GPU objects in C++. ####Motivations:#### - Easier handling of GPU objects. - EEVEE rewrite already makes use of similar wrappers. - There is the ongoing effort to use more C++ in the codebase and lans to port more engines to it. - The shader code refactor will make use of many UBOs with shared struct declaration. This helps managing them. - Safer handling of `TextureFromPool` which can't be bound as normal texture (only texture ref) and can be better tracked in the future. ####Considerations:#### - I chose the `blender::draw` namespace because `blender::gpu` already has private classes (i.e: `gpu::Texture`). - Theses are wrappers that manage a GPU object internally. They might be confused with actual `Texture`. However, the name `TextureWrapper` is a bit too much verbose in my opinion. I'm open to suggestion about better name. Reviewed By: jbakker Differential Revision: http://developer.blender.org/D13805