static const char * galahad_screen_get_vendor(struct pipe_screen *_screen) { struct galahad_screen *glhd_screen = galahad_screen(_screen); struct pipe_screen *screen = glhd_screen->screen; return screen->get_vendor(screen); }
static struct pipe_resource * galahad_screen_resource_from_handle(struct pipe_screen *_screen, const struct pipe_resource *templ, struct winsys_handle *handle) { struct galahad_screen *glhd_screen = galahad_screen(_screen); struct pipe_screen *screen = glhd_screen->screen; struct pipe_resource *result; /* TODO trace call */ result = screen->resource_from_handle(screen, templ, handle); result = galahad_resource_create(galahad_screen(_screen), result); return result; }
static float galahad_screen_get_paramf(struct pipe_screen *_screen, enum pipe_capf param) { struct galahad_screen *glhd_screen = galahad_screen(_screen); struct pipe_screen *screen = glhd_screen->screen; return screen->get_paramf(screen, param); }
static int galahad_screen_get_shader_param(struct pipe_screen *_screen, unsigned shader, enum pipe_shader_cap param) { struct galahad_screen *glhd_screen = galahad_screen(_screen); struct pipe_screen *screen = glhd_screen->screen; return screen->get_shader_param(screen, shader, param); }
static void galahad_screen_destroy(struct pipe_screen *_screen) { struct galahad_screen *glhd_screen = galahad_screen(_screen); struct pipe_screen *screen = glhd_screen->screen; screen->destroy(screen); FREE(glhd_screen); }
static boolean galahad_screen_fence_signalled(struct pipe_screen *_screen, struct pipe_fence_handle *fence) { struct galahad_screen *glhd_screen = galahad_screen(_screen); struct pipe_screen *screen = glhd_screen->screen; return screen->fence_signalled(screen, fence); }
static boolean galahad_screen_fence_finish(struct pipe_screen *_screen, struct pipe_fence_handle *fence, uint64_t timeout) { struct galahad_screen *glhd_screen = galahad_screen(_screen); struct pipe_screen *screen = glhd_screen->screen; return screen->fence_finish(screen, fence, timeout); }
static void galahad_screen_fence_reference(struct pipe_screen *_screen, struct pipe_fence_handle **ptr, struct pipe_fence_handle *fence) { struct galahad_screen *glhd_screen = galahad_screen(_screen); struct pipe_screen *screen = glhd_screen->screen; screen->fence_reference(screen, ptr, fence); }
static struct pipe_context * galahad_screen_context_create(struct pipe_screen *_screen, void *priv) { struct galahad_screen *glhd_screen = galahad_screen(_screen); struct pipe_screen *screen = glhd_screen->screen; struct pipe_context *result; result = screen->context_create(screen, priv); if (result) return galahad_context_create(_screen, result); return NULL; }
static boolean galahad_screen_resource_get_handle(struct pipe_screen *_screen, struct pipe_resource *_resource, struct winsys_handle *handle) { struct galahad_screen *glhd_screen = galahad_screen(_screen); struct galahad_resource *glhd_resource = galahad_resource(_resource); struct pipe_screen *screen = glhd_screen->screen; struct pipe_resource *resource = glhd_resource->resource; /* TODO trace call */ return screen->resource_get_handle(screen, resource, handle); }
static void galahad_screen_flush_frontbuffer(struct pipe_screen *_screen, struct pipe_resource *_resource, unsigned level, unsigned layer, void *context_private) { struct galahad_screen *glhd_screen = galahad_screen(_screen); struct galahad_resource *glhd_resource = galahad_resource(_resource); struct pipe_screen *screen = glhd_screen->screen; struct pipe_resource *resource = glhd_resource->resource; screen->flush_frontbuffer(screen, resource, level, layer, context_private); }
static struct pipe_resource * galahad_screen_resource_create(struct pipe_screen *_screen, const struct pipe_resource *templat) { struct galahad_screen *glhd_screen = galahad_screen(_screen); struct pipe_screen *screen = glhd_screen->screen; struct pipe_resource *result; glhd_check("%u", templat->width0, >= 1); glhd_check("%u", templat->height0, >= 1); glhd_check("%u", templat->depth0, >= 1); glhd_check("%u", templat->array_size, >= 1); if (templat->target == PIPE_BUFFER) { glhd_check("%u", templat->last_level, == 0); glhd_check("%u", templat->height0, == 1); glhd_check("%u", templat->depth0, == 1); glhd_check("%u", templat->array_size, == 1); } else if (templat->target == PIPE_TEXTURE_1D) {
static struct pipe_resource * galahad_screen_resource_create(struct pipe_screen *_screen, const struct pipe_resource *templat) { struct galahad_screen *glhd_screen = galahad_screen(_screen); struct pipe_screen *screen = glhd_screen->screen; struct pipe_resource *result; if (templat->target >= PIPE_MAX_TEXTURE_TYPES) glhd_warn("Received bogus resource target %d", templat->target); if(templat->target != PIPE_TEXTURE_RECT && templat->target != PIPE_BUFFER && !screen->get_param(screen, PIPE_CAP_NPOT_TEXTURES)) { if(!util_is_power_of_two(templat->width0) || !util_is_power_of_two(templat->height0)) glhd_warn("Requested NPOT (%ux%u) non-rectangle texture without NPOT support", templat->width0, templat->height0); } if(templat->target == PIPE_TEXTURE_RECT && templat->last_level) glhd_warn("Rectangle textures cannot have mipmaps, but last_level = %u", templat->last_level); if(templat->target == PIPE_BUFFER && templat->last_level) glhd_warn("Buffers cannot have mipmaps, but last_level = %u", templat->last_level); if(templat->target != PIPE_TEXTURE_3D && templat->depth0 != 1) glhd_warn("Only 3D textures can have depth != 1, but received target %u and depth %u", templat->target, templat->depth0); if(templat->target == PIPE_TEXTURE_1D && templat->height0 != 1) glhd_warn("1D textures must have height 1 but got asked for height %u", templat->height0); if(templat->target == PIPE_BUFFER && templat->height0 != 1) glhd_warn("Buffers must have height 1 but got asked for height %u", templat->height0); if(templat->target == PIPE_TEXTURE_CUBE && templat->width0 != templat->height0) glhd_warn("Cube maps must be square, but got asked for %ux%u", templat->width0, templat->height0); result = screen->resource_create(screen, templat); if (result) return galahad_resource_create(glhd_screen, result); return NULL; }
static boolean galahad_screen_is_format_supported(struct pipe_screen *_screen, enum pipe_format format, enum pipe_texture_target target, unsigned sample_count, unsigned tex_usage) { struct galahad_screen *glhd_screen = galahad_screen(_screen); struct pipe_screen *screen = glhd_screen->screen; if (target >= PIPE_MAX_TEXTURE_TYPES) { glhd_warn("Received bogus texture target %d", target); } return screen->is_format_supported(screen, format, target, sample_count, tex_usage); }
struct pipe_context * galahad_context_create(struct pipe_screen *_screen, struct pipe_context *pipe) { struct galahad_context *glhd_pipe; (void)galahad_screen(_screen); glhd_pipe = CALLOC_STRUCT(galahad_context); if (!glhd_pipe) { return NULL; } glhd_pipe->base.winsys = NULL; glhd_pipe->base.screen = _screen; glhd_pipe->base.priv = pipe->priv; /* expose wrapped data */ glhd_pipe->base.draw = NULL; glhd_pipe->base.destroy = galahad_destroy; glhd_pipe->base.draw_vbo = galahad_draw_vbo; glhd_pipe->base.create_query = galahad_create_query; glhd_pipe->base.destroy_query = galahad_destroy_query; glhd_pipe->base.begin_query = galahad_begin_query; glhd_pipe->base.end_query = galahad_end_query; glhd_pipe->base.get_query_result = galahad_get_query_result; glhd_pipe->base.create_blend_state = galahad_create_blend_state; glhd_pipe->base.bind_blend_state = galahad_bind_blend_state; glhd_pipe->base.delete_blend_state = galahad_delete_blend_state; glhd_pipe->base.create_sampler_state = galahad_create_sampler_state; glhd_pipe->base.bind_fragment_sampler_states = galahad_bind_fragment_sampler_states; glhd_pipe->base.bind_vertex_sampler_states = galahad_bind_vertex_sampler_states; glhd_pipe->base.delete_sampler_state = galahad_delete_sampler_state; glhd_pipe->base.create_rasterizer_state = galahad_create_rasterizer_state; glhd_pipe->base.bind_rasterizer_state = galahad_bind_rasterizer_state; glhd_pipe->base.delete_rasterizer_state = galahad_delete_rasterizer_state; glhd_pipe->base.create_depth_stencil_alpha_state = galahad_create_depth_stencil_alpha_state; glhd_pipe->base.bind_depth_stencil_alpha_state = galahad_bind_depth_stencil_alpha_state; glhd_pipe->base.delete_depth_stencil_alpha_state = galahad_delete_depth_stencil_alpha_state; glhd_pipe->base.create_fs_state = galahad_create_fs_state; glhd_pipe->base.bind_fs_state = galahad_bind_fs_state; glhd_pipe->base.delete_fs_state = galahad_delete_fs_state; glhd_pipe->base.create_vs_state = galahad_create_vs_state; glhd_pipe->base.bind_vs_state = galahad_bind_vs_state; glhd_pipe->base.delete_vs_state = galahad_delete_vs_state; glhd_pipe->base.create_vertex_elements_state = galahad_create_vertex_elements_state; glhd_pipe->base.bind_vertex_elements_state = galahad_bind_vertex_elements_state; glhd_pipe->base.delete_vertex_elements_state = galahad_delete_vertex_elements_state; glhd_pipe->base.set_blend_color = galahad_set_blend_color; glhd_pipe->base.set_stencil_ref = galahad_set_stencil_ref; glhd_pipe->base.set_clip_state = galahad_set_clip_state; glhd_pipe->base.set_sample_mask = galahad_set_sample_mask; glhd_pipe->base.set_constant_buffer = galahad_set_constant_buffer; glhd_pipe->base.set_framebuffer_state = galahad_set_framebuffer_state; glhd_pipe->base.set_polygon_stipple = galahad_set_polygon_stipple; glhd_pipe->base.set_scissor_state = galahad_set_scissor_state; glhd_pipe->base.set_viewport_state = galahad_set_viewport_state; glhd_pipe->base.set_fragment_sampler_views = galahad_set_fragment_sampler_views; glhd_pipe->base.set_vertex_sampler_views = galahad_set_vertex_sampler_views; glhd_pipe->base.set_vertex_buffers = galahad_set_vertex_buffers; glhd_pipe->base.set_index_buffer = galahad_set_index_buffer; glhd_pipe->base.resource_copy_region = galahad_resource_copy_region; glhd_pipe->base.clear = galahad_clear; glhd_pipe->base.clear_render_target = galahad_clear_render_target; glhd_pipe->base.clear_depth_stencil = galahad_clear_depth_stencil; glhd_pipe->base.flush = galahad_flush; glhd_pipe->base.create_sampler_view = galahad_context_create_sampler_view; glhd_pipe->base.sampler_view_destroy = galahad_context_sampler_view_destroy; glhd_pipe->base.create_surface = galahad_context_create_surface; glhd_pipe->base.surface_destroy = galahad_context_surface_destroy; glhd_pipe->base.get_transfer = galahad_context_get_transfer; glhd_pipe->base.transfer_destroy = galahad_context_transfer_destroy; glhd_pipe->base.transfer_map = galahad_context_transfer_map; glhd_pipe->base.transfer_unmap = galahad_context_transfer_unmap; glhd_pipe->base.transfer_flush_region = galahad_context_transfer_flush_region; glhd_pipe->base.transfer_inline_write = galahad_context_transfer_inline_write; glhd_pipe->base.redefine_user_buffer = galahad_redefine_user_buffer; glhd_pipe->pipe = pipe; glhd_warn("Created context %p", (void *) glhd_pipe); return &glhd_pipe->base; }
struct pipe_context * galahad_context_create(struct pipe_screen *_screen, struct pipe_context *pipe) { struct galahad_context *glhd_pipe; (void)galahad_screen(_screen); glhd_pipe = CALLOC_STRUCT(galahad_context); if (!glhd_pipe) { return NULL; } glhd_pipe->base.screen = _screen; glhd_pipe->base.priv = pipe->priv; /* expose wrapped data */ glhd_pipe->base.draw = NULL; glhd_pipe->base.destroy = galahad_context_destroy; #define GLHD_PIPE_INIT(_member) \ glhd_pipe->base . _member = pipe -> _member ? galahad_context_ ## _member : NULL GLHD_PIPE_INIT(draw_vbo); GLHD_PIPE_INIT(render_condition); GLHD_PIPE_INIT(create_query); GLHD_PIPE_INIT(destroy_query); GLHD_PIPE_INIT(begin_query); GLHD_PIPE_INIT(end_query); GLHD_PIPE_INIT(get_query_result); GLHD_PIPE_INIT(create_blend_state); GLHD_PIPE_INIT(bind_blend_state); GLHD_PIPE_INIT(delete_blend_state); GLHD_PIPE_INIT(create_sampler_state); GLHD_PIPE_INIT(bind_fragment_sampler_states); GLHD_PIPE_INIT(bind_vertex_sampler_states); //GLHD_PIPE_INIT(bind_geometry_sampler_states); //GLHD_PIPE_INIT(bind_compute_sampler_states); GLHD_PIPE_INIT(delete_sampler_state); GLHD_PIPE_INIT(create_rasterizer_state); GLHD_PIPE_INIT(bind_rasterizer_state); GLHD_PIPE_INIT(delete_rasterizer_state); GLHD_PIPE_INIT(create_depth_stencil_alpha_state); GLHD_PIPE_INIT(bind_depth_stencil_alpha_state); GLHD_PIPE_INIT(delete_depth_stencil_alpha_state); GLHD_PIPE_INIT(create_fs_state); GLHD_PIPE_INIT(bind_fs_state); GLHD_PIPE_INIT(delete_fs_state); GLHD_PIPE_INIT(create_vs_state); GLHD_PIPE_INIT(bind_vs_state); GLHD_PIPE_INIT(delete_vs_state); //GLHD_PIPE_INIT(create_gs_state); //GLHD_PIPE_INIT(bind_gs_state); //GLHD_PIPE_INIT(delete_gs_state); GLHD_PIPE_INIT(create_vertex_elements_state); GLHD_PIPE_INIT(bind_vertex_elements_state); GLHD_PIPE_INIT(delete_vertex_elements_state); GLHD_PIPE_INIT(set_blend_color); GLHD_PIPE_INIT(set_stencil_ref); GLHD_PIPE_INIT(set_sample_mask); GLHD_PIPE_INIT(set_clip_state); GLHD_PIPE_INIT(set_constant_buffer); GLHD_PIPE_INIT(set_framebuffer_state); GLHD_PIPE_INIT(set_polygon_stipple); GLHD_PIPE_INIT(set_scissor_state); GLHD_PIPE_INIT(set_viewport_state); GLHD_PIPE_INIT(set_fragment_sampler_views); GLHD_PIPE_INIT(set_vertex_sampler_views); //GLHD_PIPE_INIT(set_geometry_sampler_views); //GLHD_PIPE_INIT(set_compute_sampler_views); //GLHD_PIPE_INIT(set_shader_resources); GLHD_PIPE_INIT(set_vertex_buffers); GLHD_PIPE_INIT(set_index_buffer); //GLHD_PIPE_INIT(create_stream_output_target); //GLHD_PIPE_INIT(stream_output_target_destroy); //GLHD_PIPE_INIT(set_stream_output_targets); GLHD_PIPE_INIT(resource_copy_region); //GLHD_PIPE_INIT(resource_resolve); GLHD_PIPE_INIT(clear); GLHD_PIPE_INIT(clear_render_target); GLHD_PIPE_INIT(clear_depth_stencil); GLHD_PIPE_INIT(flush); GLHD_PIPE_INIT(create_sampler_view); GLHD_PIPE_INIT(sampler_view_destroy); GLHD_PIPE_INIT(create_surface); GLHD_PIPE_INIT(surface_destroy); GLHD_PIPE_INIT(get_transfer); GLHD_PIPE_INIT(transfer_destroy); GLHD_PIPE_INIT(transfer_map); GLHD_PIPE_INIT(transfer_flush_region); GLHD_PIPE_INIT(transfer_unmap); GLHD_PIPE_INIT(transfer_inline_write); //GLHD_PIPE_INIT(texture_barrier); //GLHD_PIPE_INIT(create_video_decoder); //GLHD_PIPE_INIT(create_video_buffer); //GLHD_PIPE_INIT(create_compute_state); //GLHD_PIPE_INIT(bind_compute_state); //GLHD_PIPE_INIT(delete_compute_state); //GLHD_PIPE_INIT(set_compute_resources); //GLHD_PIPE_INIT(set_global_binding); //GLHD_PIPE_INIT(launch_grid); #undef GLHD_PIPE_INIT glhd_pipe->pipe = pipe; return &glhd_pipe->base; }