i965: Set render_cache_read_write surface state bit on gen6 constant surfs.
authorEric Anholt <eric@anholt.net>
Thu, 9 Dec 2010 18:03:49 +0000 (10:03 -0800)
committerEric Anholt <eric@anholt.net>
Thu, 9 Dec 2010 19:11:04 +0000 (11:11 -0800)
This is said to be required in the spec, even when you aren't doing writes.

src/mesa/drivers/dri/i965/brw_structs.h
src/mesa/drivers/dri/i965/brw_wm_surface_state.c

index 0e1f3c9bb89324bc95298c68819f98fa580a38ee..d341187c1b9d9eb8c71700a1d70be04b65226ca3 100644 (file)
@@ -1179,6 +1179,11 @@ struct brw_surface_state
       GLuint cube_pos_x:1; 
       GLuint cube_neg_x:1; 
       GLuint pad:4;
+      /* Required on gen6 for surfaces accessed through render cache messages.
+       */
+      GLuint render_cache_read_write:1;
+      /* Ironlake and newer: instead of replicating one of the texels */
+      GLuint cube_corner_average:1;
       GLuint mipmap_layout_mode:1; 
       GLuint vert_line_stride_ofs:1; 
       GLuint vert_line_stride:1; 
index 76fc94df1f6bbcaaec3652c11950fa97a7696ffb..fb0e34e94f565b27c93bac66668639d46970c4e1 100644 (file)
@@ -274,6 +274,7 @@ brw_create_constant_surface(struct brw_context *brw,
                            drm_intel_bo **out_bo,
                            uint32_t *out_offset)
 {
+   struct intel_context *intel = &brw->intel;
    const GLint w = width - 1;
    struct brw_surface_state surf;
    void *map;
@@ -284,6 +285,9 @@ brw_create_constant_surface(struct brw_context *brw,
    surf.ss0.surface_type = BRW_SURFACE_BUFFER;
    surf.ss0.surface_format = BRW_SURFACEFORMAT_R32G32B32A32_FLOAT;
 
+   if (intel->gen >= 6)
+      surf.ss0.render_cache_read_write = 1;
+
    assert(bo);
    surf.ss1.base_addr = bo->offset; /* reloc */