1d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson/************************************************************************** 2d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * 3d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * Copyright 2009 VMware, Inc. 47d551eb03df0a732e9e55dd960afffc6a1525377Corbin Simpson * 2010 Corbin Simpson <MostAwesomeDude@gmail.com> 5d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * All Rights Reserved. 6d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * 7d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * Permission is hereby granted, free of charge, to any person obtaining a 8d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * copy of this software and associated documentation files (the 9d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * "Software"), to deal in the Software without restriction, including 10d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * without limitation the rights to use, copy, modify, merge, publish, 11d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * distribute, sub license, and/or sell copies of the Software, and to 12d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * permit persons to whom the Software is furnished to do so, subject to 13d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * the following conditions: 14d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * 15d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * The above copyright notice and this permission notice (including the 16d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * next paragraph) shall be included in all copies or substantial portions 17d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * of the Software. 18d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * 19d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 20d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 21d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 22d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 23d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 24d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 25d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 26d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson * 27d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson **************************************************************************/ 28d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 29d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 30d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson#include "pipe/p_screen.h" 31d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson#include "pipe/p_state.h" 32d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson#include "util/u_memory.h" 33ccd08643577988d416b339b84fe7bfda6fb77ef6Luca Barbieri#include "util/u_math.h" 348b1f1900d191b01a6a58090228a8056f3c0cad1cJosé Fonseca#include "util/u_format.h" 35d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 36d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson#include "glhd_public.h" 37d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson#include "glhd_screen.h" 38d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson#include "glhd_context.h" 39d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson#include "glhd_objects.h" 40d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 41d12c4c5a62dbf5e32f989c8ef53a5a878cc5c0a2Jakob BornecrantzDEBUG_GET_ONCE_BOOL_OPTION(galahad, "GALLIUM_GALAHAD", FALSE) 42d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 43d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsonstatic void 44d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsongalahad_screen_destroy(struct pipe_screen *_screen) 45d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson{ 46d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct galahad_screen *glhd_screen = galahad_screen(_screen); 47d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_screen *screen = glhd_screen->screen; 48d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 49d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson screen->destroy(screen); 50d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 51d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson FREE(glhd_screen); 52d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson} 53d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 54d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsonstatic const char * 55d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsongalahad_screen_get_name(struct pipe_screen *_screen) 56d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson{ 57d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct galahad_screen *glhd_screen = galahad_screen(_screen); 58d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_screen *screen = glhd_screen->screen; 59d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 60d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson return screen->get_name(screen); 61d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson} 62d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 63d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsonstatic const char * 64d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsongalahad_screen_get_vendor(struct pipe_screen *_screen) 65d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson{ 66d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct galahad_screen *glhd_screen = galahad_screen(_screen); 67d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_screen *screen = glhd_screen->screen; 68d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 69d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson return screen->get_vendor(screen); 70d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson} 71d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 72d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsonstatic int 73d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsongalahad_screen_get_param(struct pipe_screen *_screen, 74d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson enum pipe_cap param) 75d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson{ 76d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct galahad_screen *glhd_screen = galahad_screen(_screen); 77d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_screen *screen = glhd_screen->screen; 78d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 79d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson return screen->get_param(screen, 80d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson param); 81d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson} 82d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 83a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieristatic int 84a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbierigalahad_screen_get_shader_param(struct pipe_screen *_screen, 85a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri unsigned shader, enum pipe_shader_cap param) 86a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri{ 87a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri struct galahad_screen *glhd_screen = galahad_screen(_screen); 88a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri struct pipe_screen *screen = glhd_screen->screen; 89a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri 90a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri return screen->get_shader_param(screen, shader, 91a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri param); 92a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri} 93a508d2dddcc67d0f92cc36b9ed6f36a9bbfc579dLuca Barbieri 94d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsonstatic float 95d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsongalahad_screen_get_paramf(struct pipe_screen *_screen, 96bb71f9249a66b9a4921a878766c0a2d87624c369Marek Olšák enum pipe_capf param) 97d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson{ 98d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct galahad_screen *glhd_screen = galahad_screen(_screen); 99d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_screen *screen = glhd_screen->screen; 100d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 101d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson return screen->get_paramf(screen, 102d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson param); 103d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson} 104d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 105d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsonstatic boolean 106d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsongalahad_screen_is_format_supported(struct pipe_screen *_screen, 107d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson enum pipe_format format, 108d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson enum pipe_texture_target target, 109d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson unsigned sample_count, 110e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák unsigned tex_usage) 111d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson{ 112d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct galahad_screen *glhd_screen = galahad_screen(_screen); 113d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_screen *screen = glhd_screen->screen; 114d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 115de7b181e99a64cb517a021f00f714c6af9b337eeCorbin Simpson if (target >= PIPE_MAX_TEXTURE_TYPES) { 116de7b181e99a64cb517a021f00f714c6af9b337eeCorbin Simpson glhd_warn("Received bogus texture target %d", target); 117de7b181e99a64cb517a021f00f714c6af9b337eeCorbin Simpson } 118de7b181e99a64cb517a021f00f714c6af9b337eeCorbin Simpson 119d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson return screen->is_format_supported(screen, 120d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson format, 121d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson target, 122d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson sample_count, 123e968975cb57eb854769292f7c6ff773c64a386c3Marek Olšák tex_usage); 124d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson} 125d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 126d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsonstatic struct pipe_context * 127d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsongalahad_screen_context_create(struct pipe_screen *_screen, 128d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson void *priv) 129d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson{ 130d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct galahad_screen *glhd_screen = galahad_screen(_screen); 131d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_screen *screen = glhd_screen->screen; 132d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_context *result; 133d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 134d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson result = screen->context_create(screen, priv); 135d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson if (result) 136d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson return galahad_context_create(_screen, result); 137d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson return NULL; 138d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson} 139d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 140d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsonstatic struct pipe_resource * 141d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsongalahad_screen_resource_create(struct pipe_screen *_screen, 142d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson const struct pipe_resource *templat) 143d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson{ 144d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct galahad_screen *glhd_screen = galahad_screen(_screen); 145d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_screen *screen = glhd_screen->screen; 146d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_resource *result; 147d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 148ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->width0, >= 1); 149ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->height0, >= 1); 150ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->depth0, >= 1); 151ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->array_size, >= 1); 152ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca 153ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca if (templat->target == PIPE_BUFFER) { 154ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->last_level, == 0); 155ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->height0, == 1); 156ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->depth0, == 1); 157ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->array_size, == 1); 158ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca } else if (templat->target == PIPE_TEXTURE_1D) { 159ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca unsigned max_texture_2d_levels = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS); 160ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->last_level, < max_texture_2d_levels); 161ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->width0, <= (1 << (max_texture_2d_levels - 1))); 162ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->height0, == 1); 163ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->depth0, == 1); 164ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->array_size, == 1); 165ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca } else if (templat->target == PIPE_TEXTURE_2D) { 166ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca unsigned max_texture_2d_levels = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS); 167ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->last_level, < max_texture_2d_levels); 168ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->width0, <= (1 << (max_texture_2d_levels - 1))); 169ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->height0, <= (1 << (max_texture_2d_levels - 1))); 170ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->depth0, == 1); 171ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->array_size, == 1); 172ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca } else if (templat->target == PIPE_TEXTURE_CUBE) { 173ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca unsigned max_texture_cube_levels = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS); 174ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->last_level, < max_texture_cube_levels); 175ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->width0, <= (1 << (max_texture_cube_levels - 1))); 176ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->height0, == templat->width0); 177ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->depth0, == 1); 178ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->array_size, == 6); 179ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca } else if (templat->target == PIPE_TEXTURE_RECT) { 180ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca unsigned max_texture_2d_levels = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS); 181ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->last_level, == 0); 182ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->width0, <= (1 << (max_texture_2d_levels - 1))); 183ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->height0, <= (1 << (max_texture_2d_levels - 1))); 184ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->depth0, == 1); 185ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->array_size, == 1); 186ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca } else if (templat->target == PIPE_TEXTURE_3D) { 187ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca unsigned max_texture_3d_levels = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_3D_LEVELS); 188ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->last_level, < max_texture_3d_levels); 189ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->width0, <= (1 << (max_texture_3d_levels - 1))); 190ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->height0, <= (1 << (max_texture_3d_levels - 1))); 191ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->depth0, <= (1 << (max_texture_3d_levels - 1))); 192ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->array_size, == 1); 193ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca } else if (templat->target == PIPE_TEXTURE_1D_ARRAY) { 194ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca unsigned max_texture_2d_levels = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS); 195ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->last_level, < max_texture_2d_levels); 196ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->width0, <= (1 << (max_texture_2d_levels - 1))); 197ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->height0, == 1); 198ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->depth0, == 1); 199ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->array_size, <= screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS)); 200ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca } else if (templat->target == PIPE_TEXTURE_2D_ARRAY) { 201ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca unsigned max_texture_2d_levels = screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS); 202ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->last_level, < max_texture_2d_levels); 203ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->width0, <= (1 << (max_texture_2d_levels - 1))); 204ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->height0, <= (1 << (max_texture_2d_levels - 1))); 205ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->depth0, == 1); 206ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca glhd_check("%u", templat->array_size, <= screen->get_param(screen, PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS)); 207ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca } else { 208ccd08643577988d416b339b84fe7bfda6fb77ef6Luca Barbieri glhd_warn("Received bogus resource target %d", templat->target); 209ff8ddf399adb58d7c33863ec9c6eeaa7aed71599José Fonseca } 210ccd08643577988d416b339b84fe7bfda6fb77ef6Luca Barbieri 211ccd08643577988d416b339b84fe7bfda6fb77ef6Luca Barbieri if(templat->target != PIPE_TEXTURE_RECT && templat->target != PIPE_BUFFER && !screen->get_param(screen, PIPE_CAP_NPOT_TEXTURES)) 212ccd08643577988d416b339b84fe7bfda6fb77ef6Luca Barbieri { 21389b2897220acfacdc431f138377fbcec9f0ea812Marek Olšák if(!util_is_power_of_two(templat->width0) || !util_is_power_of_two(templat->height0)) 214ccd08643577988d416b339b84fe7bfda6fb77ef6Luca Barbieri glhd_warn("Requested NPOT (%ux%u) non-rectangle texture without NPOT support", templat->width0, templat->height0); 215ccd08643577988d416b339b84fe7bfda6fb77ef6Luca Barbieri } 216ccd08643577988d416b339b84fe7bfda6fb77ef6Luca Barbieri 2178b1f1900d191b01a6a58090228a8056f3c0cad1cJosé Fonseca if (templat->target != PIPE_BUFFER && 2188b1f1900d191b01a6a58090228a8056f3c0cad1cJosé Fonseca !screen->is_format_supported(screen, templat->format, templat->target, templat->nr_samples, templat->bind)) { 2198b1f1900d191b01a6a58090228a8056f3c0cad1cJosé Fonseca glhd_warn("Requested format=%s target=%u samples=%u bind=0x%x unsupported", 2208b1f1900d191b01a6a58090228a8056f3c0cad1cJosé Fonseca util_format_name(templat->format), templat->target, templat->nr_samples, templat->bind); 2218b1f1900d191b01a6a58090228a8056f3c0cad1cJosé Fonseca } 2228b1f1900d191b01a6a58090228a8056f3c0cad1cJosé Fonseca 223d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson result = screen->resource_create(screen, 224d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson templat); 225d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 226d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson if (result) 227d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson return galahad_resource_create(glhd_screen, result); 228d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson return NULL; 229d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson} 230d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 231d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsonstatic struct pipe_resource * 232d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsongalahad_screen_resource_from_handle(struct pipe_screen *_screen, 233d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson const struct pipe_resource *templ, 234d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct winsys_handle *handle) 235d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson{ 236d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct galahad_screen *glhd_screen = galahad_screen(_screen); 237d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_screen *screen = glhd_screen->screen; 238d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_resource *result; 239d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 240d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson /* TODO trace call */ 241d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 242d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson result = screen->resource_from_handle(screen, templ, handle); 243d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 244d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson result = galahad_resource_create(galahad_screen(_screen), result); 245d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 246d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson return result; 247d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson} 248d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 249d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsonstatic boolean 250d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsongalahad_screen_resource_get_handle(struct pipe_screen *_screen, 251d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_resource *_resource, 252d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct winsys_handle *handle) 253d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson{ 254d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct galahad_screen *glhd_screen = galahad_screen(_screen); 255d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct galahad_resource *glhd_resource = galahad_resource(_resource); 256d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_screen *screen = glhd_screen->screen; 257d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_resource *resource = glhd_resource->resource; 258d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 259d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson /* TODO trace call */ 260d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 261d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson return screen->resource_get_handle(screen, resource, handle); 262d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson} 263d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 264d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 265d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 266d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsonstatic void 267d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsongalahad_screen_resource_destroy(struct pipe_screen *screen, 268d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_resource *_resource) 269d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson{ 270d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson galahad_resource_destroy(galahad_resource(_resource)); 271d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson} 272d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 273d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 274d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsonstatic void 275d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsongalahad_screen_flush_frontbuffer(struct pipe_screen *_screen, 2764c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger struct pipe_resource *_resource, 2774c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger unsigned level, unsigned layer, 278d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson void *context_private) 279d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson{ 280d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct galahad_screen *glhd_screen = galahad_screen(_screen); 2814c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger struct galahad_resource *glhd_resource = galahad_resource(_resource); 282d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_screen *screen = glhd_screen->screen; 2834c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger struct pipe_resource *resource = glhd_resource->resource; 284d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 285d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson screen->flush_frontbuffer(screen, 2864c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger resource, 2874c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger level, layer, 288d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson context_private); 289d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson} 290d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 291d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsonstatic void 292d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsongalahad_screen_fence_reference(struct pipe_screen *_screen, 293d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_fence_handle **ptr, 294d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_fence_handle *fence) 295d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson{ 296d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct galahad_screen *glhd_screen = galahad_screen(_screen); 297d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_screen *screen = glhd_screen->screen; 298d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 299d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson screen->fence_reference(screen, 300d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson ptr, 301d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson fence); 302d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson} 303d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 304bfe88e69988b3d3bdff0b9f6051d0428e1315653Marek Olšákstatic boolean 305d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsongalahad_screen_fence_signalled(struct pipe_screen *_screen, 306bfe88e69988b3d3bdff0b9f6051d0428e1315653Marek Olšák struct pipe_fence_handle *fence) 307d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson{ 308d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct galahad_screen *glhd_screen = galahad_screen(_screen); 309d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_screen *screen = glhd_screen->screen; 310d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 311d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson return screen->fence_signalled(screen, 312bfe88e69988b3d3bdff0b9f6051d0428e1315653Marek Olšák fence); 313d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson} 314d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 315bfe88e69988b3d3bdff0b9f6051d0428e1315653Marek Olšákstatic boolean 316d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsongalahad_screen_fence_finish(struct pipe_screen *_screen, 317d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_fence_handle *fence, 318b39bccbd4ed71e9585da4cf5acf7b887b2e90899Marek Olšák uint64_t timeout) 319d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson{ 320d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct galahad_screen *glhd_screen = galahad_screen(_screen); 321d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct pipe_screen *screen = glhd_screen->screen; 322d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 323d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson return screen->fence_finish(screen, 324d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson fence, 325b39bccbd4ed71e9585da4cf5acf7b887b2e90899Marek Olšák timeout); 326d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson} 327d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 328a471d268ec2a6d22a02f3e9d109b792659dbe7efMarek Olšákstatic uint64_t 329a471d268ec2a6d22a02f3e9d109b792659dbe7efMarek Olšákgalahad_screen_get_timestamp(struct pipe_screen *_screen) 330a471d268ec2a6d22a02f3e9d109b792659dbe7efMarek Olšák{ 331a471d268ec2a6d22a02f3e9d109b792659dbe7efMarek Olšák struct galahad_screen *glhd_screen = galahad_screen(_screen); 332a471d268ec2a6d22a02f3e9d109b792659dbe7efMarek Olšák struct pipe_screen *screen = glhd_screen->screen; 333a471d268ec2a6d22a02f3e9d109b792659dbe7efMarek Olšák 334a471d268ec2a6d22a02f3e9d109b792659dbe7efMarek Olšák return screen->get_timestamp(screen); 335a471d268ec2a6d22a02f3e9d109b792659dbe7efMarek Olšák} 336a471d268ec2a6d22a02f3e9d109b792659dbe7efMarek Olšák 337d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsonstruct pipe_screen * 338d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpsongalahad_screen_create(struct pipe_screen *screen) 339d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson{ 340d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson struct galahad_screen *glhd_screen; 341d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 342d12c4c5a62dbf5e32f989c8ef53a5a878cc5c0a2Jakob Bornecrantz if (!debug_get_option_galahad()) 343d12c4c5a62dbf5e32f989c8ef53a5a878cc5c0a2Jakob Bornecrantz return screen; 344d12c4c5a62dbf5e32f989c8ef53a5a878cc5c0a2Jakob Bornecrantz 345d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson glhd_screen = CALLOC_STRUCT(galahad_screen); 346d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson if (!glhd_screen) { 347d12c4c5a62dbf5e32f989c8ef53a5a878cc5c0a2Jakob Bornecrantz return screen; 348d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson } 349d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 3507bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca#define GLHD_SCREEN_INIT(_member) \ 3517bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca glhd_screen->base . _member = screen -> _member ? galahad_screen_ ## _member : NULL 3527bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca 3537bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca GLHD_SCREEN_INIT(destroy); 3547bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca GLHD_SCREEN_INIT(get_name); 3557bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca GLHD_SCREEN_INIT(get_vendor); 3567bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca GLHD_SCREEN_INIT(get_param); 3577bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca GLHD_SCREEN_INIT(get_shader_param); 3587bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca //GLHD_SCREEN_INIT(get_video_param); 3597bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca //GLHD_SCREEN_INIT(get_compute_param); 3607bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca GLHD_SCREEN_INIT(get_paramf); 3617bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca GLHD_SCREEN_INIT(is_format_supported); 3627bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca //GLHD_SCREEN_INIT(is_video_format_supported); 3637bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca GLHD_SCREEN_INIT(context_create); 3647bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca GLHD_SCREEN_INIT(resource_create); 3657bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca GLHD_SCREEN_INIT(resource_from_handle); 3667bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca GLHD_SCREEN_INIT(resource_get_handle); 3677bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca GLHD_SCREEN_INIT(resource_destroy); 3687bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca GLHD_SCREEN_INIT(flush_frontbuffer); 3697bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca GLHD_SCREEN_INIT(fence_reference); 3707bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca GLHD_SCREEN_INIT(fence_signalled); 3717bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca GLHD_SCREEN_INIT(fence_finish); 372a471d268ec2a6d22a02f3e9d109b792659dbe7efMarek Olšák GLHD_SCREEN_INIT(get_timestamp); 3737bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca 3747bd926af8935f66e3a0e5c7d662c4ea6f30a54c6José Fonseca#undef GLHD_SCREEN_INIT 375d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 376d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson glhd_screen->screen = screen; 377d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson 378d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson return &glhd_screen->base; 379d3ad6fa579d89d8c3ee27882d5baf8f8d2ecb3eaCorbin Simpson} 380