|
@@ -233,9 +233,9 @@ RenderingDevice::Buffer *RenderingDevice::_get_buffer_from_owner(RID p_buffer) {
|
|
|
return buffer;
|
|
|
}
|
|
|
|
|
|
-Error RenderingDevice::_buffer_initialize(Buffer *p_buffer, const uint8_t *p_data, size_t p_data_size, uint32_t p_required_align) {
|
|
|
+Error RenderingDevice::_buffer_initialize(Buffer *p_buffer, Span<uint8_t> p_data, uint32_t p_required_align) {
|
|
|
uint32_t transfer_worker_offset;
|
|
|
- TransferWorker *transfer_worker = _acquire_transfer_worker(p_data_size, p_required_align, transfer_worker_offset);
|
|
|
+ TransferWorker *transfer_worker = _acquire_transfer_worker(p_data.size(), p_required_align, transfer_worker_offset);
|
|
|
p_buffer->transfer_worker_index = transfer_worker->index;
|
|
|
|
|
|
{
|
|
@@ -247,14 +247,14 @@ Error RenderingDevice::_buffer_initialize(Buffer *p_buffer, const uint8_t *p_dat
|
|
|
uint8_t *data_ptr = driver->buffer_map(transfer_worker->staging_buffer);
|
|
|
ERR_FAIL_NULL_V(data_ptr, ERR_CANT_CREATE);
|
|
|
|
|
|
- memcpy(data_ptr + transfer_worker_offset, p_data, p_data_size);
|
|
|
+ memcpy(data_ptr + transfer_worker_offset, p_data.ptr(), p_data.size());
|
|
|
driver->buffer_unmap(transfer_worker->staging_buffer);
|
|
|
|
|
|
// Copy from the staging buffer to the real buffer.
|
|
|
RDD::BufferCopyRegion region;
|
|
|
region.src_offset = transfer_worker_offset;
|
|
|
region.dst_offset = 0;
|
|
|
- region.size = p_data_size;
|
|
|
+ region.size = p_data.size();
|
|
|
driver->command_copy_buffer(transfer_worker->command_buffer, transfer_worker->staging_buffer, p_buffer->driver_id, region);
|
|
|
|
|
|
_release_transfer_worker(transfer_worker);
|
|
@@ -782,7 +782,7 @@ uint64_t RenderingDevice::buffer_get_device_address(RID p_buffer) {
|
|
|
return driver->buffer_get_device_address(buffer->driver_id);
|
|
|
}
|
|
|
|
|
|
-RID RenderingDevice::storage_buffer_create(uint32_t p_size_bytes, const Vector<uint8_t> &p_data, BitField<StorageBufferUsage> p_usage, BitField<BufferCreationBits> p_creation_bits) {
|
|
|
+RID RenderingDevice::storage_buffer_create(uint32_t p_size_bytes, Span<uint8_t> p_data, BitField<StorageBufferUsage> p_usage, BitField<BufferCreationBits> p_creation_bits) {
|
|
|
ERR_FAIL_COND_V(p_data.size() && (uint32_t)p_data.size() != p_size_bytes, RID());
|
|
|
|
|
|
Buffer buffer;
|
|
@@ -807,7 +807,7 @@ RID RenderingDevice::storage_buffer_create(uint32_t p_size_bytes, const Vector<u
|
|
|
buffer.draw_tracker->buffer_driver_id = buffer.driver_id;
|
|
|
|
|
|
if (p_data.size()) {
|
|
|
- _buffer_initialize(&buffer, p_data.ptr(), p_data.size());
|
|
|
+ _buffer_initialize(&buffer, p_data);
|
|
|
}
|
|
|
|
|
|
_THREAD_SAFE_LOCK_
|
|
@@ -821,7 +821,7 @@ RID RenderingDevice::storage_buffer_create(uint32_t p_size_bytes, const Vector<u
|
|
|
return id;
|
|
|
}
|
|
|
|
|
|
-RID RenderingDevice::texture_buffer_create(uint32_t p_size_elements, DataFormat p_format, const Vector<uint8_t> &p_data) {
|
|
|
+RID RenderingDevice::texture_buffer_create(uint32_t p_size_elements, DataFormat p_format, Span<uint8_t> p_data) {
|
|
|
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");
|
|
|
uint64_t size_bytes = uint64_t(element_size) * p_size_elements;
|
|
@@ -847,7 +847,7 @@ RID RenderingDevice::texture_buffer_create(uint32_t p_size_elements, DataFormat
|
|
|
}
|
|
|
|
|
|
if (p_data.size()) {
|
|
|
- _buffer_initialize(&texture_buffer, p_data.ptr(), p_data.size());
|
|
|
+ _buffer_initialize(&texture_buffer, p_data);
|
|
|
}
|
|
|
|
|
|
_THREAD_SAFE_LOCK_
|
|
@@ -3084,7 +3084,7 @@ bool RenderingDevice::sampler_is_format_supported_for_filter(DataFormat p_format
|
|
|
/**** VERTEX BUFFER ****/
|
|
|
/***********************/
|
|
|
|
|
|
-RID RenderingDevice::vertex_buffer_create(uint32_t p_size_bytes, const Vector<uint8_t> &p_data, BitField<BufferCreationBits> p_creation_bits) {
|
|
|
+RID RenderingDevice::vertex_buffer_create(uint32_t p_size_bytes, Span<uint8_t> p_data, BitField<BufferCreationBits> p_creation_bits) {
|
|
|
ERR_FAIL_COND_V(p_data.size() && (uint32_t)p_data.size() != p_size_bytes, RID());
|
|
|
|
|
|
Buffer buffer;
|
|
@@ -3106,7 +3106,7 @@ RID RenderingDevice::vertex_buffer_create(uint32_t p_size_bytes, const Vector<ui
|
|
|
}
|
|
|
|
|
|
if (p_data.size()) {
|
|
|
- _buffer_initialize(&buffer, p_data.ptr(), p_data.size());
|
|
|
+ _buffer_initialize(&buffer, p_data);
|
|
|
}
|
|
|
|
|
|
_THREAD_SAFE_LOCK_
|
|
@@ -3226,7 +3226,7 @@ RID RenderingDevice::vertex_array_create(uint32_t p_vertex_count, VertexFormatID
|
|
|
return id;
|
|
|
}
|
|
|
|
|
|
-RID RenderingDevice::index_buffer_create(uint32_t p_index_count, IndexBufferFormat p_format, const Vector<uint8_t> &p_data, bool p_use_restart_indices, BitField<BufferCreationBits> p_creation_bits) {
|
|
|
+RID RenderingDevice::index_buffer_create(uint32_t p_index_count, IndexBufferFormat p_format, Span<uint8_t> p_data, bool p_use_restart_indices, BitField<BufferCreationBits> p_creation_bits) {
|
|
|
ERR_FAIL_COND_V(p_index_count == 0, RID());
|
|
|
|
|
|
IndexBuffer index_buffer;
|
|
@@ -3278,7 +3278,7 @@ RID RenderingDevice::index_buffer_create(uint32_t p_index_count, IndexBufferForm
|
|
|
}
|
|
|
|
|
|
if (p_data.size()) {
|
|
|
- _buffer_initialize(&index_buffer, p_data.ptr(), p_data.size());
|
|
|
+ _buffer_initialize(&index_buffer, p_data);
|
|
|
}
|
|
|
|
|
|
_THREAD_SAFE_LOCK_
|
|
@@ -3492,7 +3492,7 @@ uint64_t RenderingDevice::shader_get_vertex_input_attribute_mask(RID p_shader) {
|
|
|
/**** UNIFORMS ****/
|
|
|
/******************/
|
|
|
|
|
|
-RID RenderingDevice::uniform_buffer_create(uint32_t p_size_bytes, const Vector<uint8_t> &p_data, BitField<BufferCreationBits> p_creation_bits) {
|
|
|
+RID RenderingDevice::uniform_buffer_create(uint32_t p_size_bytes, Span<uint8_t> p_data, BitField<BufferCreationBits> p_creation_bits) {
|
|
|
ERR_FAIL_COND_V(p_data.size() && (uint32_t)p_data.size() != p_size_bytes, RID());
|
|
|
|
|
|
Buffer buffer;
|
|
@@ -3511,7 +3511,7 @@ RID RenderingDevice::uniform_buffer_create(uint32_t p_size_bytes, const Vector<u
|
|
|
}
|
|
|
|
|
|
if (p_data.size()) {
|
|
|
- _buffer_initialize(&buffer, p_data.ptr(), p_data.size());
|
|
|
+ _buffer_initialize(&buffer, p_data);
|
|
|
}
|
|
|
|
|
|
_THREAD_SAFE_LOCK_
|
|
@@ -7356,11 +7356,11 @@ void RenderingDevice::_bind_methods() {
|
|
|
ClassDB::bind_method(D_METHOD("sampler_create", "state"), &RenderingDevice::_sampler_create);
|
|
|
ClassDB::bind_method(D_METHOD("sampler_is_format_supported_for_filter", "format", "sampler_filter"), &RenderingDevice::sampler_is_format_supported_for_filter);
|
|
|
|
|
|
- ClassDB::bind_method(D_METHOD("vertex_buffer_create", "size_bytes", "data", "creation_bits"), &RenderingDevice::vertex_buffer_create, DEFVAL(Vector<uint8_t>()), DEFVAL(0));
|
|
|
+ ClassDB::bind_method(D_METHOD("vertex_buffer_create", "size_bytes", "data", "creation_bits"), &RenderingDevice::_vertex_buffer_create, DEFVAL(Vector<uint8_t>()), DEFVAL(0));
|
|
|
ClassDB::bind_method(D_METHOD("vertex_format_create", "vertex_descriptions"), &RenderingDevice::_vertex_format_create);
|
|
|
ClassDB::bind_method(D_METHOD("vertex_array_create", "vertex_count", "vertex_format", "src_buffers", "offsets"), &RenderingDevice::_vertex_array_create, DEFVAL(Vector<int64_t>()));
|
|
|
|
|
|
- ClassDB::bind_method(D_METHOD("index_buffer_create", "size_indices", "format", "data", "use_restart_indices", "creation_bits"), &RenderingDevice::index_buffer_create, DEFVAL(Vector<uint8_t>()), DEFVAL(false), DEFVAL(0));
|
|
|
+ ClassDB::bind_method(D_METHOD("index_buffer_create", "size_indices", "format", "data", "use_restart_indices", "creation_bits"), &RenderingDevice::_index_buffer_create, DEFVAL(Vector<uint8_t>()), DEFVAL(false), DEFVAL(0));
|
|
|
ClassDB::bind_method(D_METHOD("index_array_create", "index_buffer", "index_offset", "index_count"), &RenderingDevice::index_array_create);
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("shader_compile_spirv_from_source", "shader_source", "allow_cache"), &RenderingDevice::_shader_compile_spirv_from_source, DEFVAL(true));
|
|
@@ -7371,9 +7371,9 @@ void RenderingDevice::_bind_methods() {
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("shader_get_vertex_input_attribute_mask", "shader"), &RenderingDevice::shader_get_vertex_input_attribute_mask);
|
|
|
|
|
|
- ClassDB::bind_method(D_METHOD("uniform_buffer_create", "size_bytes", "data", "creation_bits"), &RenderingDevice::uniform_buffer_create, DEFVAL(Vector<uint8_t>()), DEFVAL(0));
|
|
|
- ClassDB::bind_method(D_METHOD("storage_buffer_create", "size_bytes", "data", "usage", "creation_bits"), &RenderingDevice::storage_buffer_create, DEFVAL(Vector<uint8_t>()), DEFVAL(0), DEFVAL(0));
|
|
|
- ClassDB::bind_method(D_METHOD("texture_buffer_create", "size_bytes", "format", "data"), &RenderingDevice::texture_buffer_create, DEFVAL(Vector<uint8_t>()));
|
|
|
+ ClassDB::bind_method(D_METHOD("uniform_buffer_create", "size_bytes", "data", "creation_bits"), &RenderingDevice::_uniform_buffer_create, DEFVAL(Vector<uint8_t>()), DEFVAL(0));
|
|
|
+ ClassDB::bind_method(D_METHOD("storage_buffer_create", "size_bytes", "data", "usage", "creation_bits"), &RenderingDevice::_storage_buffer_create, DEFVAL(Vector<uint8_t>()), DEFVAL(0), DEFVAL(0));
|
|
|
+ ClassDB::bind_method(D_METHOD("texture_buffer_create", "size_bytes", "format", "data"), &RenderingDevice::_texture_buffer_create, DEFVAL(Vector<uint8_t>()));
|
|
|
|
|
|
ClassDB::bind_method(D_METHOD("uniform_set_create", "uniforms", "shader", "shader_set"), &RenderingDevice::_uniform_set_create);
|
|
|
ClassDB::bind_method(D_METHOD("uniform_set_is_valid", "uniform_set"), &RenderingDevice::uniform_set_is_valid);
|