Skip to content

Commit

Permalink
Merge pull request #51604 from TechnoPorg/fix-vulkan-parent-material
Browse files Browse the repository at this point in the history
Vulkan: Fix CanvasItem::use_parent_material
  • Loading branch information
JFonS authored Sep 11, 2021
2 parents 80aba79 + b097e7f commit 5f69218
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 5 deletions.
2 changes: 1 addition & 1 deletion drivers/vulkan/rendering_device_vulkan.h
Original file line number Diff line number Diff line change
Expand Up @@ -813,7 +813,7 @@ class RenderingDeviceVulkan : public RenderingDevice {
// When using split command lists, this is
// implemented internally using secondary command
// buffers. As they can be created in threads,
// each needs it's own command pool.
// each needs its own command pool.

struct SplitDrawListAllocator {
VkCommandPool command_pool = VK_NULL_HANDLE;
Expand Down
10 changes: 6 additions & 4 deletions servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1086,7 +1086,7 @@ void RendererCanvasRenderRD::_render_items(RID p_to_render_target, int p_item_co
}
}

RID material = ci->material;
RID material = ci->material_owner == nullptr ? ci->material : ci->material_owner->material;

if (material.is_null() && ci->canvas_group != nullptr) {
material = default_canvas_group_material;
Expand Down Expand Up @@ -1354,8 +1354,10 @@ void RendererCanvasRenderRD::canvas_render_items(RID p_to_render_target, Item *p
}
}

if (ci->material.is_valid()) {
MaterialData *md = (MaterialData *)storage->material_get_data(ci->material, RendererStorageRD::SHADER_TYPE_2D);
RID material = ci->material_owner == nullptr ? ci->material : ci->material_owner->material;

if (material.is_valid()) {
MaterialData *md = (MaterialData *)storage->material_get_data(material, RendererStorageRD::SHADER_TYPE_2D);
if (md && md->shader_data->valid) {
if (md->shader_data->uses_screen_texture && canvas_group_owner == nullptr) {
if (!material_screen_texture_found) {
Expand All @@ -1375,7 +1377,7 @@ void RendererCanvasRenderRD::canvas_render_items(RID p_to_render_target, Item *p
if (!RD::get_singleton()->uniform_set_is_valid(md->uniform_set)) {
// uniform set may be gone because a dependency was erased. In this case, it will happen
// if a texture is deleted, so just re-create it.
storage->material_force_update_textures(ci->material, RendererStorageRD::SHADER_TYPE_2D);
storage->material_force_update_textures(material, RendererStorageRD::SHADER_TYPE_2D);
}
}
}
Expand Down

0 comments on commit 5f69218

Please sign in to comment.