Revert "gallium: add flag PIPE_TRANSFER_MAP_PERMANENTLY"
[mesa.git] / src / gallium / drivers / r300 / r300_context.h
index 8a0a54cf1e97d8f58e8a2d2a9e5173b7a4401325..f32504c530adab3884e7015b567e95340a9b9c2b 100644 (file)
@@ -30,7 +30,7 @@
 #include "pipe/p_context.h"
 #include "util/u_inlines.h"
 #include "util/u_transfer.h"
-#include "util/u_vbuf_mgr.h"
+#include "util/u_vbuf.h"
 
 #include "r300_defines.h"
 #include "r300_screen.h"
@@ -78,8 +78,6 @@ struct r300_blend_color_state {
 };
 
 struct r300_clip_state {
-    struct pipe_clip_state clip;
-
     uint32_t cb[29];
 };
 
@@ -139,7 +137,7 @@ struct r300_gpu_flush {
     uint32_t cb_flush_clean[6];
 };
 
-#define RS_STATE_MAIN_SIZE 25
+#define RS_STATE_MAIN_SIZE 27
 
 struct r300_rs_state {
     /* Original rasterizer state. */
@@ -196,6 +194,10 @@ struct r300_texture_format_state {
 struct r300_sampler_view {
     struct pipe_sampler_view base;
 
+    /* For resource_copy_region. */
+    unsigned width0_override;
+    unsigned height0_override;
+
     /* Swizzles in the UTIL_FORMAT_SWIZZLE_* representation,
      * derived from base. */
     unsigned char swizzle[4];
@@ -293,14 +295,6 @@ struct r300_query {
     /* The buffer where query results are stored. */
     struct pb_buffer *buf;
     struct radeon_winsys_cs_handle *cs_buf;
-    /* The size of the buffer. */
-    unsigned buffer_size;
-    /* The domain of the buffer. */
-    enum radeon_bo_domain domain;
-
-    /* Linked list members. */
-    struct r300_query* prev;
-    struct r300_query* next;
 };
 
 struct r300_surface {
@@ -347,7 +341,6 @@ struct r300_texture_desc {
     unsigned offset_in_bytes[R300_MAX_TEXTURE_LEVELS];
 
     /* Strides for each mip-level. */
-    unsigned stride_in_pixels[R300_MAX_TEXTURE_LEVELS];
     unsigned stride_in_bytes[R300_MAX_TEXTURE_LEVELS];
 
     /* Size of one zslice or face or 2D image based on the texture target. */
@@ -357,10 +350,6 @@ struct r300_texture_desc {
      * derived from the texture properties. */
     unsigned size_in_bytes;
 
-    /* Total size of the buffer backing this texture, in bytes.
-     * It must be >= size. */
-    unsigned buffer_size_in_bytes;
-
     /**
      * If non-zero, override the natural texture layout with
      * a custom stride (in bytes).
@@ -400,7 +389,6 @@ struct r300_resource
     struct pb_buffer *buf;
     struct radeon_winsys_cs_handle *cs_buf;
     enum radeon_bo_domain domain;
-    unsigned buf_size;
 
     /* Constant buffers are in user memory. */
     uint8_t *constant_buffer;
@@ -408,13 +396,6 @@ struct r300_resource
     /* Texture description (addressing, layout, special features). */
     struct r300_texture_desc tex;
 
-    /* Registers carrying texture format data. */
-    /* Only format-independent bits should be filled in. */
-    struct r300_texture_format_state tx_format;
-
-    /* Where the texture starts in the buffer. */
-    unsigned tex_offset;
-
     /* This is the level tiling flags were last time set for.
      * It's used to prevent redundant tiling-flags changes from happening.*/
     unsigned surface_level;
@@ -425,7 +406,7 @@ struct r300_vertex_element_state {
     struct pipe_vertex_element velem[PIPE_MAX_ATTRIBS];
     unsigned format_size[PIPE_MAX_ATTRIBS];
 
-    struct u_vbuf_mgr_elements *vmgr_elements;
+    struct u_vbuf_elements *vmgr_elements;
 
     /* The size of the vertex, in dwords. */
     unsigned vertex_size_dwords;
@@ -565,8 +546,6 @@ struct r300_context {
     /* Vertex elements for Gallium. */
     struct r300_vertex_element_state *velems;
 
-    struct pipe_index_buffer index_buffer;
-
     /* Vertex info for Draw. */
     struct vertex_info vertex_info;
 
@@ -584,28 +563,14 @@ struct r300_context {
     uint32_t zbuffer_bpp;
     /* Whether rendering is conditional and should be skipped. */
     boolean skip_rendering;
+    /* The flag above saved by blitter. */
+    unsigned char blitter_saved_skip_rendering;
     /* Point sprites texcoord index,  1 bit per texcoord */
     int sprite_coord_enable;
     /* Whether two-sided color selection is enabled (AKA light_twoside). */
     boolean two_sided_color;
-    /* Whether fragment color clamping is enabled. */
-    boolean frag_clamp;
     /* Whether fast color clear is enabled. */
     boolean cbzb_clear;
-    /* Whether ZMASK is enabled. */
-    boolean zmask_in_use;
-    /* Whether ZMASK is being decompressed. */
-    boolean zmask_decompress;
-    /* Whether ZMASK/HIZ is locked, i.e. should be disabled and cannot be taken over. */
-    boolean hyperz_locked;
-    /* The zbuffer the ZMASK of which is locked. */
-    struct pipe_surface *locked_zbuffer;
-    /* Whether HIZ is enabled. */
-    boolean hiz_in_use;
-    /* HiZ function. Can be either MIN or MAX. */
-    enum r300_hiz_func hiz_func;
-    /* HiZ clear value. */
-    uint32_t hiz_clear_value;
     /* Whether fragment shader needs to be validated. */
     enum r300_fs_validity_status fs_status;
     /* Framebuffer multi-write. */
@@ -613,7 +578,7 @@ struct r300_context {
 
     void *dsa_decompress_zmask;
 
-    struct u_vbuf_mgr *vbuf_mgr;
+    struct u_vbuf *vbuf_mgr;
 
     struct util_slab_mempool pool_transfers;
 
@@ -629,6 +594,21 @@ struct r300_context {
     int vertex_arrays_offset;
     int vertex_arrays_instance_id;
     boolean instancing_enabled;
+
+    /* Hyper-Z stats. */
+    boolean hyperz_enabled;     /* Whether it owns Hyper-Z access. */
+    int64_t hyperz_time_of_last_flush; /* Time of the last flush with Z clear. */
+    unsigned num_z_clears;      /* Since the last flush. */
+
+    /* ZMask state. */
+    boolean zmask_in_use;       /* Whether ZMASK is enabled. */
+    boolean zmask_decompress;   /* Whether ZMASK is being decompressed. */
+    struct pipe_surface *locked_zbuffer; /* Unbound zbuffer which still has data in ZMASK. */
+
+    /* HiZ state. */
+    boolean hiz_in_use;         /* Whether HIZ is enabled. */
+    enum r300_hiz_func hiz_func; /* HiZ function. Can be either MIN or MAX. */
+    uint32_t hiz_clear_value;   /* HiZ clear value. */
 };
 
 #define foreach_atom(r300, atom) \
@@ -695,6 +675,7 @@ void r300_init_resource_functions(struct r300_context* r300);
 void r300_decompress_zmask(struct r300_context *r300);
 void r300_decompress_zmask_locked_unsafe(struct r300_context *r300);
 void r300_decompress_zmask_locked(struct r300_context *r300);
+bool r300_is_blit_supported(enum pipe_format format);
 
 /* r300_flush.c */
 void r300_flush(struct pipe_context *pipe,
@@ -733,6 +714,13 @@ void r300_mark_fb_state_dirty(struct r300_context *r300,
                               enum r300_fb_state_change change);
 void r300_mark_fs_code_dirty(struct r300_context *r300);
 
+struct pipe_sampler_view *
+r300_create_sampler_view_custom(struct pipe_context *pipe,
+                         struct pipe_resource *texture,
+                         const struct pipe_sampler_view *templ,
+                         unsigned width0_override,
+                         unsigned height0_override);
+
 /* r300_state_derived.c */
 void r300_update_derived_state(struct r300_context* r300);