Skip to content

Commit

Permalink
Implement asynchronous transfer queue for resources created with init…
Browse files Browse the repository at this point in the history
…ial data on RenderingDevice.
  • Loading branch information
DarioSamo committed Mar 15, 2024
1 parent 89f70e9 commit b741d3f
Show file tree
Hide file tree
Showing 9 changed files with 1,027 additions and 451 deletions.
195 changes: 89 additions & 106 deletions drivers/d3d12/rendering_device_driver_d3d12.cpp

Large diffs are not rendered by default.

22 changes: 8 additions & 14 deletions drivers/d3d12/rendering_device_driver_d3d12.h
Original file line number Diff line number Diff line change
Expand Up @@ -250,20 +250,11 @@ class RenderingDeviceDriverD3D12 : public RenderingDeviceDriver {
uint8_t groups_count = 0;
static const D3D12_RESOURCE_STATES DELETED_GROUP = D3D12_RESOURCE_STATES(0xFFFFFFFFU);
};
PagedAllocator<HashMapElement<ResourceInfo::States *, BarrierRequest>> res_barriers_requests_allocator;
HashMap<ResourceInfo::States *, BarrierRequest, HashMapHasherDefault, HashMapComparatorDefault<ResourceInfo::States *>, decltype(res_barriers_requests_allocator)> res_barriers_requests;

LocalVector<D3D12_RESOURCE_BARRIER> res_barriers;
uint32_t res_barriers_count = 0;
uint32_t res_barriers_batch = 0;
#ifdef DEV_ENABLED
int frame_barriers_count = 0;
int frame_barriers_batches_count = 0;
uint64_t frame_barriers_cpu_time = 0;
#endif
struct CommandBufferInfo;

void _resource_transition_batch(ResourceInfo *p_resource, uint32_t p_subresource, uint32_t p_num_planes, D3D12_RESOURCE_STATES p_new_state);
void _resource_transitions_flush(ID3D12GraphicsCommandList *p_cmd_list);
void _resource_transition_batch(CommandBufferInfo *p_command_buffer, ResourceInfo *p_resource, uint32_t p_subresource, uint32_t p_num_planes, D3D12_RESOURCE_STATES p_new_state);
void _resource_transitions_flush(CommandBufferInfo *p_command_buffer);

/*****************/
/**** BUFFERS ****/
Expand Down Expand Up @@ -317,7 +308,6 @@ class RenderingDeviceDriverD3D12 : public RenderingDeviceDriver {
UINT _compute_plane_slice(DataFormat p_format, BitField<TextureAspectBits> p_aspect_bits);
UINT _compute_plane_slice(DataFormat p_format, TextureAspect p_aspect);

struct CommandBufferInfo;
void _discard_texture_subresources(const TextureInfo *p_tex_info, const CommandBufferInfo *p_cmd_buf_info);

public:
Expand Down Expand Up @@ -474,6 +464,10 @@ class RenderingDeviceDriverD3D12 : public RenderingDeviceDriver {
};
LocalVector<FamilyFallbackCopy> family_fallback_copies;
uint32_t family_fallback_copy_count = 0;
HashMap<ResourceInfo::States *, BarrierRequest> res_barriers_requests;
LocalVector<D3D12_RESOURCE_BARRIER> res_barriers;
uint32_t res_barriers_count = 0;
uint32_t res_barriers_batch = 0;
};

public:
Expand Down Expand Up @@ -1012,7 +1006,7 @@ class RenderingDeviceDriverD3D12 : public RenderingDeviceDriver {
UniformSetInfo,
RenderPassInfo,
TimestampQueryPoolInfo>;
PagedAllocator<VersatileResource> resources_allocator;
PagedAllocator<VersatileResource, true> resources_allocator;

/******************/

Expand Down
2 changes: 1 addition & 1 deletion drivers/vulkan/rendering_device_driver_vulkan.h
Original file line number Diff line number Diff line change
Expand Up @@ -637,7 +637,7 @@ class RenderingDeviceDriverVulkan : public RenderingDeviceDriver {
VertexFormatInfo,
ShaderInfo,
UniformSetInfo>;
PagedAllocator<VersatileResource> resources_allocator;
PagedAllocator<VersatileResource, true> resources_allocator;

/******************/

Expand Down
10 changes: 4 additions & 6 deletions servers/rendering/renderer_rd/storage_rd/texture_storage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -185,9 +185,8 @@ TextureStorage::TextureStorage() {
ptr[i] = Math::make_half_float(1.0f);
}

Vector<Vector<uint8_t>> vpv;
vpv.push_back(sv);
default_rd_textures[DEFAULT_RD_TEXTURE_DEPTH] = RD::get_singleton()->texture_create(tf, RD::TextureView(), vpv);
default_rd_textures[DEFAULT_RD_TEXTURE_DEPTH] = RD::get_singleton()->texture_create(tf, RD::TextureView());
RD::get_singleton()->texture_update(default_rd_textures[DEFAULT_RD_TEXTURE_DEPTH], 0, sv);
}

for (int i = 0; i < 16; i++) {
Expand Down Expand Up @@ -460,9 +459,8 @@ TextureStorage::TextureStorage() {
}

{
Vector<Vector<uint8_t>> vsv;
vsv.push_back(sv);
default_rd_textures[DEFAULT_RD_TEXTURE_2D_ARRAY_DEPTH] = RD::get_singleton()->texture_create(tformat, RD::TextureView(), vsv);
default_rd_textures[DEFAULT_RD_TEXTURE_2D_ARRAY_DEPTH] = RD::get_singleton()->texture_create(tformat, RD::TextureView());
RD::get_singleton()->texture_update(default_rd_textures[DEFAULT_RD_TEXTURE_2D_ARRAY_DEPTH], 0, sv);
}
}

Expand Down
Loading

0 comments on commit b741d3f

Please sign in to comment.