tangled
alpha
login
or
join now
matrixfurry.com
/
monado
0
fork
atom
The open source OpenXR runtime
0
fork
atom
overview
issues
pulls
pipelines
t/sdl_test: Use helper to import images
Jakob Bornecrantz
2 years ago
fe8c4116
95e1c9c8
+16
-80
1 changed file
expand all
collapse all
unified
split
src
xrt
targets
sdl_test
sdl_swapchain.c
+16
-80
src/xrt/targets/sdl_test/sdl_swapchain.c
···
15
15
#include <inttypes.h>
16
16
17
17
18
18
-
static int64_t
19
19
-
vk_format_to_gl(int64_t format)
20
20
-
{
21
21
-
switch (format) {
22
22
-
case 4 /* VK_FORMAT_R5G6B5_UNORM_PACK16 */: return 0; // GL_RGB565?
23
23
-
case 23 /* VK_FORMAT_R8G8B8_UNORM */: return GL_RGB8; // Should not be used, colour precision.
24
24
-
case 29 /* VK_FORMAT_R8G8B8_SRGB */: return GL_SRGB8;
25
25
-
case 30 /* VK_FORMAT_B8G8R8_UNORM */: return 0;
26
26
-
case 37 /* VK_FORMAT_R8G8B8A8_UNORM */: return GL_RGBA8; // Should not be used, colour precision.
27
27
-
case 43 /* VK_FORMAT_R8G8B8A8_SRGB */: return GL_SRGB8_ALPHA8;
28
28
-
case 44 /* VK_FORMAT_B8G8R8A8_UNORM */: return 0;
29
29
-
case 50 /* VK_FORMAT_B8G8R8A8_SRGB */: return 0;
30
30
-
case 64 /* VK_FORMAT_A2B10G10R10_UNORM_PACK32 */: return GL_RGB10_A2;
31
31
-
case 84 /* VK_FORMAT_R16G16B16_UNORM */: return GL_RGB16;
32
32
-
case 90 /* VK_FORMAT_R16G16B16_SFLOAT */: return GL_RGB16F;
33
33
-
case 91 /* VK_FORMAT_R16G16B16A16_UNORM */: return GL_RGBA16;
34
34
-
case 97 /* VK_FORMAT_R16G16B16A16_SFLOAT */: return GL_RGBA16F;
35
35
-
case 124 /* VK_FORMAT_D16_UNORM */: return GL_DEPTH_COMPONENT16;
36
36
-
case 125 /* VK_FORMAT_X8_D24_UNORM_PACK32 */: return 0; // GL_DEPTH_COMPONENT24?
37
37
-
case 126 /* VK_FORMAT_D32_SFLOAT */: return GL_DEPTH_COMPONENT32F;
38
38
-
case 127 /* VK_FORMAT_S8_UINT */: return 0; // GL_STENCIL_INDEX8?
39
39
-
case 129 /* VK_FORMAT_D24_UNORM_S8_UINT */: return GL_DEPTH24_STENCIL8;
40
40
-
case 130 /* VK_FORMAT_D32_SFLOAT_S8_UINT */: return GL_DEPTH32F_STENCIL8;
41
41
-
default: U_LOG_W("Cannot convert VK format %" PRIu64 " to GL format!", format); return 0;
42
42
-
}
43
43
-
}
44
44
-
45
18
static void
46
19
post_init_setup(struct sdl_swapchain *ssc, struct sdl_program *sp, const struct xrt_swapchain_create_info *info)
47
20
{
48
21
ST_DEBUG(sp, "CREATE");
49
22
50
50
-
// Setup fields
51
51
-
ssc->sp = sp;
52
52
-
ssc->w = (int)info->width;
53
53
-
ssc->h = (int)info->height;
54
54
-
55
55
-
56
23
sdl_make_current(sp);
57
24
58
58
-
GLuint binding_enum = 0;
59
59
-
GLuint tex_target = 0;
60
60
-
ogl_texture_target_for_swapchain_info(info, &tex_target, &binding_enum);
61
61
-
62
62
-
uint32_t image_count = ssc->base.base.base.image_count;
63
63
-
GLuint gl_format = vk_format_to_gl(info->format);
64
64
-
65
65
-
glCreateTextures(tex_target, image_count, ssc->textures);
66
66
-
CHECK_GL();
67
67
-
glCreateMemoryObjectsEXT(image_count, ssc->memory);
68
68
-
CHECK_GL();
69
69
-
70
70
-
for (uint32_t i = 0; i < image_count; i++) {
71
71
-
GLint dedicated = ssc->base.base.images[i].use_dedicated_allocation ? GL_TRUE : GL_FALSE;
72
72
-
glMemoryObjectParameterivEXT(ssc->memory[i], GL_DEDICATED_MEMORY_OBJECT_EXT, &dedicated);
73
73
-
CHECK_GL();
25
25
+
struct ogl_import_results results = XRT_STRUCT_INIT;
26
26
+
bool bret = ogl_import_from_native( //
27
27
+
ssc->base.base.images, // native_images
28
28
+
ssc->base.base.base.image_count, // native_count
29
29
+
info, // info
30
30
+
&results); // results
31
31
+
assert(bret);
32
32
+
(void)bret;
74
33
75
75
-
// The below function consumes the handle, need to reference it.
76
76
-
xrt_graphics_buffer_handle_t handle = u_graphics_buffer_ref(ssc->base.base.images[i].handle);
34
34
+
sdl_make_uncurrent(sp);
77
35
78
78
-
glImportMemoryFdEXT( //
79
79
-
ssc->memory[i], //
80
80
-
ssc->base.base.images[i].size, //
81
81
-
GL_HANDLE_TYPE_OPAQUE_FD_EXT, //
82
82
-
(GLint)handle); //
83
83
-
CHECK_GL();
36
36
+
// Setup fields
37
37
+
ssc->sp = sp;
38
38
+
ssc->w = (int)results.width;
39
39
+
ssc->h = (int)results.height;
84
40
85
85
-
if (info->array_size == 1) {
86
86
-
glTextureStorageMem2DEXT( //
87
87
-
ssc->textures[i], //
88
88
-
info->mip_count, //
89
89
-
gl_format, //
90
90
-
info->width, //
91
91
-
info->height, //
92
92
-
ssc->memory[i], //
93
93
-
0); //
94
94
-
} else {
95
95
-
glTextureStorageMem3DEXT( //
96
96
-
ssc->textures[i], //
97
97
-
info->mip_count, //
98
98
-
gl_format, //
99
99
-
info->width, //
100
100
-
info->height, //
101
101
-
info->array_size, //
102
102
-
ssc->memory[i], //
103
103
-
0); //
104
104
-
}
105
105
-
CHECK_GL();
41
41
+
for (uint32_t i = 0; i < results.image_count; i++) {
42
42
+
ssc->memory[i] = results.memories[i];
43
43
+
ssc->textures[i] = results.textures[i];
106
44
}
107
107
-
108
108
-
sdl_make_uncurrent(sp);
109
45
}
110
46
111
47
static void