Skip to content

Commit 5f6bb88

Browse files
authored
testshade: use renderer's error handler, convert raw pointers to unique_ptr (#2082)
Replace the standalone global ErrorHandler with the renderer's own errhandler() so that error output is properly routed through the renderer rather than a disconnected handler. This ensures errors during shading are visible in the same context as the renderer that owns the ShadingSystem. Also replace some raw pointers with `new`/`delete` with std::unique_ptr. --------- Signed-off-by: Larry Gritz <lg@larrygritz.com>
1 parent 8265a07 commit 5f6bb88

File tree

3 files changed

+42
-36
lines changed

3 files changed

+42
-36
lines changed

src/liboslexec/loadshader.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -589,8 +589,9 @@ ShadingSystemImpl::loadshader(string_view cname)
589589
}
590590
if (ok) {
591591
++m_stat_shaders_loaded;
592-
infofmt("Loaded \"{}\" (took {})", filename,
593-
Strutil::timeintervalformat(loadtime, 2));
592+
if (debug())
593+
infofmt("Loaded \"{}\" (took {})", filename,
594+
Strutil::timeintervalformat(loadtime, 2));
594595
OSL_DASSERT(r);
595596
r->resolve_syms();
596597
// if (debug()) {
@@ -643,8 +644,9 @@ ShadingSystemImpl::LoadMemoryCompiledShader(string_view shadername,
643644
}
644645
if (ok) {
645646
++m_stat_shaders_loaded;
646-
infofmt("Loaded \"{}\" (took {})", shadername,
647-
Strutil::timeintervalformat(loadtime, 2));
647+
if (debug())
648+
infofmt("Loaded \"{}\" (took {})", shadername,
649+
Strutil::timeintervalformat(loadtime, 2));
648650
OSL_DASSERT(r);
649651
r->resolve_syms();
650652
// if (debug()) {

src/liboslexec/shadingsys.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,8 @@ ShadingSystem::ShadingSystem(RendererServices* renderer,
6868
err = &ErrorHandler::default_handler();
6969
}
7070
m_impl = new ShadingSystemImpl(renderer, texturesystem, err);
71-
#ifndef NDEBUG
72-
err->infofmt("creating new ShadingSystem {:p}", (void*)this);
73-
#endif
71+
if (m_impl->debug())
72+
err->debugfmt("creating new ShadingSystem {:p}", (void*)this);
7473
}
7574

7675

src/testshade/testshade.cpp

Lines changed: 34 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,6 @@ static ParamValueList params;
106106
static std::vector<ParamHints> param_hints;
107107
static ParamValueList reparams;
108108
static std::string reparam_layer;
109-
static ErrorHandler errhandler;
110109
static int iters = 1;
111110
static std::string raytype_name = "camera";
112111
static int raytype_bit = 0;
@@ -206,7 +205,8 @@ set_shadingsys_options()
206205
shadingsys->attribute("llvm_debug", (llvm_debug ? 2 : 0));
207206

208207
shadingsys->attribute("debug", debug2 ? 2 : (debug1 ? 1 : 0));
209-
shadingsys->attribute("compile_report", debug1 | debug2);
208+
if (debug1 || debug2)
209+
shadingsys->attribute("compile_report", 1);
210210
int opt = 2; // default
211211
if (O0)
212212
opt = 0;
@@ -669,27 +669,28 @@ stash_userdata(cspan<const char*> argv)
669669
void
670670
print_info()
671671
{
672-
ErrorHandler errhandler;
673-
SimpleRenderer* rend = nullptr;
672+
std::unique_ptr<SimpleRenderer> rend;
674673
#if OSL_USE_OPTIX
675674
if (use_optix)
676-
rend = new OptixGridRenderer;
675+
rend.reset(new OptixGridRenderer);
677676
else
678677
#endif
679-
rend = new SimpleRenderer;
678+
rend.reset(new SimpleRenderer);
680679
auto texturesys = TextureSystem::create();
681680
#if OIIO_TEXTURESYSTEM_CREATE_SHARED
682-
shadingsys = new ShadingSystem(rend, texturesys.get(), &errhandler);
681+
auto shadingsys = std::make_unique<ShadingSystem>(rend.get(),
682+
texturesys.get(),
683+
&rend->errhandler());
683684
#else
684-
shadingsys = new ShadingSystem(rend, texturesys, &errhandler);
685+
auto shadingsys = std::make_unique<ShadingSystem>(rend.get(), texturesys,
686+
&rend->errhandler());
685687
#endif
686-
rend->init_shadingsys(shadingsys);
688+
rend->init_shadingsys(shadingsys.get());
687689
set_shadingsys_options();
688690

689691
std::cout << "\n" << shadingsys->getstats(5) << "\n";
690692

691-
delete shadingsys;
692-
delete rend;
693+
shadingsys.reset();
693694
}
694695

695696

@@ -1945,13 +1946,13 @@ test_shade(int argc, const char* argv[])
19451946
3.5);
19461947
}
19471948

