summaryrefslogtreecommitdiffstats
path: root/tools/render-test/shader-renderer-util.cpp
diff options
context:
space:
mode:
authorSimon Kallweit <64953474+skallweitNV@users.noreply.github.com>2024-08-30 18:50:19 +0200
committerGitHub <noreply@github.com>2024-08-30 09:50:19 -0700
commitf428a058ea48535a323c32d206ebc7e551c3c3e9 (patch)
tree2b004d07b630196f902b88679b4a08d8faaa97bc /tools/render-test/shader-renderer-util.cpp
parent12137e9b00436eee3bf27f7a2fc5106513af8981 (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.cpp91
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,