File npv/nyanvk/consts.h changed (mode: 100644) (index 0f45d4c..2978a67) |
... |
... |
enum { |
63 |
63 |
vk_struct_type_cb_begin_info = 42, |
vk_struct_type_cb_begin_info = 42, |
64 |
64 |
vk_struct_type_rp_begin_info = 43, |
vk_struct_type_rp_begin_info = 43, |
65 |
65 |
vk_struct_type_img_mem_barrier = 45, |
vk_struct_type_img_mem_barrier = 45, |
|
66 |
|
vk_struct_type_mem_barrier = 46, |
66 |
67 |
/* extension number 2 or index 1, offset 0 */ |
/* extension number 2 or index 1, offset 0 */ |
67 |
68 |
vk_struct_type_swpchn_create_info = 1000000000 + 1000 + 0, |
vk_struct_type_swpchn_create_info = 1000000000 + 1000 + 0, |
68 |
69 |
/* extension number 2 or index 1, offset 1 */ |
/* extension number 2 or index 1, offset 1 */ |
|
... |
... |
enum { |
139 |
140 |
enum { |
enum { |
140 |
141 |
vk_mem_prop_dev_local_bit = 0x00000001, |
vk_mem_prop_dev_local_bit = 0x00000001, |
141 |
142 |
vk_mem_prop_host_visible_bit = 0x00000002, |
vk_mem_prop_host_visible_bit = 0x00000002, |
|
143 |
|
vk_mem_prop_host_coherent_bit = 0x00000004, |
142 |
144 |
vk_mem_prop_host_cached_bit = 0x00000008, |
vk_mem_prop_host_cached_bit = 0x00000008, |
143 |
145 |
vk_mem_prop_bits_enum_max = 0x7fffffff |
vk_mem_prop_bits_enum_max = 0x7fffffff |
144 |
146 |
}; |
}; |
|
... |
... |
enum { |
196 |
198 |
enum { |
enum { |
197 |
199 |
/* more */ |
/* more */ |
198 |
200 |
vk_pl_stage_top_of_pipe_bit = (1 << 0), |
vk_pl_stage_top_of_pipe_bit = (1 << 0), |
|
201 |
|
vk_pl_stage_transfer_bit = 0x00001000, |
199 |
202 |
vk_pl_stage_bottom_of_pipe_bit = (1 << 13), |
vk_pl_stage_bottom_of_pipe_bit = (1 << 13), |
200 |
203 |
vk_pl_stage_bits_enum_max = 0x7fffffff |
vk_pl_stage_bits_enum_max = 0x7fffffff |
201 |
204 |
}; |
}; |
|
... |
... |
enum { |
307 |
310 |
vk_filt_linear = 1, |
vk_filt_linear = 1, |
308 |
311 |
vk_filt_enum_max = 0x7fffffff |
vk_filt_enum_max = 0x7fffffff |
309 |
312 |
}; |
}; |
|
313 |
|
enum { |
|
314 |
|
vk_access_memory_read = 0x00008000, |
|
315 |
|
vk_access_memory_write = 0x00010000, |
|
316 |
|
vk_access_enum_max = 0x7fffffff |
|
317 |
|
}; |
310 |
318 |
#endif |
#endif |
File npv/video/local/code.frag.c changed (mode: 100644) (index d64bbce..3bd6b64) |
... |
... |
STATIC void img_mem_barrier_run_once(struct vk_img_mem_barrier_t *b) |
112 |
112 |
&begin_info); |
&begin_info); |
113 |
113 |
IF_FATALVVK("%d:unable to begin recording the layout transition command buffer for the vulkan image which will be used by ffmpeg color space converter\n", r, npv_vk_surf_p.dev.misc_cbs[npv_vk_color_space_layout_transition]); |
IF_FATALVVK("%d:unable to begin recording the layout transition command buffer for the vulkan image which will be used by ffmpeg color space converter\n", r, npv_vk_surf_p.dev.misc_cbs[npv_vk_color_space_layout_transition]); |
114 |
114 |
/*--------------------------------------------------------------------*/ |
/*--------------------------------------------------------------------*/ |
|
115 |
|
/* don't wait on any pipe stage, neither make wait any pipe stage */ |
115 |
116 |
vk_cmd_pl_barrier(npv_vk_surf_p.dev.misc_cbs[ |
vk_cmd_pl_barrier(npv_vk_surf_p.dev.misc_cbs[ |
116 |
|
npv_vk_color_space_layout_transition], b); |
|
|
117 |
|
npv_vk_color_space_layout_transition], |
|
118 |
|
vk_pl_stage_top_of_pipe_bit, vk_pl_stage_bottom_of_pipe_bit, |
|
119 |
|
0, 0, 1, b); |
117 |
120 |
/*--------------------------------------------------------------------*/ |
/*--------------------------------------------------------------------*/ |
118 |
121 |
vk_end_cb(npv_vk_surf_p.dev.misc_cbs[ |
vk_end_cb(npv_vk_surf_p.dev.misc_cbs[ |
119 |
122 |
npv_vk_color_space_layout_transition]); |
npv_vk_color_space_layout_transition]); |
|
... |
... |
STATIC void tmp_scaler_img_mem_rqmts_get(void) |
191 |
194 |
vk_get_img_mem_rqmts(&info, rqmts); |
vk_get_img_mem_rqmts(&info, rqmts); |
192 |
195 |
IF_FATALVVK("%d:device:%p:unable to get memory requirements for scaler image\n", r, npv_vk_surf_p.dev.vk); |
IF_FATALVVK("%d:device:%p:unable to get memory requirements for scaler image\n", r, npv_vk_surf_p.dev.vk); |
193 |
196 |
} |
} |
|
197 |
|
/* we want coherent memory to avoid to have to flush the memory range */ |
194 |
198 |
#define WANTED_MEM_PROPS (vk_mem_prop_host_visible_bit \ |
#define WANTED_MEM_PROPS (vk_mem_prop_host_visible_bit \ |
195 |
|
| vk_mem_prop_host_cached_bit) |
|
|
199 |
|
| vk_mem_prop_host_cached_bit | vk_mem_prop_host_coherent_bit) |
196 |
200 |
#define IS_DEV_LOCAL(x) (((x)->prop_flags & vk_mem_prop_dev_local_bit) != 0) |
#define IS_DEV_LOCAL(x) (((x)->prop_flags & vk_mem_prop_dev_local_bit) != 0) |
197 |
201 |
STATIC bool match_mem_type(u8 mem_type_idx, |
STATIC bool match_mem_type(u8 mem_type_idx, |
198 |
202 |
struct vk_mem_rqmts_t *img_rqmts, bool ignore_gpu_is_discret) |
struct vk_mem_rqmts_t *img_rqmts, bool ignore_gpu_is_discret) |
|
... |
... |
STATIC void blit_setup(u8 swpchn_img) |
478 |
482 |
{ |
{ |
479 |
483 |
s32 r; |
s32 r; |
480 |
484 |
struct vk_cb_begin_info_t begin_info; |
struct vk_cb_begin_info_t begin_info; |
481 |
|
struct vk_img_mem_barrier_t b; |
|
|
485 |
|
struct vk_img_mem_barrier_t img_b; |
|
486 |
|
struct vk_mem_barrier_t mb; |
482 |
487 |
struct vk_img_blit_t region; |
struct vk_img_blit_t region; |
483 |
488 |
struct vk_extent_2d_t *current; |
struct vk_extent_2d_t *current; |
484 |
489 |
union vk_clr_color_val_t clr_color_val; |
union vk_clr_color_val_t clr_color_val; |
|
... |
... |
STATIC void blit_setup(u8 swpchn_img) |
504 |
509 |
vk_begin_cb(npv_vk_surf_p.dev.cbs[swpchn_img], &begin_info); |
vk_begin_cb(npv_vk_surf_p.dev.cbs[swpchn_img], &begin_info); |
505 |
510 |
IF_FATALVVK("%d:swapchain img:%u:command buffer:%p:unable to begin recording\n", r, swpchn_img, npv_vk_surf_p.dev.cbs[swpchn_img]); |
IF_FATALVVK("%d:swapchain img:%u:command buffer:%p:unable to begin recording\n", r, swpchn_img, npv_vk_surf_p.dev.cbs[swpchn_img]); |
506 |
511 |
/*--------------------------------------------------------------------*/ |
/*--------------------------------------------------------------------*/ |
507 |
|
/* acquired img (undefined layout) to presentation layout */ |
|
508 |
|
memset(&b, 0, sizeof(b)); |
|
509 |
|
b.type = vk_struct_type_img_mem_barrier; |
|
510 |
|
b.old_layout = vk_img_layout_undefined; |
|
511 |
|
b.new_layout = vk_img_layout_present; |
|
512 |
|
b.src_q_fam = vk_q_fam_ignored; |
|
513 |
|
b.dst_q_fam = vk_q_fam_ignored; |
|
514 |
|
b.img = npv_vk_surf_p.dev.swpchn.imgs[swpchn_img]; |
|
515 |
|
b.subrsrc_range.aspect = vk_img_aspect_color_bit; |
|
516 |
|
b.subrsrc_range.lvls_n = 1; |
|
517 |
|
b.subrsrc_range.array_layers_n = 1; |
|
518 |
|
vk_cmd_pl_barrier(npv_vk_surf_p.dev.cbs[swpchn_img], &b); |
|
|
512 |
|
/* |
|
513 |
|
* Acquired img, from undefined layout (whatever layout discarded) to |
|
514 |
|
* to general layout. |
|
515 |
|
* Initially, acquired images are in undefined layout, it is only after |
|
516 |
|
* their first presentation they are returned with a presentation layout |
|
517 |
|
* and their content. |
|
518 |
|
*/ |
|
519 |
|
memset(&img_b, 0, sizeof(img_b)); |
|
520 |
|
img_b.type = vk_struct_type_img_mem_barrier; |
|
521 |
|
img_b.dst_access = vk_access_memory_write; /* the dst stage will want to clear then write */ |
|
522 |
|
img_b.old_layout = vk_img_layout_undefined; |
|
523 |
|
img_b.new_layout = vk_img_layout_general; |
|
524 |
|
img_b.src_q_fam = vk_q_fam_ignored; |
|
525 |
|
img_b.dst_q_fam = vk_q_fam_ignored; |
|
526 |
|
img_b.img = npv_vk_surf_p.dev.swpchn.imgs[swpchn_img]; |
|
527 |
|
img_b.subrsrc_range.aspect = vk_img_aspect_color_bit; |
|
528 |
|
img_b.subrsrc_range.lvls_n = 1; |
|
529 |
|
img_b.subrsrc_range.array_layers_n = 1; |
|
530 |
|
/* |
|
531 |
|
* don't wait on any stage, block on the transfer stage for the |
|
532 |
|
* following clear command |
|
533 |
|
*/ |
|
534 |
|
vk_cmd_pl_barrier(npv_vk_surf_p.dev.cbs[swpchn_img], |
|
535 |
|
vk_pl_stage_top_of_pipe_bit, vk_pl_stage_transfer_bit, |
|
536 |
|
0, 0, 1, &img_b); |
519 |
537 |
/*--------------------------------------------------------------------*/ |
/*--------------------------------------------------------------------*/ |
520 |
538 |
/* clear the viewport with integer black pixels since we work in sRGB */ |
/* clear the viewport with integer black pixels since we work in sRGB */ |
521 |
539 |
memset(&clr_color_val, 0, sizeof(clr_color_val)); |
memset(&clr_color_val, 0, sizeof(clr_color_val)); |
|
... |
... |
STATIC void blit_setup(u8 swpchn_img) |
525 |
543 |
range.array_layers_n = 1; |
range.array_layers_n = 1; |
526 |
544 |
vk_cmd_clr_color_img(npv_vk_surf_p.dev.cbs[swpchn_img], |
vk_cmd_clr_color_img(npv_vk_surf_p.dev.cbs[swpchn_img], |
527 |
545 |
npv_vk_surf_p.dev.swpchn.imgs[swpchn_img], |
npv_vk_surf_p.dev.swpchn.imgs[swpchn_img], |
528 |
|
vk_img_layout_present, &clr_color_val, 1, |
|
|
546 |
|
vk_img_layout_general, &clr_color_val, 1, |
529 |
547 |
&range); |
&range); |
530 |
548 |
/*--------------------------------------------------------------------*/ |
/*--------------------------------------------------------------------*/ |
|
549 |
|
/* |
|
550 |
|
* insert a memory barrier between the clear color command and the |
|
551 |
|
* following transfer-blit-scale-filter |
|
552 |
|
*/ |
|
553 |
|
memset(&mb, 0, sizeof(mb)); |
|
554 |
|
mb.type = vk_struct_type_mem_barrier; |
|
555 |
|
mb.src_access = vk_access_memory_write; /* finish to clear everything */ |
|
556 |
|
mb.dst_access = vk_access_memory_read | vk_access_memory_write; /* the dst stage will want to filter, let's expect reads and writes */ |
|
557 |
|
vk_cmd_pl_barrier(npv_vk_surf_p.dev.cbs[swpchn_img], |
|
558 |
|
vk_pl_stage_transfer_bit, vk_pl_stage_transfer_bit, |
|
559 |
|
1, &mb, 0, 0); |
|
560 |
|
/*--------------------------------------------------------------------*/ |
531 |
561 |
/* blit from cpu img to pe img */ |
/* blit from cpu img to pe img */ |
532 |
562 |
memset(®ion, 0, sizeof(region)); |
memset(®ion, 0, sizeof(region)); |
533 |
563 |
region.src_subrsrc.aspect = vk_img_aspect_color_bit; |
region.src_subrsrc.aspect = vk_img_aspect_color_bit; |
|
... |
... |
STATIC void blit_setup(u8 swpchn_img) |
554 |
584 |
vk_cmd_blit_img(npv_vk_surf_p.dev.cbs[swpchn_img], scaler_p.img.vk, |
vk_cmd_blit_img(npv_vk_surf_p.dev.cbs[swpchn_img], scaler_p.img.vk, |
555 |
585 |
npv_vk_surf_p.dev.swpchn.imgs[swpchn_img], ®ion, filt); |
npv_vk_surf_p.dev.swpchn.imgs[swpchn_img], ®ion, filt); |
556 |
586 |
/*--------------------------------------------------------------------*/ |
/*--------------------------------------------------------------------*/ |
|
587 |
|
/* acquired img general layout to presentation layout */ |
|
588 |
|
memset(&img_b, 0, sizeof(img_b)); |
|
589 |
|
img_b.type = vk_struct_type_img_mem_barrier; |
|
590 |
|
img_b.src_access = vk_access_memory_write; /* flush the final writes of the transfer-blit-scale-filter */ |
|
591 |
|
img_b.old_layout = vk_img_layout_general; |
|
592 |
|
img_b.new_layout = vk_img_layout_present; |
|
593 |
|
img_b.src_q_fam = vk_q_fam_ignored; |
|
594 |
|
img_b.dst_q_fam = vk_q_fam_ignored; |
|
595 |
|
img_b.img = npv_vk_surf_p.dev.swpchn.imgs[swpchn_img]; |
|
596 |
|
img_b.subrsrc_range.aspect = vk_img_aspect_color_bit; |
|
597 |
|
img_b.subrsrc_range.lvls_n = 1; |
|
598 |
|
img_b.subrsrc_range.array_layers_n = 1; |
|
599 |
|
/* |
|
600 |
|
* wait on the previous transfer stage, but don't make wait any pipe |
|
601 |
|
* stages since we are going to pe |
|
602 |
|
*/ |
|
603 |
|
vk_cmd_pl_barrier(npv_vk_surf_p.dev.cbs[swpchn_img], |
|
604 |
|
vk_pl_stage_transfer_bit, vk_pl_stage_bottom_of_pipe_bit, |
|
605 |
|
0, 0, 1, &img_b); |
|
606 |
|
/*--------------------------------------------------------------------*/ |
557 |
607 |
vk_end_cb(npv_vk_surf_p.dev.cbs[swpchn_img]); |
vk_end_cb(npv_vk_surf_p.dev.cbs[swpchn_img]); |
558 |
608 |
IF_FATALVVK("%d:swapchain img:%u:command buffer:%p:unable to end recording\n", r, swpchn_img, npv_vk_surf_p.dev.cbs[swpchn_img]); |
IF_FATALVVK("%d:swapchain img:%u:command buffer:%p:unable to end recording\n", r, swpchn_img, npv_vk_surf_p.dev.cbs[swpchn_img]); |
559 |
609 |
blit_l[swpchn_img].update_requested = false; |
blit_l[swpchn_img].update_requested = false; |
File npv/vk/api_usage.h changed (mode: 100644) (index 140d558..138d99b) |
... |
... |
r = npv_vk_surf_p.dev.dl_vk_begin_cb(__VA_ARGS__) |
60 |
60 |
#define vk_end_cb(...) \ |
#define vk_end_cb(...) \ |
61 |
61 |
r = npv_vk_surf_p.dev.dl_vk_end_cb(__VA_ARGS__) |
r = npv_vk_surf_p.dev.dl_vk_end_cb(__VA_ARGS__) |
62 |
62 |
|
|
63 |
|
/* we only use this for image barriers, logical layout transition, then bottom of pipe everywhere */ |
|
64 |
|
#define vk_cmd_pl_barrier(cb, b) \ |
|
65 |
|
npv_vk_surf_p.dev.dl_vk_cmd_pl_barrier(cb, vk_pl_stage_bottom_of_pipe_bit, vk_pl_stage_bottom_of_pipe_bit, 0, 0, 0, 0, 0, 1, b) |
|
|
63 |
|
#define vk_cmd_pl_barrier(cb, src_stage_msk, dst_stage_msk, mbs_n, mbs, img_bs_n, img_bs) \ |
|
64 |
|
npv_vk_surf_p.dev.dl_vk_cmd_pl_barrier(cb, src_stage_msk, dst_stage_msk, 0, mbs_n, mbs, 0, 0, img_bs_n, img_bs) |
66 |
65 |
|
|
67 |
66 |
#define vk_q_submit(info, fence) \ |
#define vk_q_submit(info, fence) \ |
68 |
67 |
r = npv_vk_surf_p.dev.dl_vk_q_submit(npv_vk_surf_p.dev.q, 1, info, fence) |
r = npv_vk_surf_p.dev.dl_vk_q_submit(npv_vk_surf_p.dev.q, 1, info, fence) |
|
... |
... |
r = npv_vk_surf_p.dev.dl_vk_acquire_next_img(npv_vk_surf_p.dev.vk, __VA_ARGS__) |
80 |
79 |
r = npv_vk_surf_p.dev.dl_vk_reset_cb(cb, 0) |
r = npv_vk_surf_p.dev.dl_vk_reset_cb(cb, 0) |
81 |
80 |
|
|
82 |
81 |
#define vk_cmd_blit_img(cb, src_img, dst_img, region, filter) \ |
#define vk_cmd_blit_img(cb, src_img, dst_img, region, filter) \ |
83 |
|
npv_vk_surf_p.dev.dl_vk_cmd_blit_img(cb, src_img, vk_img_layout_general, dst_img, vk_img_layout_present, 1, region, filter) |
|
|
82 |
|
npv_vk_surf_p.dev.dl_vk_cmd_blit_img(cb, src_img, vk_img_layout_general, dst_img, vk_img_layout_general, 1, region, filter) |
84 |
83 |
|
|
85 |
84 |
#define vk_q_present(info) \ |
#define vk_q_present(info) \ |
86 |
85 |
r = npv_vk_surf_p.dev.dl_vk_q_present(npv_vk_surf_p.dev.q, info) |
r = npv_vk_surf_p.dev.dl_vk_q_present(npv_vk_surf_p.dev.q, info) |