1948-
SimpleRenderer* rend = nullptr;
1949+
std::unique_ptr<SimpleRenderer> rend;
19491950
#if OSL_USE_OPTIX
19501951
if (use_optix)
1951-
rend = new OptixGridRenderer;
1952+
rend.reset(new OptixGridRenderer);
19521953
else
19531954
#endif
1954-
rend = new SimpleRenderer;
1955+
rend.reset(new SimpleRenderer);
19551956

19561957
// Other renderer and global options
19571958
if (debug1 || verbose)
@@ -1981,7 +1982,7 @@ test_shade(int argc, const char* argv[])
19811982
// object that services callbacks from the shading system, the
19821983
// TextureSystem (note: passing nullptr just makes the ShadingSystem
19831984
// make its own TS), and an error handler.
1984-
shadingsys = new ShadingSystem(rend, texturesys, &errhandler);
1985+
shadingsys = new ShadingSystem(rend.get(), texturesys, &rend->errhandler());
19851986
rend->init_shadingsys(shadingsys);
19861987

19871988
// Register the layout of all closures known to this renderer
@@ -2122,14 +2123,16 @@ test_shade(int argc, const char* argv[])
21222123

21232124
#if OSL_USE_OPTIX
21242125
if (use_optix) {
2125-
reinterpret_cast<OptixGridRenderer*>(rend)->set_transforms(Mobj, Mshad);
2126-
reinterpret_cast<OptixGridRenderer*>(rend)->register_named_transforms();
2127-
reinterpret_cast<OptixGridRenderer*>(rend)->synch_attributes();
2126+
reinterpret_cast<OptixGridRenderer*>(rend.get())
2127+
->set_transforms(Mobj, Mshad);
2128+
reinterpret_cast<OptixGridRenderer*>(rend.get())
2129+
->register_named_transforms();
2130+
reinterpret_cast<OptixGridRenderer*>(rend.get())->synch_attributes();
21282131
}
21292132
#endif
21302133

21312134
// Set up the image outputs requested on the command line
2132-
setup_output_images(rend, shadingsys, shadergroup);
2135+
setup_output_images(rend.get(), shadingsys, shadergroup);
21332136

21342137
if (debug1)
21352138
test_group_attributes(shadergroup.get());
@@ -2204,29 +2207,33 @@ test_shade(int argc, const char* argv[])
22042207
if (batch_size == 16) {
22052208
OIIO::ImageBufAlgo::parallel_image(
22062209
roi, num_threads, [&](OIIO::ROI sub_roi) -> void {
2207-
batched_shade_region<16>(rend, shadergroup.get(),
2208-
sub_roi, save);
2210+
batched_shade_region<16>(rend.get(),
2211+
shadergroup.get(), sub_roi,
2212+
save);
22092213
});
22102214
} else if (batch_size == 8) {
22112215
OIIO::ImageBufAlgo::parallel_image(
22122216
roi, num_threads, [&](OIIO::ROI sub_roi) -> void {
2213-
batched_shade_region<8>(rend, shadergroup.get(),
2214-
sub_roi, save);
2217+
batched_shade_region<8>(rend.get(),
2218+
shadergroup.get(), sub_roi,
2219+
save);
22152220
});
22162221
} else {
22172222
OSL_ASSERT((batch_size == 4) && "Unsupported batch size");
22182223
OIIO::ImageBufAlgo::parallel_image(
22192224
roi, num_threads, [&](OIIO::ROI sub_roi) -> void {
2220-
batched_shade_region<4>(rend, shadergroup.get(),
2221-
sub_roi, save);
2225+
batched_shade_region<4>(rend.get(),
2226+
shadergroup.get(), sub_roi,
2227+
save);
22222228
});
22232229
}
22242230
} else
22252231
# endif
22262232
{
22272233
OIIO::ImageBufAlgo::parallel_image(
22282234
roi, num_threads, [&](OIIO::ROI sub_roi) -> void {
2229-
shade_region(rend, shadergroup.get(), sub_roi, save);
2235+
shade_region(rend.get(), shadergroup.get(), sub_roi,
2236+
save);
22302237
});
22312238
}
22322239
#endif
@@ -2255,7 +2262,7 @@ test_shade(int argc, const char* argv[])
22552262
journal::TrackRecentlyReported tracker_error_warnings(
22562263
limit_errors, error_history_capacity, limit_warnings,
22572264
warning_history_capacity);
2258-
TestshadeReporter reporter(&errhandler, tracker_error_warnings);
2265+
TestshadeReporter reporter(&rend->errhandler(), tracker_error_warnings);
22592266
OSL::journal::Reader jreader(jbuffer.get(), reporter);
22602267
jreader.process();
22612268
// Need to call journal::initialize_buffer before re-using the jbuffer
@@ -2352,7 +2359,5 @@ test_shade(int argc, const char* argv[])
23522359
retcode = EXIT_FAILURE;
23532360
}
23542361

2355-
delete rend;
2356-
23572362
return retcode;
23582363
}

0 commit comments

Comments
 (0)