The open source OpenXR runtime

t/sdl_test: Use helper to import images

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