blender/intern/cycles/kernel/osl/globals.h
Brecht Van Lommel db9060b4d3 Cycles: Stop using OpenImageIO texture cache for OSL
This will be replaced by the texture cache. Advanced OpenImageIO features
will no longer be available, and texture filtering results will be different.
But performance will be better and there will be consistency with SVM.

OSL specifc image tests were removed as these now match SVM exactly and are
tested by WITH_CYCLES_TEST_OSL.

Pull Request: https://projects.blender.org/blender/blender/pulls/154913
2026-03-27 16:07:05 +01:00

104 lines
2.2 KiB
C++

/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
*
* SPDX-License-Identifier: Apache-2.0 */
#pragma once
#ifdef WITH_OSL
# include <OSL/oslexec.h>
# include "util/map.h"
# include "util/param.h"
# include "util/vector.h"
# include "kernel/types.h"
# include "kernel/osl/compat.h"
# include "kernel/osl/types.h"
# ifndef WIN32
using std::isfinite;
# endif
CCL_NAMESPACE_BEGIN
class OSLRenderServices;
class ColorSpaceProcessor;
struct ThreadKernelGlobalsCPU;
/* OSL Globals
*
* Data needed by OSL render services, that is global to a rendering session.
* This includes all OSL shaders, name to attribute mapping and texture handles.
*/
struct OSLGlobals {
OSLGlobals()
{
ss = nullptr;
services = nullptr;
use_shading = false;
use_camera = false;
}
bool use_shading;
bool use_camera;
/* shading system */
OSL::ShadingSystem *ss;
OSLRenderServices *services;
/* shader states */
vector<OSL::ShaderGroupRef> surface_state;
vector<OSL::ShaderGroupRef> volume_state;
vector<OSL::ShaderGroupRef> displacement_state;
vector<OSL::ShaderGroupRef> bump_state;
OSL::ShaderGroupRef background_state;
OSL::ShaderGroupRef camera_state;
/* attributes */
using ObjectNameMap = unordered_map<OSLUStringHash, int>;
ObjectNameMap object_name_map;
vector<ustring> object_names;
};
/* trace() call result */
struct OSLTraceData {
Ray ray;
Intersection isect;
ShaderData sd;
bool setup;
bool init;
bool hit;
bool self_hit;
};
/* thread key for thread specific data lookup */
struct OSLThreadData {
/* Global Data */
OSLGlobals *globals = nullptr;
OSL::ShadingSystem *ss = nullptr;
/* Per-thread data. */
int thread_index = -1;
mutable ShaderGlobals shader_globals;
mutable OSLTraceData tracedata;
OSL::PerThreadInfo *osl_thread_info = nullptr;
OSL::ShadingContext *context = nullptr;
OSLThreadData(OSLGlobals *globals, const int thread_index);
~OSLThreadData();
OSLThreadData(OSLThreadData &other) = delete;
OSLThreadData(OSLThreadData &&other) noexcept;
OSLThreadData &operator=(const OSLThreadData &other) = delete;
OSLThreadData &operator=(OSLThreadData &&other) = delete;
};
CCL_NAMESPACE_END
#endif