diff options
| author | Simon Kallweit <64953474+skallweitNV@users.noreply.github.com> | 2024-08-30 18:50:19 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-30 09:50:19 -0700 |
| commit | f428a058ea48535a323c32d206ebc7e551c3c3e9 (patch) | |
| tree | 2b004d07b630196f902b88679b4a08d8faaa97bc /tools/render-test/shader-renderer-util.cpp | |
| parent | 12137e9b00436eee3bf27f7a2fc5106513af8981 (diff) | |
Draft: integrate slang-rhi (#4970)
* add slang-rhi submodule
* refactor render-test to use slang-rhi and remove OpenGL support
* remove -vk -glsl tests
* remove gl test
* disable failing test
* allow recursive submodules in github actions
* update slang-rhi
* update slang-rhi
---------
Co-authored-by: Yong He <yonghe@outlook.com>
Diffstat (limited to 'tools/render-test/shader-renderer-util.cpp')
| -rw-r--r-- | tools/render-test/shader-renderer-util.cpp | 91 |
1 files changed, 89 insertions, 2 deletions
diff --git a/tools/render-test/shader-renderer-util.cpp b/tools/render-test/shader-renderer-util.cpp index fe726012e..c2f7583a7 100644 --- a/tools/render-test/shader-renderer-util.cpp +++ b/tools/render-test/shader-renderer-util.cpp @@ -2,13 +2,100 @@ #include "shader-renderer-util.h" -#include "tools/gfx/resource-desc-utils.h" - namespace renderer_test { using namespace Slang; using Slang::Result; +inline int calcMipSize(int size, int level) +{ + size = size >> level; + return size > 0 ? size : 1; +} + +inline ITextureResource::Extents calcMipSize(ITextureResource::Extents size, int mipLevel) +{ + ITextureResource::Extents rs; + rs.width = calcMipSize(size.width, mipLevel); + rs.height = calcMipSize(size.height, mipLevel); + rs.depth = calcMipSize(size.depth, mipLevel); + return rs; +} + +/// Calculate the effective array size - in essence the amount if mip map sets needed. +/// In practice takes into account if the arraySize is 0 (it's not an array, but it will still have +/// at least one mip set) and if the type is a cubemap (multiplies the amount of mip sets by 6) +inline int calcEffectiveArraySize(const ITextureResource::Desc& desc) +{ + const int arrSize = (desc.arraySize > 0) ? desc.arraySize : 1; + + switch (desc.type) + { + case IResource::Type::Texture1D: // fallthru + case IResource::Type::Texture2D: + { + return arrSize; + } + case IResource::Type::TextureCube: + return arrSize * 6; + case IResource::Type::Texture3D: + return 1; + default: + return 0; + } +} + +/// Given the type works out the maximum dimension size +inline int calcMaxDimension(ITextureResource::Extents size, IResource::Type type) +{ + switch (type) + { + case IResource::Type::Texture1D: + return size.width; + case IResource::Type::Texture3D: + return Math::Max(Math::Max(size.width, size.height), size.depth); + case IResource::Type::TextureCube: // fallthru + case IResource::Type::Texture2D: + { + return Math::Max(size.width, size.height); + } + default: + return 0; + } +} + +/// Given the type, calculates the number of mip maps. 0 on error +inline int calcNumMipLevels(IResource::Type type, ITextureResource::Extents size) +{ + const int maxDimensionSize = calcMaxDimension(size, type); + return (maxDimensionSize > 0) ? (Math::Log2Floor(maxDimensionSize) + 1) : 0; +} + +/// Calculate the total number of sub resources. 0 on error. +inline int calcNumSubResources(const ITextureResource::Desc& desc) +{ + const int numMipMaps = + (desc.numMipLevels > 0) ? desc.numMipLevels : calcNumMipLevels(desc.type, desc.size); + const int arrSize = (desc.arraySize > 0) ? desc.arraySize : 1; + + switch (desc.type) + { + case IResource::Type::Texture1D: + case IResource::Type::Texture2D: + case IResource::Type::Texture3D: + { + return numMipMaps * arrSize; + } + case IResource::Type::TextureCube: + { + // There are 6 faces to a cubemap + return numMipMaps * arrSize * 6; + } + default: + return 0; + } +} + /* static */ Result ShaderRendererUtil::generateTextureResource( const InputTextureDesc& inputDesc, ResourceState defaultState, |
