File npv/nyanvk/consts.h changed (mode: 100644) (index b4363ad..0f45d4c) |
... |
... |
enum { |
71 |
71 |
vk_struct_type_xcb_surf_create_info = 1000000000 + 5000 + 0, |
vk_struct_type_xcb_surf_create_info = 1000000000 + 5000 + 0, |
72 |
72 |
/* extension number 60 or index 59, offset 1 */ |
/* extension number 60 or index 59, offset 1 */ |
73 |
73 |
vk_struct_type_phydev_props = 1000000000 + 59000 + 1, |
vk_struct_type_phydev_props = 1000000000 + 59000 + 1, |
|
74 |
|
/* extension number 60 or index 59, offset 2 */ |
|
75 |
|
vk_struct_type_texel_mem_blk_fmt_props = 1000000000 + 59000 + 2, |
74 |
76 |
/* extension number 60 or index 59, offset 5 */ |
/* extension number 60 or index 59, offset 5 */ |
75 |
77 |
vk_struct_type_q_fam_props = 1000000000 + 59000 + 5, |
vk_struct_type_q_fam_props = 1000000000 + 59000 + 5, |
76 |
78 |
/* extension number 60 or index 59, offset 6 */ |
/* extension number 60 or index 59, offset 6 */ |
|
... |
... |
enum { |
296 |
298 |
vk_fence_create_signaled_bit = 0x00000001, |
vk_fence_create_signaled_bit = 0x00000001, |
297 |
299 |
vk_fence_create_flag_bits_enum_max = 0x7fffffff |
vk_fence_create_flag_bits_enum_max = 0x7fffffff |
298 |
300 |
}; |
}; |
|
301 |
|
enum { |
|
302 |
|
vk_texel_mem_blk_fmt_feature_sampled_img_filt_linear_bit = 0x00001000, |
|
303 |
|
vk_texel_mem_blk_fmt_feature_bits_enum_max = 0x7fffffff |
|
304 |
|
}; |
|
305 |
|
enum { |
|
306 |
|
vk_filt_nearest = 0, |
|
307 |
|
vk_filt_linear = 1, |
|
308 |
|
vk_filt_enum_max = 0x7fffffff |
|
309 |
|
}; |
299 |
310 |
#endif |
#endif |
File npv/video/local/code.frag.c changed (mode: 100644) (index f8566ed..de9a584) |
... |
... |
STATIC void blit_setup(u8 swpchn_img) |
501 |
501 |
struct vk_extent_2d_t *current; |
struct vk_extent_2d_t *current; |
502 |
502 |
union vk_clr_color_val_t clr_color_val; |
union vk_clr_color_val_t clr_color_val; |
503 |
503 |
struct vk_img_subrsrc_range_t range; |
struct vk_img_subrsrc_range_t range; |
|
504 |
|
struct npv_vk_texel_mem_blk_fmt_t *b8g8r8a8_srgb; |
|
505 |
|
u32 filt; |
504 |
506 |
|
|
505 |
507 |
current = &npv_vk_surf_p.dev.phydev.surf_caps.core.current_extent; |
current = &npv_vk_surf_p.dev.phydev.surf_caps.core.current_extent; |
506 |
508 |
|
|
|
... |
... |
STATIC void blit_setup(u8 swpchn_img) |
561 |
563 |
memcpy(®ion.dst_offsets[1], &blit_l[swpchn_img].vp.bottom_right, |
memcpy(®ion.dst_offsets[1], &blit_l[swpchn_img].vp.bottom_right, |
562 |
564 |
sizeof(region.dst_offsets[1])); |
sizeof(region.dst_offsets[1])); |
563 |
565 |
region.dst_offsets[1].z = 1; /* see vk specs */ |
region.dst_offsets[1].z = 1; /* see vk specs */ |
|
566 |
|
/* linear filtering */ |
|
567 |
|
b8g8r8a8_srgb = &npv_vk_surf_p.dev.phydev.b8g8r8a8_srgb; |
|
568 |
|
if (b8g8r8a8_srgb->linear_tiling_has_linear_filt) |
|
569 |
|
filt = vk_filt_linear; |
|
570 |
|
else |
|
571 |
|
filt = vk_filt_nearest; |
564 |
572 |
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, |
565 |
|
npv_vk_surf_p.dev.swpchn.imgs[swpchn_img], ®ion); |
|
|
573 |
|
npv_vk_surf_p.dev.swpchn.imgs[swpchn_img], ®ion, filt); |
566 |
574 |
/*--------------------------------------------------------------------*/ |
/*--------------------------------------------------------------------*/ |
567 |
575 |
vk_end_cb(npv_vk_surf_p.dev.cbs[swpchn_img]); |
vk_end_cb(npv_vk_surf_p.dev.cbs[swpchn_img]); |
568 |
576 |
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]); |
File npv/vk/api_usage.h changed (mode: 100644) (index 5d59ce4..f2f1b61) |
... |
... |
r = npv_vk_surf_p.dev.dl_vk_acquire_next_img(npv_vk_surf_p.dev.vk, __VA_ARGS__) |
78 |
78 |
#define vk_reset_cb(cb) \ |
#define vk_reset_cb(cb) \ |
79 |
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) |
80 |
80 |
|
|
81 |
|
/* linear filtering if scaling happens */ |
|
82 |
|
/* TODO: should be tested prior to usage: fmt feature of src img should have the vk_fmt_feature_sampled_img_filt_linear_bit */ |
|
83 |
|
#define vk_cmd_blit_img(cb, src_img, dst_img, region) \ |
|
84 |
|
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, 1) |
|
|
81 |
|
#define vk_cmd_blit_img(cb, src_img, dst_img, 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_present, 1, region, filter) |
85 |
83 |
|
|
86 |
84 |
#define vk_q_present(info) \ |
#define vk_q_present(info) \ |
87 |
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) |
|
... |
... |
r = npv_vk_surf_p.dev.dl_vk_get_fence_status(npv_vk_surf_p.dev.vk, npv_vk_surf_p |
100 |
98 |
#define vk_reset_fences() \ |
#define vk_reset_fences() \ |
101 |
99 |
r = npv_vk_surf_p.dev.dl_vk_reset_fences(npv_vk_surf_p.dev.vk, 1, &npv_vk_surf_p.dev.fence) |
r = npv_vk_surf_p.dev.dl_vk_reset_fences(npv_vk_surf_p.dev.vk, 1, &npv_vk_surf_p.dev.fence) |
102 |
100 |
/******************************************************************************/ |
/******************************************************************************/ |
103 |
|
/* cherry picked from nyanvk/syms_global.h */ |
|
|
101 |
|
/* cherry picked and namespaced from nyanvk/syms_global.h */ |
104 |
102 |
#define VK_GLOBAL_SYMS \ |
#define VK_GLOBAL_SYMS \ |
105 |
103 |
STATIC void *(*npv_dl_vk_get_instance_proc_addr)(\ |
STATIC void *(*npv_dl_vk_get_instance_proc_addr)(\ |
106 |
104 |
struct vk_instance_t *instance,\ |
struct vk_instance_t *instance,\ |
|
... |
... |
r = npv_vk_surf_p.dev.dl_vk_reset_fences(npv_vk_surf_p.dev.vk, 1, &npv_vk_surf_p |
171 |
169 |
struct vk_phydev_t *phydev, \ |
struct vk_phydev_t *phydev, \ |
172 |
170 |
struct vk_surf_t *surf, \ |
struct vk_surf_t *surf, \ |
173 |
171 |
u32 *modes_n, \ |
u32 *modes_n, \ |
174 |
|
u32 *modes); |
|
|
172 |
|
u32 *modes); \ |
|
173 |
|
STATIC void (*npv_dl_vk_get_phydev_texel_mem_blk_fmt_props)(\ |
|
174 |
|
struct vk_phydev_t *phydev,\ |
|
175 |
|
u32 fmt,\ |
|
176 |
|
struct vk_texel_mem_blk_fmt_props_t *props); |
175 |
177 |
/******************************************************************************/ |
/******************************************************************************/ |
176 |
178 |
#define vk_get_instance_proc_addr npv_dl_vk_get_instance_proc_addr |
#define vk_get_instance_proc_addr npv_dl_vk_get_instance_proc_addr |
177 |
179 |
|
|
|
... |
... |
r = npv_dl_vk_get_phydev_surf_texel_mem_blk_confs(npv_vk_surf_p.dev.phydev.vk, _ |
213 |
215 |
|
|
214 |
216 |
#define vk_get_phydev_mem_props npv_dl_vk_get_phydev_mem_props |
#define vk_get_phydev_mem_props npv_dl_vk_get_phydev_mem_props |
215 |
217 |
|
|
|
218 |
|
#define vk_get_phydev_texel_mem_blk_fmt_props(...) \ |
|
219 |
|
npv_dl_vk_get_phydev_texel_mem_blk_fmt_props(npv_vk_surf_p.dev.phydev.vk, __VA_ARGS__) |
|
220 |
|
|
216 |
221 |
#define vk_get_phydev_surf_caps(info, caps) \ |
#define vk_get_phydev_surf_caps(info, caps) \ |
217 |
222 |
r = npv_dl_vk_get_phydev_surf_caps(npv_vk_surf_p.dev.phydev.vk, info, caps) |
r = npv_dl_vk_get_phydev_surf_caps(npv_vk_surf_p.dev.phydev.vk, info, caps) |
218 |
223 |
|
|
File npv/vk/local/code.frag.c changed (mode: 100644) (index 19afef6..ff2810d) |
... |
... |
STATIC void instance_syms(void) |
42 |
42 |
INSTANCE_SYM(vkGetPhysicalDeviceSurfaceFormats2KHR, |
INSTANCE_SYM(vkGetPhysicalDeviceSurfaceFormats2KHR, |
43 |
43 |
vk_get_phydev_surf_texel_mem_blk_confs); |
vk_get_phydev_surf_texel_mem_blk_confs); |
44 |
44 |
INSTANCE_SYM(vkCreateXcbSurfaceKHR, vk_create_xcb_surf); |
INSTANCE_SYM(vkCreateXcbSurfaceKHR, vk_create_xcb_surf); |
|
45 |
|
INSTANCE_SYM(vkGetPhysicalDeviceFormatProperties2, |
|
46 |
|
vk_get_phydev_texel_mem_blk_fmt_props); |
45 |
47 |
INSTANCE_SYM(vkGetPhysicalDeviceMemoryProperties2, |
INSTANCE_SYM(vkGetPhysicalDeviceMemoryProperties2, |
46 |
48 |
vk_get_phydev_mem_props); |
vk_get_phydev_mem_props); |
47 |
49 |
INSTANCE_SYM(vkGetPhysicalDeviceSurfaceCapabilities2KHR, |
INSTANCE_SYM(vkGetPhysicalDeviceSurfaceCapabilities2KHR, |
|
... |
... |
STATIC void texel_mem_blk_confs_dump(u32 confs_n, |
605 |
607 |
++i; |
++i; |
606 |
608 |
} |
} |
607 |
609 |
} |
} |
608 |
|
/* |
|
609 |
|
* we only know this phydev/q is "able to present imgs" to the external |
|
610 |
|
* pe surf. Here we choose the cfg of textel blk |
|
611 |
|
*/ |
|
612 |
610 |
#define CONFS_N_MAX 1024 |
#define CONFS_N_MAX 1024 |
613 |
|
STATIC void phydev_surf_texel_mem_blk_conf_select(void) |
|
|
611 |
|
STATIC void phydev_surf_texel_mem_blk_fmts_dump(void) |
614 |
612 |
{ |
{ |
615 |
613 |
struct vk_phydev_surf_info_t info; |
struct vk_phydev_surf_info_t info; |
616 |
614 |
struct vk_surf_texel_mem_blk_conf_t confs[CONFS_N_MAX]; |
struct vk_surf_texel_mem_blk_conf_t confs[CONFS_N_MAX]; |
617 |
|
struct vk_surf_texel_mem_blk_conf_core_t *cc; |
|
618 |
615 |
s32 r; |
s32 r; |
619 |
616 |
u32 confs_n; |
u32 confs_n; |
620 |
617 |
u32 i; |
u32 i; |
|
... |
... |
STATIC void phydev_surf_texel_mem_blk_conf_select(void) |
640 |
637 |
if (confs_n == 0) |
if (confs_n == 0) |
641 |
638 |
fatal("physical device:%p:surface:%p:no valid surface texel memory block configuration\n", surf_p.dev.phydev.vk, surf_p.vk); |
fatal("physical device:%p:surface:%p:no valid surface texel memory block configuration\n", surf_p.dev.phydev.vk, surf_p.vk); |
642 |
639 |
texel_mem_blk_confs_dump(confs_n, confs); |
texel_mem_blk_confs_dump(confs_n, confs); |
643 |
|
|
|
644 |
|
cc = &surf_p.dev.phydev.selected_texel_mem_blk_conf_core; |
|
|
640 |
|
} |
|
641 |
|
#undef CONFS_N_MAX |
|
642 |
|
STATIC void phydev_surf_b8g8r8a8_srgb_setup(void) |
|
643 |
|
{ |
|
644 |
|
struct vk_surf_texel_mem_blk_conf_core_t *cc; |
|
645 |
|
struct texel_mem_blk_fmt_t *fmt; |
|
646 |
|
struct vk_texel_mem_blk_fmt_props_t b8g8r8a8_srgb_props; |
645 |
647 |
/* |
/* |
646 |
|
* the following texel cfg is guaranteed to exist, and this is what we |
|
647 |
|
* get from ff scaler |
|
|
648 |
|
* the b8g8r8a8_srgb texel cfg is guaranteed to exist, and this is what |
|
649 |
|
* we get from ff scaler |
648 |
650 |
*/ |
*/ |
|
651 |
|
fmt = &surf_p.dev.phydev.b8g8r8a8_srgb; |
|
652 |
|
cc = &fmt->conf_core; |
|
653 |
|
|
649 |
654 |
cc->fmt = vk_texel_mem_blk_fmt_b8g8r8a8_srgb; |
cc->fmt = vk_texel_mem_blk_fmt_b8g8r8a8_srgb; |
650 |
655 |
pout("physical device:%p:surface:%p:using our surface texel memory block format %u\n", surf_p.dev.phydev.vk, surf_p.vk, cc->fmt); |
pout("physical device:%p:surface:%p:using our surface texel memory block format %u\n", surf_p.dev.phydev.vk, surf_p.vk, cc->fmt); |
651 |
656 |
cc->color_space = vk_color_space_srgb_nonlinear; |
cc->color_space = vk_color_space_srgb_nonlinear; |
652 |
657 |
pout("physical device:%p:surface:%p:using prefered surface texel memory block color space %u\n", surf_p.dev.phydev.vk, surf_p.vk, cc->color_space); |
pout("physical device:%p:surface:%p:using prefered surface texel memory block color space %u\n", surf_p.dev.phydev.vk, surf_p.vk, cc->color_space); |
|
658 |
|
/*--------------------------------------------------------------------*/ |
|
659 |
|
/* do we have linear filt on b8g8r8a8 srgb linear tiling? */ |
|
660 |
|
memset(&b8g8r8a8_srgb_props, 0, sizeof(b8g8r8a8_srgb_props)); |
|
661 |
|
b8g8r8a8_srgb_props.type = vk_struct_type_texel_mem_blk_fmt_props; |
|
662 |
|
vk_get_phydev_texel_mem_blk_fmt_props( |
|
663 |
|
vk_texel_mem_blk_fmt_b8g8r8a8_srgb, &b8g8r8a8_srgb_props); |
|
664 |
|
if (b8g8r8a8_srgb_props.core.linear_tiling_features & |
|
665 |
|
vk_texel_mem_blk_fmt_feature_sampled_img_filt_linear_bit != 0) { |
|
666 |
|
fmt->linear_tiling_has_linear_filt = true; |
|
667 |
|
pout("physical device:%p:linear tiling of b8g8r8a8 sRGB texel memory blocks has linear filtering\n", surf_p.dev.phydev.vk); |
|
668 |
|
} else { |
|
669 |
|
fmt->linear_tiling_has_linear_filt = false; |
|
670 |
|
pout("physical device:%p:linear tiling of b8g8r8a8 sRGB texel memory blocks does not have linear filtering\n", surf_p.dev.phydev.vk); |
|
671 |
|
} |
653 |
672 |
} |
} |
654 |
|
#undef CONFS_N_MAX |
|
655 |
673 |
STATIC void phydev_surf_caps_get(void) |
STATIC void phydev_surf_caps_get(void) |
656 |
674 |
{ |
{ |
657 |
675 |
s32 r; |
s32 r; |
|
... |
... |
STATIC void phydev_init(void) |
736 |
754 |
tmp_phydevs_q_fams_surf_support_get(); |
tmp_phydevs_q_fams_surf_support_get(); |
737 |
755 |
tmp_phydev_and_q_fam_select(); |
tmp_phydev_and_q_fam_select(); |
738 |
756 |
/*--------------------------------------------------------------------*/ |
/*--------------------------------------------------------------------*/ |
739 |
|
phydev_surf_texel_mem_blk_conf_select(); |
|
|
757 |
|
phydev_surf_texel_mem_blk_fmts_dump(); |
|
758 |
|
phydev_surf_b8g8r8a8_srgb_setup(); |
740 |
759 |
/*--------------------------------------------------------------------*/ |
/*--------------------------------------------------------------------*/ |
741 |
760 |
phydev_surf_caps_get(); |
phydev_surf_caps_get(); |
742 |
761 |
phydev_surf_caps_dump(); |
phydev_surf_caps_dump(); |
|
... |
... |
STATIC void swpchn_reinit(void) |
842 |
861 |
info.type = vk_struct_type_swpchn_create_info; |
info.type = vk_struct_type_swpchn_create_info; |
843 |
862 |
info.surf = surf_p.vk; |
info.surf = surf_p.vk; |
844 |
863 |
info.imgs_n_min = surf_p.dev.phydev.surf_caps.core.imgs_n_min; |
info.imgs_n_min = surf_p.dev.phydev.surf_caps.core.imgs_n_min; |
845 |
|
info.img_texel_mem_blk_fmt = p->selected_texel_mem_blk_conf_core.fmt; |
|
846 |
|
info.img_color_space = p->selected_texel_mem_blk_conf_core.color_space; |
|
|
864 |
|
info.img_texel_mem_blk_fmt = p->b8g8r8a8_srgb.conf_core.fmt; |
|
865 |
|
info.img_color_space = p->b8g8r8a8_srgb.conf_core.color_space; |
847 |
866 |
memcpy(&info.img_extent, |
memcpy(&info.img_extent, |
848 |
867 |
&surf_p.dev.phydev.surf_caps.core.current_extent, |
&surf_p.dev.phydev.surf_caps.core.current_extent, |
849 |
868 |
sizeof(info.img_extent)); |
sizeof(info.img_extent)); |
File npv/vk/namespace/main.c changed (mode: 100644) (index 47fd1e3..a24e51b) |
19 |
19 |
#define phydev_init npv_vk_phydev_init |
#define phydev_init npv_vk_phydev_init |
20 |
20 |
#define phydev_mem_type_dump npv_vk_phydev_mem_type_dump |
#define phydev_mem_type_dump npv_vk_phydev_mem_type_dump |
21 |
21 |
#define phydev_mem_heap_dump npv_vk_phydev_mem_heap_dump |
#define phydev_mem_heap_dump npv_vk_phydev_mem_heap_dump |
|
22 |
|
#define phydev_surf_b8g8r8a8_srgb_setup npv_vk_phydev_surf_b8g8r8a8_srgb_setup |
22 |
23 |
#define phydev_surf_caps_dump npv_vk_phydev_surf_caps_dump |
#define phydev_surf_caps_dump npv_vk_phydev_surf_caps_dump |
23 |
24 |
#define phydev_surf_caps_get npv_vk_phydev_surf_caps_get |
#define phydev_surf_caps_get npv_vk_phydev_surf_caps_get |
24 |
|
#define phydev_surf_texel_mem_blk_conf_select npv_vk_phydev_surf_texel_mem_blk_conf_select |
|
|
25 |
|
#define phydev_surf_texel_mem_blk_fmts_dump npv_vk_phydev_surf_texel_mem_blk_fmts_dump |
25 |
26 |
#define pout npv_vk_pout |
#define pout npv_vk_pout |
26 |
27 |
#define present_mode_to_str npv_vk_present_mode_to_str |
#define present_mode_to_str npv_vk_present_mode_to_str |
27 |
28 |
#define q_get npv_vk_q_get |
#define q_get npv_vk_q_get |
|
81 |
82 |
#undef phydev_init |
#undef phydev_init |
82 |
83 |
#undef phydev_mem_type_dump |
#undef phydev_mem_type_dump |
83 |
84 |
#undef phydev_mem_heap_dump |
#undef phydev_mem_heap_dump |
|
85 |
|
#undef phydev_surf_b8g8r8a8_srgb_setup |
84 |
86 |
#undef phydev_surf_caps_dump |
#undef phydev_surf_caps_dump |
85 |
87 |
#undef phydev_surf_caps_get |
#undef phydev_surf_caps_get |
86 |
|
#undef phydev_surf_texel_mem_blk_conf_select |
|
|
88 |
|
#undef phydev_surf_texel_mem_blk_fmts_dump |
87 |
89 |
#undef pout |
#undef pout |
88 |
90 |
#undef present_mode_to_str |
#undef present_mode_to_str |
89 |
91 |
#undef q_get |
#undef q_get |