Merge pull request #44517 from reduz/fix-error-spam-on-wrong-attachment
Fix error spam on wrong attachment
This commit is contained in:
commit
86de8079fc
3 changed files with 20 additions and 13 deletions
|
@ -4600,7 +4600,7 @@ RID RenderingDeviceVulkan::uniform_set_create(const Vector<Uniform> &p_uniforms,
|
||||||
List<Vector<VkBufferView>> buffer_views;
|
List<Vector<VkBufferView>> buffer_views;
|
||||||
List<Vector<VkDescriptorImageInfo>> image_infos;
|
List<Vector<VkDescriptorImageInfo>> image_infos;
|
||||||
//used for verification to make sure a uniform set does not use a framebuffer bound texture
|
//used for verification to make sure a uniform set does not use a framebuffer bound texture
|
||||||
Vector<RID> attachable_textures;
|
LocalVector<UniformSet::AttachableTexture> attachable_textures;
|
||||||
Vector<Texture *> mutable_sampled_textures;
|
Vector<Texture *> mutable_sampled_textures;
|
||||||
Vector<Texture *> mutable_storage_textures;
|
Vector<Texture *> mutable_storage_textures;
|
||||||
|
|
||||||
|
@ -4693,7 +4693,10 @@ RID RenderingDeviceVulkan::uniform_set_create(const Vector<Uniform> &p_uniforms,
|
||||||
img_info.imageView = texture->view;
|
img_info.imageView = texture->view;
|
||||||
|
|
||||||
if (texture->usage_flags & (TEXTURE_USAGE_COLOR_ATTACHMENT_BIT | TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | TEXTURE_USAGE_RESOLVE_ATTACHMENT_BIT)) {
|
if (texture->usage_flags & (TEXTURE_USAGE_COLOR_ATTACHMENT_BIT | TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | TEXTURE_USAGE_RESOLVE_ATTACHMENT_BIT)) {
|
||||||
attachable_textures.push_back(texture->owner.is_valid() ? texture->owner : uniform.ids[j + 1]);
|
UniformSet::AttachableTexture attachable_texture;
|
||||||
|
attachable_texture.bind = set_uniform.binding;
|
||||||
|
attachable_texture.texture = texture->owner.is_valid() ? texture->owner : uniform.ids[j + 1];
|
||||||
|
attachable_textures.push_back(attachable_texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (texture->usage_flags & TEXTURE_USAGE_STORAGE_BIT) {
|
if (texture->usage_flags & TEXTURE_USAGE_STORAGE_BIT) {
|
||||||
|
@ -4743,7 +4746,10 @@ RID RenderingDeviceVulkan::uniform_set_create(const Vector<Uniform> &p_uniforms,
|
||||||
img_info.imageView = texture->view;
|
img_info.imageView = texture->view;
|
||||||
|
|
||||||
if (texture->usage_flags & (TEXTURE_USAGE_COLOR_ATTACHMENT_BIT | TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | TEXTURE_USAGE_RESOLVE_ATTACHMENT_BIT)) {
|
if (texture->usage_flags & (TEXTURE_USAGE_COLOR_ATTACHMENT_BIT | TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | TEXTURE_USAGE_RESOLVE_ATTACHMENT_BIT)) {
|
||||||
attachable_textures.push_back(texture->owner.is_valid() ? texture->owner : uniform.ids[j]);
|
UniformSet::AttachableTexture attachable_texture;
|
||||||
|
attachable_texture.bind = set_uniform.binding;
|
||||||
|
attachable_texture.texture = texture->owner.is_valid() ? texture->owner : uniform.ids[j];
|
||||||
|
attachable_textures.push_back(attachable_texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (texture->usage_flags & TEXTURE_USAGE_STORAGE_BIT) {
|
if (texture->usage_flags & TEXTURE_USAGE_STORAGE_BIT) {
|
||||||
|
@ -6168,13 +6174,13 @@ void RenderingDeviceVulkan::draw_list_bind_uniform_set(DrawListID p_list, RID p_
|
||||||
#ifdef DEBUG_ENABLED
|
#ifdef DEBUG_ENABLED
|
||||||
{ //validate that textures bound are not attached as framebuffer bindings
|
{ //validate that textures bound are not attached as framebuffer bindings
|
||||||
uint32_t attachable_count = uniform_set->attachable_textures.size();
|
uint32_t attachable_count = uniform_set->attachable_textures.size();
|
||||||
const RID *attachable_ptr = uniform_set->attachable_textures.ptr();
|
const UniformSet::AttachableTexture *attachable_ptr = uniform_set->attachable_textures.ptr();
|
||||||
uint32_t bound_count = draw_list_bound_textures.size();
|
uint32_t bound_count = draw_list_bound_textures.size();
|
||||||
const RID *bound_ptr = draw_list_bound_textures.ptr();
|
const RID *bound_ptr = draw_list_bound_textures.ptr();
|
||||||
for (uint32_t i = 0; i < attachable_count; i++) {
|
for (uint32_t i = 0; i < attachable_count; i++) {
|
||||||
for (uint32_t j = 0; j < bound_count; j++) {
|
for (uint32_t j = 0; j < bound_count; j++) {
|
||||||
ERR_FAIL_COND_MSG(attachable_ptr[i] == bound_ptr[j],
|
ERR_FAIL_COND_MSG(attachable_ptr[i].texture == bound_ptr[j],
|
||||||
"Attempted to use the same texture in framebuffer attachment and a uniform set, this is not allowed.");
|
"Attempted to use the same texture in framebuffer attachment and a uniform (set: " + itos(p_index) + ", binding: " + itos(attachable_ptr[i].bind) + "), this is not allowed.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#define RENDERING_DEVICE_VULKAN_H
|
#define RENDERING_DEVICE_VULKAN_H
|
||||||
|
|
||||||
#include "core/os/thread_safe.h"
|
#include "core/os/thread_safe.h"
|
||||||
|
#include "core/templates/local_vector.h"
|
||||||
#include "core/templates/oa_hash_map.h"
|
#include "core/templates/oa_hash_map.h"
|
||||||
#include "core/templates/rid_owner.h"
|
#include "core/templates/rid_owner.h"
|
||||||
#include "servers/rendering/rendering_device.h"
|
#include "servers/rendering/rendering_device.h"
|
||||||
|
@ -45,11 +46,6 @@
|
||||||
|
|
||||||
#include <vulkan/vulkan.h>
|
#include <vulkan/vulkan.h>
|
||||||
|
|
||||||
//todo:
|
|
||||||
//compute
|
|
||||||
//push constants
|
|
||||||
//views of texture slices
|
|
||||||
|
|
||||||
class VulkanContext;
|
class VulkanContext;
|
||||||
|
|
||||||
class RenderingDeviceVulkan : public RenderingDevice {
|
class RenderingDeviceVulkan : public RenderingDevice {
|
||||||
|
@ -638,7 +634,12 @@ class RenderingDeviceVulkan : public RenderingDevice {
|
||||||
DescriptorPoolKey pool_key;
|
DescriptorPoolKey pool_key;
|
||||||
VkDescriptorSet descriptor_set = VK_NULL_HANDLE;
|
VkDescriptorSet descriptor_set = VK_NULL_HANDLE;
|
||||||
//VkPipelineLayout pipeline_layout; //not owned, inherited from shader
|
//VkPipelineLayout pipeline_layout; //not owned, inherited from shader
|
||||||
Vector<RID> attachable_textures; //used for validation
|
struct AttachableTexture {
|
||||||
|
uint32_t bind;
|
||||||
|
RID texture;
|
||||||
|
};
|
||||||
|
|
||||||
|
LocalVector<AttachableTexture> attachable_textures; //used for validation
|
||||||
Vector<Texture *> mutable_sampled_textures; //used for layout change
|
Vector<Texture *> mutable_sampled_textures; //used for layout change
|
||||||
Vector<Texture *> mutable_storage_textures; //used for layout change
|
Vector<Texture *> mutable_storage_textures; //used for layout change
|
||||||
};
|
};
|
||||||
|
|
|
@ -2534,7 +2534,7 @@ RID RendererSceneRenderForward::_setup_render_pass_uniform_set(RID p_render_buff
|
||||||
RD::Uniform u;
|
RD::Uniform u;
|
||||||
u.binding = 4;
|
u.binding = 4;
|
||||||
u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
|
u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
|
||||||
RID texture = rb && rb->depth.is_valid() ? rb->depth : storage->texture_rd_get_default(RendererStorageRD::DEFAULT_RD_TEXTURE_WHITE);
|
RID texture = (false && rb && rb->depth.is_valid()) ? rb->depth : storage->texture_rd_get_default(RendererStorageRD::DEFAULT_RD_TEXTURE_WHITE);
|
||||||
u.ids.push_back(texture);
|
u.ids.push_back(texture);
|
||||||
uniforms.push_back(u);
|
uniforms.push_back(u);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue