#include "rbug_context.h"
#include "rbug_objects.h"
-DEBUG_GET_ONCE_BOOL_OPTION(rbug, "GALLIUM_RBUG", FALSE)
+DEBUG_GET_ONCE_BOOL_OPTION(rbug, "GALLIUM_RBUG", false)
static void
rbug_screen_destroy(struct pipe_screen *_screen)
param);
}
-static boolean
+static bool
rbug_screen_is_format_supported(struct pipe_screen *_screen,
enum pipe_format format,
enum pipe_texture_target target,
tex_usage);
}
+static void
+rbug_screen_query_dmabuf_modifiers(struct pipe_screen *_screen,
+ enum pipe_format format, int max,
+ uint64_t *modifiers,
+ unsigned int *external_only, int *count)
+{
+ struct rbug_screen *rb_screen = rbug_screen(_screen);
+ struct pipe_screen *screen = rb_screen->screen;
+
+ screen->query_dmabuf_modifiers(screen,
+ format,
+ max,
+ modifiers,
+ external_only,
+ count);
+}
+
static struct pipe_context *
rbug_screen_context_create(struct pipe_screen *_screen,
void *priv, unsigned flags)
return NULL;
}
+static bool
+rbug_screen_can_create_resource(struct pipe_screen *_screen,
+ const struct pipe_resource *templat)
+{
+ struct rbug_screen *rb_screen = rbug_screen(_screen);
+ struct pipe_screen *screen = rb_screen->screen;
+
+ return screen->can_create_resource(screen,
+ templat);
+}
+
static struct pipe_resource *
rbug_screen_resource_create(struct pipe_screen *_screen,
const struct pipe_resource *templat)
return NULL;
}
+static struct pipe_resource *
+rbug_screen_resource_create_with_modifiers(struct pipe_screen *_screen,
+ const struct pipe_resource *templat,
+ const uint64_t *modifiers, int count)
+{
+ struct rbug_screen *rb_screen = rbug_screen(_screen);
+ struct pipe_screen *screen = rb_screen->screen;
+ struct pipe_resource *result;
+
+ result = screen->resource_create_with_modifiers(screen,
+ templat,
+ modifiers,
+ count);
+
+ if (result)
+ return rbug_resource_create(rb_screen, result);
+ return NULL;
+}
+
static struct pipe_resource *
rbug_screen_resource_from_handle(struct pipe_screen *_screen,
const struct pipe_resource *templ,
return screen->check_resource_capability(screen, resource, bind);
}
-static boolean
+static bool
rbug_screen_resource_get_handle(struct pipe_screen *_screen,
struct pipe_context *_pipe,
struct pipe_resource *_resource,
resource, handle, usage);
}
+static bool
+rbug_screen_resource_get_param(struct pipe_screen *_screen,
+ struct pipe_context *_pipe,
+ struct pipe_resource *_resource,
+ unsigned plane,
+ unsigned layer,
+ enum pipe_resource_param param,
+ unsigned handle_usage,
+ uint64_t *value)
+{
+ struct rbug_screen *rb_screen = rbug_screen(_screen);
+ struct rbug_context *rb_pipe = rbug_context(_pipe);
+ struct rbug_resource *rb_resource = rbug_resource(_resource);
+ struct pipe_screen *screen = rb_screen->screen;
+ struct pipe_resource *resource = rb_resource->resource;
+
+ return screen->resource_get_param(screen, rb_pipe ? rb_pipe->pipe : NULL,
+ resource, plane, layer, param,
+ handle_usage, value);
+}
+
+
static void
rbug_screen_resource_get_info(struct pipe_screen *_screen,
struct pipe_resource *_resource,
struct pipe_screen *screen = rb_screen->screen;
struct pipe_resource *resource = rb_resource->resource;
- if (screen->resource_changed)
- screen->resource_changed(screen, resource);
+ screen->resource_changed(screen, resource);
}
static void
fence);
}
-static boolean
+static bool
rbug_screen_fence_finish(struct pipe_screen *_screen,
struct pipe_context *_ctx,
struct pipe_fence_handle *fence,
return screen->fence_finish(screen, ctx, fence, timeout);
}
-boolean
+static int
+rbug_screen_fence_get_fd(struct pipe_screen *_screen,
+ struct pipe_fence_handle *fence)
+{
+ struct rbug_screen *rb_screen = rbug_screen(_screen);
+ struct pipe_screen *screen = rb_screen->screen;
+
+ return screen->fence_get_fd(screen, fence);
+}
+
+bool
rbug_enabled()
{
return debug_get_option_rbug();
rb_screen->base.get_shader_param = rbug_screen_get_shader_param;
rb_screen->base.get_paramf = rbug_screen_get_paramf;
rb_screen->base.is_format_supported = rbug_screen_is_format_supported;
+ SCR_INIT(query_dmabuf_modifiers);
rb_screen->base.context_create = rbug_screen_context_create;
+ SCR_INIT(can_create_resource);
rb_screen->base.resource_create = rbug_screen_resource_create;
+ SCR_INIT(resource_create_with_modifiers);
rb_screen->base.resource_from_handle = rbug_screen_resource_from_handle;
SCR_INIT(check_resource_capability);
rb_screen->base.resource_get_handle = rbug_screen_resource_get_handle;
+ SCR_INIT(resource_get_param);
SCR_INIT(resource_get_info);
SCR_INIT(resource_changed);
rb_screen->base.resource_destroy = rbug_screen_resource_destroy;
rb_screen->base.flush_frontbuffer = rbug_screen_flush_frontbuffer;
rb_screen->base.fence_reference = rbug_screen_fence_reference;
rb_screen->base.fence_finish = rbug_screen_fence_finish;
+ rb_screen->base.fence_get_fd = rbug_screen_fence_get_fd;
rb_screen->screen = screen;