Esempio n. 1
0
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);
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
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);
}
Esempio n. 6
0
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);
}
Esempio n. 7
0
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);
}
Esempio n. 8
0
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);
}
Esempio n. 9
0
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;
}
Esempio n. 10
0
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);
}
Esempio n. 11
0
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);
}
Esempio n. 12
0
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) {
Esempio n. 13
0
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;
}
Esempio n. 14
0
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);
}
Esempio n. 15
0
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;
}