r300g: use format from pipe_surface instead of pipe_resource
authorMarek Olšák <maraeo@gmail.com>
Thu, 10 Feb 2011 01:11:38 +0000 (02:11 +0100)
committerMarek Olšák <maraeo@gmail.com>
Thu, 10 Feb 2011 01:11:38 +0000 (02:11 +0100)
src/gallium/drivers/r300/r300_context.h
src/gallium/drivers/r300/r300_texture.c

index 1737dafc6ac940957b054c62e5faf0d7e3d53fe7..316af64e6de4bb6a23dc2f0061717fb9f9fd2831 100644 (file)
@@ -188,11 +188,6 @@ struct r300_sampler_view {
     uint32_t texcache_region;
 };
 
-struct r300_texture_fb_state {
-    uint32_t pitch[R300_MAX_TEXTURE_LEVELS]; /* COLORPITCH or DEPTHPITCH. */
-    uint32_t format; /* US_OUT_FMT or R300_ZB_FORMAT */
-};
-
 struct r300_texture_sampler_state {
     struct r300_texture_format_state format;
     uint32_t filter0;      /* R300_TX_FILTER0: 0x4400 */
@@ -405,8 +400,6 @@ struct r300_texture {
     /* Registers carrying texture format data. */
     /* Only format-independent bits should be filled in. */
     struct r300_texture_format_state tx_format;
-    /* All bits should be filled in. */
-    struct r300_texture_fb_state fb_state;
 
     /* hyper-z memory allocs */
     struct mem_block *hiz_mem[R300_MAX_TEXTURE_LEVELS];
index e96d340d569449be0f9c785ce5b106be3c65222e..059c194e53fed26e974c2fe841b6795c5494444f 100644 (file)
@@ -656,29 +656,25 @@ void r300_texture_setup_format_state(struct r300_screen *screen,
                        R300_TXO_MICRO_TILE(desc->microtile);
 }
 
-static void r300_texture_setup_fb_state(struct r300_screen* screen,
-                                        struct r300_texture* tex)
+static void r300_texture_setup_fb_state(struct r300_surface *surf)
 {
-    unsigned i;
+    struct r300_texture *tex = r300_texture(surf->base.texture);
+    unsigned level = surf->base.u.tex.level;
 
     /* Set framebuffer state. */
-    if (util_format_is_depth_or_stencil(tex->desc.b.b.format)) {
-        for (i = 0; i <= tex->desc.b.b.last_level; i++) {
-            tex->fb_state.pitch[i] =
-                tex->desc.stride_in_pixels[i] |
-                R300_DEPTHMACROTILE(tex->desc.macrotile[i]) |
+    if (util_format_is_depth_or_stencil(surf->base.format)) {
+        surf->pitch =
+                tex->desc.stride_in_pixels[level] |
+                R300_DEPTHMACROTILE(tex->desc.macrotile[level]) |
                 R300_DEPTHMICROTILE(tex->desc.microtile);
-        }
-        tex->fb_state.format = r300_translate_zsformat(tex->desc.b.b.format);
+        surf->format = r300_translate_zsformat(surf->base.format);
     } else {
-        for (i = 0; i <= tex->desc.b.b.last_level; i++) {
-            tex->fb_state.pitch[i] =
-                tex->desc.stride_in_pixels[i] |
-                r300_translate_colorformat(tex->desc.b.b.format) |
-                R300_COLOR_TILE(tex->desc.macrotile[i]) |
+        surf->pitch =
+                tex->desc.stride_in_pixels[level] |
+                r300_translate_colorformat(surf->base.format) |
+                R300_COLOR_TILE(tex->desc.macrotile[level]) |
                 R300_COLOR_MICROTILE(tex->desc.microtile);
-        }
-        tex->fb_state.format = r300_translate_out_fmt(tex->desc.b.b.format);
+        surf->format = r300_translate_out_fmt(surf->base.format);
     }
 }
 
@@ -694,8 +690,6 @@ void r300_texture_reinterpret_format(struct pipe_screen *screen,
         util_format_short_name(new_format));
 
     tex->format = new_format;
-
-    r300_texture_setup_fb_state(r300_screen(screen), r300_texture(tex));
 }
 
 static unsigned r300_texture_is_referenced(struct pipe_context *context,
@@ -786,7 +780,6 @@ r300_texture_create_object(struct r300_screen *rscreen,
     }
     /* Initialize the hardware state. */
     r300_texture_setup_format_state(rscreen, &tex->desc, 0, &tex->tx_format);
-    r300_texture_setup_fb_state(rscreen, tex);
 
     tex->desc.b.vtbl = &r300_texture_vtbl;
     pipe_reference_init(&tex->desc.b.b.reference, 1);
@@ -916,8 +909,7 @@ struct pipe_surface* r300_create_surface(struct pipe_context * ctx,
 
         surface->offset = r300_texture_get_offset(&tex->desc, level,
                                                   surf_tmpl->u.tex.first_layer);
-        surface->pitch = tex->fb_state.pitch[level];
-        surface->format = tex->fb_state.format;
+        r300_texture_setup_fb_state(surface);
 
         /* Parameters for the CBZB clear. */
         surface->cbzb_allowed = tex->desc.cbzb_allowed[level];