From 9bb4bf57485475faa491e31b094bded67d5dd2dd Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Mon, 23 May 2022 15:59:52 +0200 Subject: Fix missing 64bit casts when calculating Cycles render buffer offset Found those missing casts while looking into a crash report made in the Blender Chat. Was unable to reproduce the crash, but the casts should totally be there to avoid integer overflow. --- intern/cycles/kernel/film/adaptive_sampling.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'intern/cycles/kernel/film/adaptive_sampling.h') diff --git a/intern/cycles/kernel/film/adaptive_sampling.h b/intern/cycles/kernel/film/adaptive_sampling.h index ad9b3b08ac5..16867c39d99 100644 --- a/intern/cycles/kernel/film/adaptive_sampling.h +++ b/intern/cycles/kernel/film/adaptive_sampling.h @@ -91,13 +91,13 @@ ccl_device void kernel_adaptive_sampling_filter_x(KernelGlobals kg, bool prev = false; for (int x = start_x; x < start_x + width; ++x) { int index = offset + x + y * stride; - ccl_global float *buffer = render_buffer + index * kernel_data.film.pass_stride; + ccl_global float *buffer = render_buffer + (uint64_t)index * kernel_data.film.pass_stride; const uint aux_w_offset = kernel_data.film.pass_adaptive_aux_buffer + 3; if (buffer[aux_w_offset] == 0.0f) { if (x > start_x && !prev) { index = index - 1; - buffer = render_buffer + index * kernel_data.film.pass_stride; + buffer = render_buffer + (uint64_t)index * kernel_data.film.pass_stride; buffer[aux_w_offset] = 0.0f; } prev = true; @@ -124,13 +124,13 @@ ccl_device void kernel_adaptive_sampling_filter_y(KernelGlobals kg, bool prev = false; for (int y = start_y; y < start_y + height; ++y) { int index = offset + x + y * stride; - ccl_global float *buffer = render_buffer + index * kernel_data.film.pass_stride; + ccl_global float *buffer = render_buffer + (uint64_t)index * kernel_data.film.pass_stride; const uint aux_w_offset = kernel_data.film.pass_adaptive_aux_buffer + 3; if (buffer[aux_w_offset] == 0.0f) { if (y > start_y && !prev) { index = index - stride; - buffer = render_buffer + index * kernel_data.film.pass_stride; + buffer = render_buffer + (uint64_t)index * kernel_data.film.pass_stride; buffer[aux_w_offset] = 0.0f; } prev = true; -- cgit v1.2.3