From 034df86ec071081f34fc09433eb62f219cfb18fe Mon Sep 17 00:00:00 2001 From: Alexey Smolenchuk Date: Thu, 27 Aug 2026 12:47:46 +0100 Subject: [PATCH 1/3] [testrender] Enable mipmap in optix by switching to cached version of ImageBuf Signed-off-by: Alexey Smolenchuk --- src/testrender/optixraytracer.cpp | 6 ++++-- src/testrender/optixraytracer.h | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/testrender/optixraytracer.cpp b/src/testrender/optixraytracer.cpp index 5f6037a8c..f083cb592 100644 --- a/src/testrender/optixraytracer.cpp +++ b/src/testrender/optixraytracer.cpp @@ -114,6 +114,8 @@ OptixRaytracer::OptixRaytracer() CUDA_CHECK(cudaSetDevice(0)); CUDA_CHECK(cudaStreamCreate(&m_cuda_stream)); + + cache = OIIO::ImageCache::create(); } @@ -930,7 +932,7 @@ OptixRaytracer::get_texture_handle(ustring filename, auto itr = m_samplers.find(filename); if (itr == m_samplers.end()) { // Open image to check the number of mip levels - OIIO::ImageBuf image; + OIIO::ImageBuf image(filename, 0, 0, cache); if (!image.init_spec(filename, 0, 0)) { errhandler().errorfmt("Could not load: {} (hash {})", filename, filename); @@ -1001,7 +1003,7 @@ OptixRaytracer::get_texture_handle(ustring filename, tex_desc.filterMode = cudaFilterModeLinear; tex_desc.readMode = cudaReadModeElementType; tex_desc.normalizedCoords = 1; - tex_desc.maxAnisotropy = 1; + tex_desc.maxAnisotropy = 16; tex_desc.maxMipmapLevelClamp = float(nmiplevels - 1); tex_desc.minMipmapLevelClamp = 0; tex_desc.mipmapFilterMode = cudaFilterModeLinear; diff --git a/src/testrender/optixraytracer.h b/src/testrender/optixraytracer.h index 420c8de03..79ce4ce53 100644 --- a/src/testrender/optixraytracer.h +++ b/src/testrender/optixraytracer.h @@ -4,6 +4,7 @@ #pragma once +#include #include #include @@ -144,6 +145,8 @@ class OptixRaytracer final : public SimpleRaytracer { // CUdeviceptrs that need to be freed after we are done std::vector m_ptrs_to_free; std::vector m_arrays_to_free; + + std::shared_ptr cache; }; From 7a642873a58432cc715df4e1fb3b7e151db393dd Mon Sep 17 00:00:00 2001 From: Alexey Smolenchuk Date: Fri, 28 Aug 2026 13:40:44 +0100 Subject: [PATCH 2/3] temporary switch to seek_subimage Signed-off-by: Alexey Smolenchuk --- src/testrender/optixraytracer.cpp | 12 +++++++++--- src/testrender/optixraytracer.h | 3 --- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/testrender/optixraytracer.cpp b/src/testrender/optixraytracer.cpp index f083cb592..e96cfbdac 100644 --- a/src/testrender/optixraytracer.cpp +++ b/src/testrender/optixraytracer.cpp @@ -114,8 +114,6 @@ OptixRaytracer::OptixRaytracer() CUDA_CHECK(cudaSetDevice(0)); CUDA_CHECK(cudaStreamCreate(&m_cuda_stream)); - - cache = OIIO::ImageCache::create(); } @@ -932,13 +930,21 @@ OptixRaytracer::get_texture_handle(ustring filename, auto itr = m_samplers.find(filename); if (itr == m_samplers.end()) { // Open image to check the number of mip levels - OIIO::ImageBuf image(filename, 0, 0, cache); + OIIO::ImageBuf image; if (!image.init_spec(filename, 0, 0)) { errhandler().errorfmt("Could not load: {} (hash {})", filename, filename); return (TextureHandle*)nullptr; } +#if 1 + // Workaround until OpenImageIO fix nmiplevels() call + int32_t nmiplevels = 0; + auto inp = OIIO::ImageInput::open(filename.c_str()); + while (inp->seek_subimage(0, nmiplevels)) + nmiplevels++; +#else int32_t nmiplevels = std::max(image.nmiplevels(), 1); +#endif int32_t img_width = image.xmax() + 1; int32_t img_height = image.ymax() + 1; diff --git a/src/testrender/optixraytracer.h b/src/testrender/optixraytracer.h index 79ce4ce53..420c8de03 100644 --- a/src/testrender/optixraytracer.h +++ b/src/testrender/optixraytracer.h @@ -4,7 +4,6 @@ #pragma once -#include #include #include @@ -145,8 +144,6 @@ class OptixRaytracer final : public SimpleRaytracer { // CUdeviceptrs that need to be freed after we are done std::vector m_ptrs_to_free; std::vector m_arrays_to_free; - - std::shared_ptr cache; }; From 87ea37334b0a8460ee2fbe235e0b136af0722fa1 Mon Sep 17 00:00:00 2001 From: Alexey Smolenchuk Date: Fri, 28 Aug 2026 13:46:33 +0100 Subject: [PATCH 3/3] format Signed-off-by: Alexey Smolenchuk --- src/testrender/optixraytracer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/testrender/optixraytracer.cpp b/src/testrender/optixraytracer.cpp index e96cfbdac..b54f7fb45 100644 --- a/src/testrender/optixraytracer.cpp +++ b/src/testrender/optixraytracer.cpp @@ -939,7 +939,7 @@ OptixRaytracer::get_texture_handle(ustring filename, #if 1 // Workaround until OpenImageIO fix nmiplevels() call int32_t nmiplevels = 0; - auto inp = OIIO::ImageInput::open(filename.c_str()); + auto inp = OIIO::ImageInput::open(filename.c_str()); while (inp->seek_subimage(0, nmiplevels)) nmiplevels++; #else