Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorJesse Yurkovich <jesse.y@gmail.com>2022-03-16 06:53:10 +0300
committerJesse Yurkovich <jesse.y@gmail.com>2022-03-16 07:12:49 +0300
commit24ada9c96027971e50e9d103c746d674024b6892 (patch)
tree78ccfa159494fdcb9b0c7b46427b5c6ba948a93f /source
parentf1501ac0608bef767890f78221ca710bf8900b59 (diff)
Cleanup: Remove volatile from RenderResult and related APIs
Volatile fields were introduced to the RenderResult struct years ago[1]. However, volatile is most likely not doing what it was intended to do in this instance, and is problematic when moving files to c++ (see discussion from D13962). There are complex rules around what happens to these fields but none of them guarantee what the above commit alluded to. This patch drops the volatile and cleans up the APIs surrounding it. [1] rB7930c40051ef1b1a26140629cf1299aa89eed859 Passing on all platforms: https://builder.blender.org/admin/#/builders/18/builds/338 Differential Revision: https://developer.blender.org/D14298
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/intern/image.cc26
-rw-r--r--source/blender/editors/render/render_internal.cc4
-rw-r--r--source/blender/editors/render/render_preview.cc4
-rw-r--r--source/blender/render/RE_pipeline.h14
-rw-r--r--source/blender/render/intern/pipeline.c10
-rw-r--r--source/blender/render/intern/render_types.h2
6 files changed, 16 insertions, 44 deletions
diff --git a/source/blender/blenkernel/intern/image.cc b/source/blender/blenkernel/intern/image.cc
index 4a1cbdba42a..88888831e1c 100644
--- a/source/blender/blenkernel/intern/image.cc
+++ b/source/blender/blenkernel/intern/image.cc
@@ -5105,31 +5105,7 @@ static ImBuf *image_get_render_result(Image *ima, ImageUser *iuser, void **r_loc
RE_AcquireResultImage(re, &rres, actview);
}
else if ((slot = BKE_image_get_renderslot(ima, ima->render_slot))->render) {
- /* Unfortunately each field needs to be set individually because RenderResult
- * contains volatile fields and using memcpy would invoke undefined behavior with c++. */
- rres.next = slot->render->next;
- rres.prev = slot->render->prev;
- rres.rectx = slot->render->rectx;
- rres.recty = slot->render->recty;
- rres.sample_nr = slot->render->sample_nr;
- rres.rect32 = slot->render->rect32;
- rres.rectf = slot->render->rectf;
- rres.rectz = slot->render->rectz;
- rres.tilerect = slot->render->tilerect;
- rres.xof = slot->render->xof;
- rres.yof = slot->render->yof;
- rres.layers = slot->render->layers;
- rres.views = slot->render->views;
- rres.renrect.xmin = slot->render->renrect.xmin;
- rres.renrect.xmax = slot->render->renrect.xmax;
- rres.renrect.ymin = slot->render->renrect.ymin;
- rres.renrect.ymax = slot->render->renrect.ymax;
- rres.renlay = slot->render->renlay;
- rres.framenr = slot->render->framenr;
- rres.text = slot->render->text;
- rres.error = slot->render->error;
- rres.stamp_data = slot->render->stamp_data;
- rres.passes_allocated = slot->render->passes_allocated;
+ rres = *(slot->render);
rres.have_combined = ((RenderView *)rres.views.first)->rectf != nullptr;
}
diff --git a/source/blender/editors/render/render_internal.cc b/source/blender/editors/render/render_internal.cc
index 6c04523ed07..6796eff29d4 100644
--- a/source/blender/editors/render/render_internal.cc
+++ b/source/blender/editors/render/render_internal.cc
@@ -101,7 +101,7 @@ struct RenderJob {
/* called inside thread! */
static bool image_buffer_calc_tile_rect(const RenderResult *rr,
const ImBuf *ibuf,
- volatile rcti *renrect,
+ rcti *renrect,
rcti *r_ibuf_rect,
int *r_offset_x,
int *r_offset_y)
@@ -556,7 +556,7 @@ static void render_image_update_pass_and_layer(RenderJob *rj, RenderResult *rr,
}
}
-static void image_rect_update(void *rjv, RenderResult *rr, volatile rcti *renrect)
+static void image_rect_update(void *rjv, RenderResult *rr, rcti *renrect)
{
RenderJob *rj = static_cast<RenderJob *>(rjv);
Image *ima = rj->image;
diff --git a/source/blender/editors/render/render_preview.cc b/source/blender/editors/render/render_preview.cc
index cfb88cd7868..57858b202d2 100644
--- a/source/blender/editors/render/render_preview.cc
+++ b/source/blender/editors/render/render_preview.cc
@@ -987,9 +987,7 @@ static void action_preview_render(IconPreview *preview, IconPreviewSize *preview
* \{ */
/* inside thread, called by renderer, sets job update value */
-static void shader_preview_update(void *spv,
- RenderResult *UNUSED(rr),
- volatile struct rcti *UNUSED(rect))
+static void shader_preview_update(void *spv, RenderResult *UNUSED(rr), struct rcti *UNUSED(rect))
{
ShaderPreview *sp = static_cast<ShaderPreview *>(spv);
diff --git a/source/blender/render/RE_pipeline.h b/source/blender/render/RE_pipeline.h
index 21be690a56e..a8436772299 100644
--- a/source/blender/render/RE_pipeline.h
+++ b/source/blender/render/RE_pipeline.h
@@ -123,8 +123,8 @@ typedef struct RenderResult {
ListBase views; /* RenderView */
/* allowing live updates: */
- volatile rcti renrect;
- volatile RenderLayer *renlay;
+ rcti renrect;
+ RenderLayer *renlay;
/* for render results in Image, verify validity for sequences */
int framenr;
@@ -248,9 +248,7 @@ void RE_render_result_rect_from_ibuf(struct RenderResult *rr,
int view_id);
struct RenderLayer *RE_GetRenderLayer(struct RenderResult *rr, const char *name);
-float *RE_RenderLayerGetPass(volatile struct RenderLayer *rl,
- const char *name,
- const char *viewname);
+float *RE_RenderLayerGetPass(struct RenderLayer *rl, const char *name, const char *viewname);
bool RE_HasSingleLayer(struct Render *re);
@@ -400,7 +398,7 @@ void RE_display_clear_cb(struct Render *re,
void (*f)(void *handle, RenderResult *rr));
void RE_display_update_cb(struct Render *re,
void *handle,
- void (*f)(void *handle, RenderResult *rr, volatile struct rcti *rect));
+ void (*f)(void *handle, RenderResult *rr, struct rcti *rect));
void RE_stats_draw_cb(struct Render *re, void *handle, void (*f)(void *handle, RenderStats *rs));
void RE_progress_cb(struct Render *re, void *handle, void (*f)(void *handle, float));
void RE_draw_lock_cb(struct Render *re, void *handle, void (*f)(void *handle, bool lock));
@@ -429,13 +427,13 @@ int RE_seq_render_active(struct Scene *scene, struct RenderData *rd);
bool RE_layers_have_name(struct RenderResult *result);
bool RE_passes_have_name(struct RenderLayer *rl);
-struct RenderPass *RE_pass_find_by_name(volatile struct RenderLayer *rl,
+struct RenderPass *RE_pass_find_by_name(struct RenderLayer *rl,
const char *name,
const char *viewname);
/**
* Only provided for API compatibility, don't use this in new code!
*/
-struct RenderPass *RE_pass_find_by_type(volatile struct RenderLayer *rl,
+struct RenderPass *RE_pass_find_by_type(struct RenderLayer *rl,
int passtype,
const char *viewname);
diff --git a/source/blender/render/intern/pipeline.c b/source/blender/render/intern/pipeline.c
index 913a4d3857b..f66d65ce68c 100644
--- a/source/blender/render/intern/pipeline.c
+++ b/source/blender/render/intern/pipeline.c
@@ -166,7 +166,7 @@ static void result_nothing(void *UNUSED(arg), RenderResult *UNUSED(rr))
}
static void result_rcti_nothing(void *UNUSED(arg),
RenderResult *UNUSED(rr),
- volatile struct rcti *UNUSED(rect))
+ struct rcti *UNUSED(rect))
{
}
static void current_scene_nothing(void *UNUSED(arg), Scene *UNUSED(scene))
@@ -262,7 +262,7 @@ void RE_FreeRenderResult(RenderResult *rr)
render_result_free(rr);
}
-float *RE_RenderLayerGetPass(volatile RenderLayer *rl, const char *name, const char *viewname)
+float *RE_RenderLayerGetPass(RenderLayer *rl, const char *name, const char *viewname)
{
RenderPass *rpass = RE_pass_find_by_name(rl, name, viewname);
return rpass ? rpass->rect : NULL;
@@ -890,7 +890,7 @@ void RE_display_clear_cb(Render *re, void *handle, void (*f)(void *handle, Rende
}
void RE_display_update_cb(Render *re,
void *handle,
- void (*f)(void *handle, RenderResult *rr, volatile rcti *rect))
+ void (*f)(void *handle, RenderResult *rr, rcti *rect))
{
re->display_update = f;
re->duh = handle;
@@ -2743,7 +2743,7 @@ bool RE_passes_have_name(struct RenderLayer *rl)
return false;
}
-RenderPass *RE_pass_find_by_name(volatile RenderLayer *rl, const char *name, const char *viewname)
+RenderPass *RE_pass_find_by_name(RenderLayer *rl, const char *name, const char *viewname)
{
RenderPass *rp = NULL;
@@ -2760,7 +2760,7 @@ RenderPass *RE_pass_find_by_name(volatile RenderLayer *rl, const char *name, con
return rp;
}
-RenderPass *RE_pass_find_by_type(volatile RenderLayer *rl, int passtype, const char *viewname)
+RenderPass *RE_pass_find_by_type(RenderLayer *rl, int passtype, const char *viewname)
{
#define CHECK_PASS(NAME) \
if (passtype == SCE_PASS_##NAME) { \
diff --git a/source/blender/render/intern/render_types.h b/source/blender/render/intern/render_types.h
index b3c80f7dded..27b014ac289 100644
--- a/source/blender/render/intern/render_types.h
+++ b/source/blender/render/intern/render_types.h
@@ -99,7 +99,7 @@ struct Render {
void *dih;
void (*display_clear)(void *handle, RenderResult *rr);
void *dch;
- void (*display_update)(void *handle, RenderResult *rr, volatile rcti *rect);
+ void (*display_update)(void *handle, RenderResult *rr, rcti *rect);
void *duh;
void (*current_scene_update)(void *handle, struct Scene *scene);
void *suh;