#ifndef VIRGL_RESOURCE_H
#define VIRGL_RESOURCE_H
-#include "util/u_inlines.h"
+#include "util/u_resource.h"
#include "util/u_range.h"
#include "util/list.h"
#include "util/u_transfer.h"
-#include "virgl/drm/virgl_hw.h"
+#include "virgl_hw.h"
#define VR_MAX_TEXTURE_2D_LEVELS 15
+struct winsys_handle;
struct virgl_screen;
struct virgl_context;
+
+struct virgl_resource_metadata
+{
+ unsigned long level_offset[VR_MAX_TEXTURE_2D_LEVELS];
+ unsigned stride[VR_MAX_TEXTURE_2D_LEVELS];
+ uint32_t total_size;
+};
+
struct virgl_resource {
struct u_resource u;
struct virgl_hw_res *hw_res;
struct virgl_texture {
struct virgl_resource base;
-
- unsigned long level_offset[VR_MAX_TEXTURE_2D_LEVELS];
- unsigned stride[VR_MAX_TEXTURE_2D_LEVELS];
+ struct virgl_resource_metadata metadata;
};
struct virgl_transfer {
return (struct virgl_buffer *)r;
}
+static inline struct virgl_texture *virgl_texture(struct pipe_resource *r)
+{
+ return (struct virgl_texture *)r;
+}
+
+static inline struct virgl_transfer *virgl_transfer(struct pipe_transfer *trans)
+{
+ return (struct virgl_transfer *)trans;
+}
+
struct pipe_resource *virgl_buffer_create(struct virgl_screen *vs,
const struct pipe_resource *templ);
outbind |= VIRGL_BIND_CUSTOM;
if (pbind & PIPE_BIND_SCANOUT)
outbind |= VIRGL_BIND_SCANOUT;
+ if (pbind & PIPE_BIND_SHADER_BUFFER)
+ outbind |= VIRGL_BIND_SHADER_BUFFER;
return outbind;
}