[Bf-blender-cvs] [49ece611955] cycles_texture_cache: Merge branch 'master' into cycles_texture_cache
Stefan Werner
noreply at git.blender.org
Mon Jun 15 12:33:10 CEST 2020
Commit: 49ece611955bd8bfa28c9a504252e7329094d1ff
Author: Stefan Werner
Date: Wed Mar 25 14:49:25 2020 +0100
Branches: cycles_texture_cache
https://developer.blender.org/rB49ece611955bd8bfa28c9a504252e7329094d1ff
Merge branch 'master' into cycles_texture_cache
===================================================================
===================================================================
diff --cc intern/cycles/blender/blender_python.cpp
index d4df0e973bc,89bcebda193..0dd95a371b3
--- a/intern/cycles/blender/blender_python.cpp
+++ b/intern/cycles/blender/blender_python.cpp
@@@ -19,10 -19,11 +19,12 @@@
#include "blender/CCL_api.h"
#include "blender/blender_device.h"
- #include "blender/blender_sync.h"
#include "blender/blender_session.h"
+ #include "blender/blender_sync.h"
+ #include "blender/blender_util.h"
#include "render/denoising.h"
++#include "render/image_oiio.h"
#include "render/merge.h"
#include "util/util_debug.h"
@@@ -638,21 -639,6 +640,21 @@@ static PyObject *osl_compile_func(PyObj
}
#endif
+static PyObject *oiio_make_tx(PyObject * /*self*/, PyObject *args)
+{
+ const char *inputfile = NULL, *outputfile = NULL, *colorspace = NULL;
+ int extension = EXTENSION_CLIP;
+
+ if (!PyArg_ParseTuple(args, "sssi", &inputfile, &outputfile, &colorspace, &extension))
+ return NULL;
+
+ /* return */
- if (!ImageManager::make_tx(inputfile, outputfile, ustring(colorspace), (ExtensionType)extension))
++ if (!OIIOImageLoader::make_tx(inputfile, outputfile, ustring(colorspace), (ExtensionType)extension))
+ Py_RETURN_FALSE;
+
+ Py_RETURN_TRUE;
+}
+
static PyObject *system_info_func(PyObject * /*self*/, PyObject * /*value*/)
{
string system_info = Device::device_capabilities();
diff --cc intern/cycles/device/device_cpu.cpp
index 7386f3a9fb4,57e8523e02a..7e37219ac6e
--- a/intern/cycles/device/device_cpu.cpp
+++ b/intern/cycles/device/device_cpu.cpp
@@@ -34,7 -35,7 +35,8 @@@
#include "kernel/kernel_types.h"
#include "kernel/split/kernel_split_data.h"
#include "kernel/kernel_globals.h"
+#include "kernel/kernel_oiio_globals.h"
+ #include "kernel/kernel_adaptive_sampling.h"
#include "kernel/filter/filter.h"
@@@ -517,20 -525,16 +536,21 @@@ class CPUDevice : public Device
#endif
}
+ void *oiio_memory()
+ {
+ return &oiio_globals;
+ }
+
void thread_run(DeviceTask *task)
{
- if (task->type == DeviceTask::RENDER) {
+ if (task->type == DeviceTask::RENDER)
thread_render(*task);
- }
- else if (task->type == DeviceTask::FILM_CONVERT)
- thread_film_convert(*task);
else if (task->type == DeviceTask::SHADER)
thread_shader(*task);
+ else if (task->type == DeviceTask::FILM_CONVERT)
+ thread_film_convert(*task);
+ else if (task->type == DeviceTask::DENOISE_BUFFER)
+ thread_denoise(*task);
}
class CPUDeviceTask : public DeviceTask {
diff --cc intern/cycles/kernel/kernel_path.h
index e746647ecbb,db35303e3f1..18543e64432
--- a/intern/cycles/kernel/kernel_path.h
+++ b/intern/cycles/kernel/kernel_path.h
@@@ -29,8 -30,9 +30,9 @@@
#include "kernel/kernel_write_passes.h"
#include "kernel/kernel_accumulate.h"
-#include "kernel/kernel_shader.h"
#include "kernel/kernel_light.h"
+#include "kernel/kernel_shader.h"
+ #include "kernel/kernel_adaptive_sampling.h"
#include "kernel/kernel_passes.h"
#if defined(__VOLUME__) || defined(__SUBSURFACE__)
diff --cc intern/cycles/kernel/osl/osl_services.cpp
index 7849a96ed0c,2857de533f3..4ba0d77b0d2
--- a/intern/cycles/kernel/osl/osl_services.cpp
+++ b/intern/cycles/kernel/osl/osl_services.cpp
@@@ -55,8 -56,8 +56,9 @@@
#include "kernel/kernel_projection.h"
#include "kernel/kernel_accumulate.h"
+#include "kernel/kernel_light.h"
#include "kernel/kernel_shader.h"
+ // clang-format on
CCL_NAMESPACE_BEGIN
diff --cc intern/cycles/kernel/svm/svm.h
index 3674b57b59e,abeb8fa7457..40fff6f5c08
--- a/intern/cycles/kernel/svm/svm.h
+++ b/intern/cycles/kernel/svm/svm.h
@@@ -309,12 -312,11 +312,11 @@@ ccl_device_noinline void svm_eval_nodes
svm_node_vector_displacement(kg, sd, stack, node, &offset);
break;
# endif /* NODES_FEATURE(NODE_FEATURE_BUMP) */
- # ifdef __TEXTURES__
case NODE_TEX_IMAGE:
- svm_node_tex_image(kg, sd, stack, node, &offset);
+ svm_node_tex_image(kg, sd, path_flag, stack, node, &offset);
break;
case NODE_TEX_IMAGE_BOX:
- svm_node_tex_image_box(kg, sd, stack, node);
+ svm_node_tex_image_box(kg, sd, path_flag, stack, node);
break;
case NODE_TEX_NOISE:
svm_node_tex_noise(kg, sd, stack, node.y, node.z, node.w, &offset);
@@@ -427,9 -422,8 +422,8 @@@
case NODE_CAMERA:
svm_node_camera(kg, sd, stack, node.y, node.z, node.w);
break;
- # ifdef __TEXTURES__
case NODE_TEX_ENVIRONMENT:
- svm_node_tex_environment(kg, sd, stack, node);
+ svm_node_tex_environment(kg, sd, path_flag, stack, node);
break;
case NODE_TEX_SKY:
svm_node_tex_sky(kg, sd, stack, node, &offset);
diff --cc intern/cycles/kernel/svm/svm_image.h
index 155c2ee5252,f57c85fc23e..f6db9151b17
--- a/intern/cycles/kernel/svm/svm_image.h
+++ b/intern/cycles/kernel/svm/svm_image.h
@@@ -14,25 -14,9 +14,24 @@@
* limitations under the License.
*/
+#ifdef __OIIO__
+# include "kernel/kernel_oiio_globals.h"
+# define NEAREST_LOOKUP_PATHS \
+ (PATH_RAY_DIFFUSE | PATH_RAY_SHADOW | PATH_RAY_DIFFUSE_ANCESTOR | PATH_RAY_VOLUME_SCATTER | \
+ PATH_RAY_GLOSSY | PATH_RAY_EMISSION)
+# define DIFFUSE_BLUR_PATHS (PATH_RAY_DIFFUSE | PATH_RAY_DIFFUSE_ANCESTOR)
+#endif
+
CCL_NAMESPACE_BEGIN
- #ifdef __TEXTURES__
-ccl_device float4 svm_image_texture(KernelGlobals *kg, int id, float x, float y, uint flags)
+ccl_device float4 svm_image_texture(KernelGlobals *kg,
+ int id,
+ float x,
+ float y,
+ differential ds,
+ differential dt,
+ uint flags,
+ int path_flag)
{
if (id == -1) {
return make_float4(
diff --cc intern/cycles/render/image.cpp
index f8194e80d1c,67ed1176171..1e447236759
--- a/intern/cycles/render/image.cpp
+++ b/intern/cycles/render/image.cpp
@@@ -32,9 -34,6 +34,8 @@@
# include <OSL/oslexec.h>
#endif
+#include "kernel/kernel_oiio_globals.h"
- #include <OpenImageIO/imagebufalgo.h>
+
CCL_NAMESPACE_BEGIN
namespace {
@@@ -113,81 -96,128 +98,128 @@@ ImageHandle::ImageHandle(const ImageHan
}
}
- ImageManager::~ImageManager()
+ ImageHandle &ImageHandle::operator=(const ImageHandle &other)
{
- for (size_t type = 0; type < IMAGE_DATA_NUM_TYPES; type++) {
- for (size_t slot = 0; slot < images[type].size(); slot++)
- assert(!images[type][slot]);
+ clear();
+ manager = other.manager;
+ tile_slots = other.tile_slots;
+
+ foreach (const int slot, tile_slots) {
+ manager->add_image_user(slot);
}
+
+ return *this;
}
- void ImageManager::set_pack_images(bool pack_images_)
+ ImageHandle::~ImageHandle()
{
- pack_images = pack_images_;
+ clear();
}
- void ImageManager::set_oiio_texture_system(void *texture_system)
+ void ImageHandle::clear()
{
- oiio_texture_system = texture_system;
+ foreach (const int slot, tile_slots) {
+ manager->remove_image_user(slot);
+ }
+
+ tile_slots.clear();
+ manager = NULL;
}
- bool ImageManager::set_animation_frame_update(int frame)
+ bool ImageHandle::empty()
{
- if (frame != animation_frame) {
- animation_frame = frame;
+ return tile_slots.empty();
+ }
- for (size_t type = 0; type < IMAGE_DATA_NUM_TYPES; type++) {
- for (size_t slot = 0; slot < images[type].size(); slot++) {
- if (images[type][slot] && images[type][slot]->animated)
- return true;
- }
- }
+ int ImageHandle::num_tiles()
+ {
+ return tile_slots.size();
+ }
+
+ ImageMetaData ImageHandle::metadata()
+ {
+ if (tile_slots.empty()) {
+ return ImageMetaData();
}
- return false;
+ ImageManager::Image *img = manager->images[tile_slots.front()];
+ manager->load_image_metadata(img);
+ return img->metadata;
}
- device_memory *ImageManager::image_memory(int flat_slot)
+ int ImageHandle::svm_slot(const int tile_index) const
{
- ImageDataType type;
- int slot = flattened_slot_to_type_index(flat_slot, &type);
+ if (tile_index >= tile_slots.size()) {
+ return -1;
+ }
- Image *img = images[type][slot];
- if (manager->osl_texture_system) {
++ if (manager->oiio_texture_system) {
+ ImageManager::Image *img = manager->images[tile_slots[tile_index]];
+ if (!img->loader->osl_filepath().empty()) {
+ return -1;
+ }
+ }
- return img->mem;
+ return tile_slots[tile_index];
}
- bool ImageManager::get_image_metadata(int flat_slot, ImageMetaData &metadata)
+ device_texture *ImageHandle::image_memory(const int tile_index) const
{
- if (flat_slot == -1) {
- return false;
+ if (tile_index >= tile_slots.size()) {
+ return NULL;
}
- ImageDataType type;
- int slot = flattened_slot_to_type_index(flat_slot, &type);
+ ImageManager::Image *img = manager->images[tile_slots[tile_index]];
+ return img ? img->mem : NULL;
+ }
- Image *img = images[type][slot];
- if (img) {
- metadata = img->metadata;
- return true;
- }
+ bool ImageHandle::operator==(const ImageHandle &other) const
+ {
+ return manager == other.manager && tile_slots == other.tile_slots;
+ }
- return false;
+ /* Image MetaData */
+
+ ImageMetaData::ImageMetaData()
+ : channels(0),
+ width(0),
+ height(0),
+ depth(0),
+ type(IMAGE_DATA_NUM_TYPES),
+ colorspace(u_colorspace_raw),
+ colorspace_file_format(""),
+ use_transform_3d(false),
+ compress_as_srgb(false)
+ {
}
- void ImageManager::metadata_detect_colorspace(ImageMetaData &metadata, const char *file_format)
+ bool ImageMetaData::operator==(const ImageMetaData &other) const
+ {
+ return channels == other.channels && width == other.width && height == other.height &&
+ depth == other.depth && use_transform_3d == other.use_transform_3d &&
+ (!use_transform_3d || transform_3d == other.transform_3d) && type == other.type &&
+ colorspace == other.colorspace && compress_as_srgb == other.compress_
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list