You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-05 12:10:55 +00:00
Fix invalid buffer updates in SDFGI
This commit is contained in:
@@ -3488,6 +3488,10 @@ RID RenderingDeviceVulkan::vertex_buffer_create(uint32_t p_size_bytes, const Vec
|
||||
_THREAD_SAFE_METHOD_
|
||||
|
||||
ERR_FAIL_COND_V(p_data.size() && (uint32_t)p_data.size() != p_size_bytes, RID());
|
||||
ERR_FAIL_COND_V_MSG(draw_list != nullptr && p_data.size(), RID(),
|
||||
"Creating buffers with data is forbidden during creation of a draw list");
|
||||
ERR_FAIL_COND_V_MSG(compute_list != nullptr && p_data.size(), RID(),
|
||||
"Creating buffers with data is forbidden during creation of a draw list");
|
||||
|
||||
Buffer buffer;
|
||||
_buffer_allocate(&buffer, p_size_bytes, VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, VMA_MEMORY_USAGE_GPU_ONLY);
|
||||
@@ -3611,6 +3615,10 @@ RID RenderingDeviceVulkan::vertex_array_create(uint32_t p_vertex_count, VertexFo
|
||||
|
||||
RID RenderingDeviceVulkan::index_buffer_create(uint32_t p_index_count, IndexBufferFormat p_format, const Vector<uint8_t> &p_data, bool p_use_restart_indices) {
|
||||
_THREAD_SAFE_METHOD_
|
||||
ERR_FAIL_COND_V_MSG(draw_list != nullptr && p_data.size(), RID(),
|
||||
"Creating buffers with data is forbidden during creation of a draw list");
|
||||
ERR_FAIL_COND_V_MSG(compute_list != nullptr && p_data.size(), RID(),
|
||||
"Creating buffers with data is forbidden during creation of a draw list");
|
||||
|
||||
ERR_FAIL_COND_V(p_index_count == 0, RID());
|
||||
|
||||
@@ -4357,6 +4365,10 @@ RID RenderingDeviceVulkan::uniform_buffer_create(uint32_t p_size_bytes, const Ve
|
||||
_THREAD_SAFE_METHOD_
|
||||
|
||||
ERR_FAIL_COND_V(p_data.size() && (uint32_t)p_data.size() != p_size_bytes, RID());
|
||||
ERR_FAIL_COND_V_MSG(draw_list != nullptr && p_data.size(), RID(),
|
||||
"Creating buffers with data is forbidden during creation of a draw list");
|
||||
ERR_FAIL_COND_V_MSG(compute_list != nullptr && p_data.size(), RID(),
|
||||
"Creating buffers with data is forbidden during creation of a draw list");
|
||||
|
||||
Buffer buffer;
|
||||
Error err = _buffer_allocate(&buffer, p_size_bytes, VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VMA_MEMORY_USAGE_GPU_ONLY);
|
||||
@@ -4372,6 +4384,10 @@ RID RenderingDeviceVulkan::uniform_buffer_create(uint32_t p_size_bytes, const Ve
|
||||
|
||||
RID RenderingDeviceVulkan::storage_buffer_create(uint32_t p_size_bytes, const Vector<uint8_t> &p_data, uint32_t p_usage) {
|
||||
_THREAD_SAFE_METHOD_
|
||||
ERR_FAIL_COND_V_MSG(draw_list != nullptr && p_data.size(), RID(),
|
||||
"Creating buffers with data is forbidden during creation of a draw list");
|
||||
ERR_FAIL_COND_V_MSG(compute_list != nullptr && p_data.size(), RID(),
|
||||
"Creating buffers with data is forbidden during creation of a draw list");
|
||||
|
||||
ERR_FAIL_COND_V(p_data.size() && (uint32_t)p_data.size() != p_size_bytes, RID());
|
||||
|
||||
@@ -4395,6 +4411,10 @@ RID RenderingDeviceVulkan::storage_buffer_create(uint32_t p_size_bytes, const Ve
|
||||
|
||||
RID RenderingDeviceVulkan::texture_buffer_create(uint32_t p_size_elements, DataFormat p_format, const Vector<uint8_t> &p_data) {
|
||||
_THREAD_SAFE_METHOD_
|
||||
ERR_FAIL_COND_V_MSG(draw_list != nullptr && p_data.size(), RID(),
|
||||
"Creating buffers with data is forbidden during creation of a draw list");
|
||||
ERR_FAIL_COND_V_MSG(compute_list != nullptr && p_data.size(), RID(),
|
||||
"Creating buffers with data is forbidden during creation of a draw list");
|
||||
|
||||
uint32_t element_size = get_format_vertex_size(p_format);
|
||||
ERR_FAIL_COND_V_MSG(element_size == 0, RID(), "Format requested is not supported for texture buffers");
|
||||
@@ -4984,6 +5004,8 @@ Error RenderingDeviceVulkan::buffer_update(RID p_buffer, uint32_t p_offset, uint
|
||||
|
||||
ERR_FAIL_COND_V_MSG(draw_list && p_sync_with_draw, ERR_INVALID_PARAMETER,
|
||||
"Updating buffers in 'sync to draw' mode is forbidden during creation of a draw list");
|
||||
ERR_FAIL_COND_V_MSG(compute_list && p_sync_with_draw, ERR_INVALID_PARAMETER,
|
||||
"Updating buffers in 'sync to draw' mode is forbidden during creation of a compute list");
|
||||
|
||||
// Protect subsequent updates...
|
||||
VkPipelineStageFlags dst_stage_mask = VK_PIPELINE_STAGE_TRANSFER_BIT;
|
||||
|
||||
Reference in New Issue
Block a user