virgl: move texture metadata to common code
[mesa.git] / src / gallium / drivers / virgl / virgl_resource.h
index b80545e4760ce59ae145279b02062f1e7f4484c6..100e35922c896f06db1f1f88b3c5363a25f84db0 100644 (file)
 #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;
@@ -59,9 +68,7 @@ struct virgl_buffer {
 
 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 {
@@ -94,6 +101,16 @@ static inline struct virgl_buffer *virgl_buffer(struct pipe_resource *r)
    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);
 
@@ -122,6 +139,8 @@ static inline unsigned pipe_to_virgl_bind(unsigned pbind)
       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;
 }