Skip to content

Commit f961542

Browse files
committed
Use fence
1 parent c84b23a commit f961542

File tree

6 files changed

+31
-21
lines changed

6 files changed

+31
-21
lines changed

pathfinder/core/d3d11/renderer.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ void RendererD3D11::set_dest_texture(const std::shared_ptr<Texture> &new_texture
315315
void RendererD3D11::upload_scene(SegmentsD3D11 &draw_segments, SegmentsD3D11 &clip_segments) {
316316
auto encoder = device->create_command_encoder("upload scene");
317317
scene_buffers.upload(draw_segments, clip_segments, allocator, device, encoder);
318-
queue->submit_and_wait(encoder);
318+
queue->submit(encoder, fence);
319319
}
320320

321321
void RendererD3D11::prepare_and_draw_tiles(DrawTileBatchD3D11 &batch) {
@@ -425,7 +425,7 @@ void RendererD3D11::draw_tiles(uint64_t tiles_d3d11_buffer_id,
425425

426426
encoder->end_compute_pass();
427427

428-
queue->submit_and_wait(encoder);
428+
queue->submit(encoder, fence);
429429
}
430430

431431
Vec2I RendererD3D11::tile_size() const {
@@ -475,7 +475,7 @@ PropagateMetadataBufferIDsD3D11 RendererD3D11::upload_propagate_metadata(
475475
0,
476476
propagate_metadata.size() * sizeof(PropagateMetadataD3D11),
477477
propagate_metadata.data());
478-
queue->submit_and_wait(encoder);
478+
queue->submit(encoder, fence);
479479

480480
return {propagate_metadata_storage_id, backdrops_storage_id};
481481
}
@@ -485,7 +485,7 @@ void RendererD3D11::upload_initial_backdrops(uint64_t backdrops_buffer_id, std::
485485

486486
auto encoder = device->create_command_encoder("upload initial backdrops");
487487
encoder->write_buffer(backdrops_buffer, 0, backdrops.size() * sizeof(BackdropInfoD3D11), backdrops.data());
488-
queue->submit_and_wait(encoder);
488+
queue->submit(encoder, fence);
489489
}
490490

491491
void RendererD3D11::prepare_tiles(TileBatchDataD3D11 &batch) {
@@ -684,7 +684,7 @@ std::shared_ptr<MicrolinesBufferIDsD3D11> RendererD3D11::dice_segments(std::vect
684684

685685
encoder->end_compute_pass();
686686

687-
queue->submit_and_wait(encoder);
687+
queue->submit(encoder, fence);
688688

689689
// Read indirect draw params back to CPU memory.
690690
indirect_draw_params_buffer->download_via_mapping(FILL_INDIRECT_DRAW_PARAMS_SIZE * sizeof(uint32_t),
@@ -751,7 +751,7 @@ void RendererD3D11::bound(uint64_t tiles_d3d11_buffer_id,
751751

752752
encoder->end_compute_pass();
753753

754-
queue->submit_and_wait(encoder);
754+
queue->submit(encoder, fence);
755755

756756
allocator->free_buffer(path_info_buffer_id);
757757
}
@@ -811,7 +811,7 @@ std::shared_ptr<FillBufferInfoD3D11> RendererD3D11::bin_segments(
811811

812812
encoder->end_compute_pass();
813813

814-
queue->submit_and_wait(encoder);
814+
queue->submit(encoder, fence);
815815

816816
// Read buffer.
817817
z_buffer->download_via_mapping(FILL_INDIRECT_DRAW_PARAMS_SIZE * sizeof(uint32_t), 0, indirect_draw_params);
@@ -919,7 +919,7 @@ PropagateTilesInfoD3D11 RendererD3D11::propagate_tiles(uint32_t column_count,
919919

920920
uint32_t fill_indirect_draw_params[FILL_INDIRECT_DRAW_PARAMS_SIZE];
921921

922-
queue->submit_and_wait(encoder);
922+
queue->submit(encoder, fence);
923923

924924
// Read buffer.
925925
z_buffer->download_via_mapping(FILL_INDIRECT_DRAW_PARAMS_SIZE * sizeof(uint32_t), 0, fill_indirect_draw_params);
@@ -980,7 +980,7 @@ void RendererD3D11::draw_fills(FillBufferInfoD3D11 &fill_storage_info,
980980

981981
encoder->end_compute_pass();
982982

983-
queue->submit_and_wait(encoder);
983+
queue->submit(encoder, fence);
984984
}
985985

986986
void RendererD3D11::sort_tiles(uint64_t tiles_d3d11_buffer_id,
@@ -1017,7 +1017,7 @@ void RendererD3D11::sort_tiles(uint64_t tiles_d3d11_buffer_id,
10171017

10181018
encoder->end_compute_pass();
10191019

1020-
queue->submit_and_wait(encoder);
1020+
queue->submit(encoder, fence);
10211021
}
10221022

10231023
void RendererD3D11::free_tile_batch_buffers() {

pathfinder/core/d3d9/renderer.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ RendererD3D9::RendererD3D9(const std::shared_ptr<Device> &_device, const std::sh
6868
quad_vertex_data_size,
6969
QUAD_VERTEX_POSITIONS);
7070

71-
queue->submit_and_wait(encoder);
71+
queue->submit(encoder, fence);
7272
}
7373

7474
void RendererD3D9::set_dest_texture(const std::shared_ptr<Texture> &texture) {
@@ -363,7 +363,7 @@ void RendererD3D9::draw(const std::shared_ptr<SceneBuilder> &_scene_builder, boo
363363
// We can do fill drawing as soon as the fill vertex buffer is ready.
364364
draw_fills(fill_vertex_buffer_id, scene_builder->pending_fills.size(), encoder);
365365

366-
queue->submit_and_wait(encoder);
366+
queue->submit(encoder, fence);
367367

368368
allocator->free_buffer(fill_vertex_buffer_id);
369369
}
@@ -442,7 +442,7 @@ void RendererD3D9::upload_and_draw_tiles(const std::vector<DrawTileBatchD3D9> &t
442442
z_buffer_texture_id,
443443
encoder);
444444

445-
queue->submit_and_wait(encoder);
445+
queue->submit(encoder, fence);
446446

447447
allocator->free_texture(z_buffer_texture_id);
448448
allocator->free_buffer(tile_vertex_buffer_id);

pathfinder/core/renderer.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,13 @@ Renderer::Renderer(const std::shared_ptr<Device> &_device, const std::shared_ptr
2727
TextureFormat::Rgba16Float,
2828
"metadata texture");
2929

30+
fence = device->create_fence("renderer fence");
31+
3032
auto encoder = device->create_command_encoder("upload common renderer data");
3133

3234
encoder->write_texture(allocator->get_texture(area_lut_texture_id), {}, image_buffer->get_data());
3335

34-
queue->submit_and_wait(encoder);
36+
queue->submit(encoder, fence);
3537
}
3638

3739
Renderer::~Renderer() {
@@ -102,7 +104,7 @@ void Renderer::upload_texel_data(std::vector<ColorU> &texels, TextureLocation lo
102104

103105
auto encoder = device->create_command_encoder("upload data of the pattern texture pages");
104106
encoder->write_texture(texture, location.rect, texels.data());
105-
queue->submit_and_wait(encoder);
107+
queue->submit(encoder, fence);
106108

107109
texture_page->must_preserve_contents_ = true;
108110
}
@@ -249,7 +251,7 @@ void Renderer::upload_texture_metadata(const std::vector<TextureMetadataEntry> &
249251
auto encoder = device->create_command_encoder("upload to metadata texture");
250252
encoder->add_callback(callback);
251253
encoder->write_texture(allocator->get_texture(metadata_texture_id), region_rect, raw_texels);
252-
queue->submit_and_wait(encoder);
254+
queue->submit(encoder, fence);
253255
}
254256

255257
} // namespace Pathfinder

pathfinder/core/renderer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ class Renderer {
9090

9191
std::shared_ptr<Queue> queue;
9292

93+
std::shared_ptr<Fence> fence;
94+
9395
protected:
9496
virtual TextureFormat mask_texture_format() const = 0;
9597

pathfinder/gpu/gl/queue.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@ class QueueGl : public Queue {
2222

2323
encoder->finish();
2424

25-
auto fence_gl = (FenceGl *)fence.get();
26-
fence_gl->wait();
25+
if (fence) {
26+
auto fence_gl = (FenceGl *)fence.get();
27+
fence_gl->wait();
28+
}
2729
}
2830

2931
void submit_and_wait(const std::shared_ptr<CommandEncoder> &encoder) override {

pathfinder/gpu/vk/queue.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,15 @@ void QueueVk::submit(const std::shared_ptr<CommandEncoder> &encoder, const std::
2525
submit_info.commandBufferCount = 1;
2626
submit_info.pCommandBuffers = &encoder_vk->vk_command_buffer_;
2727

28-
auto fence_vk = (FenceVk *)fence.get();
28+
if (fence) {
29+
auto fence_vk = (FenceVk *)fence.get();
2930

30-
vkQueueSubmit(vk_graphics_queue_, 1, &submit_info, fence_vk->fence);
31+
vkQueueSubmit(vk_graphics_queue_, 1, &submit_info, fence_vk->fence);
3132

32-
fence_vk->wait();
33+
fence_vk->wait();
34+
} else {
35+
vkQueueSubmit(vk_graphics_queue_, 1, &submit_info, VK_NULL_HANDLE);
36+
}
3337
}
3438

3539
void QueueVk::submit_and_wait(const std::shared_ptr<CommandEncoder> &encoder) {

0 commit comments

Comments
 (0)