i965g: add some missing texture creation code
authorKeith Whitwell <keithw@vmware.com>
Wed, 4 Nov 2009 16:42:44 +0000 (16:42 +0000)
committerKeith Whitwell <keithw@vmware.com>
Wed, 4 Nov 2009 16:42:44 +0000 (16:42 +0000)
src/gallium/drivers/i965/brw_context.c
src/gallium/drivers/i965/brw_screen_texture.c

index 30cc243255ba29abe15f512f13c01d0ec1be710e..0692412b3231cb46f27abb61a6041e5f9c440ff1 100644 (file)
@@ -107,6 +107,7 @@ struct pipe_context *brw_create_context(struct pipe_screen *screen)
    //ctx->Shader.EmitCondCodes = GL_TRUE;
    //ctx->Shader.EmitNVTempInitialization = GL_TRUE;
 
+   brw->base.screen = screen;
    brw->base.destroy = brw_destroy_context;
 
    brw_pipe_blend_init( brw );
index 48b3451bfc40b5aa8ec7176f5b3001da8fbcef94..fe3e57da908112549496fcf0782b7635c2df4dc3 100644 (file)
@@ -30,6 +30,7 @@
   */
 
 #include "util/u_memory.h"
+#include "util/u_simple_list.h"
 
 #include "brw_screen.h"
 #include "brw_defines.h"
@@ -190,8 +191,18 @@ static struct pipe_texture *brw_texture_create( struct pipe_screen *screen,
    if (tex == NULL)
       return NULL;
 
+   memcpy(&tex->base, templ, sizeof *templ);
+   pipe_reference_init(&tex->base.reference, 1);
+   tex->base.screen = screen;
+
+   /* XXX: compressed textures need special treatment here
+    */
+   tex->cpp = pf_get_size(tex->base.format);
    tex->compressed = pf_is_compressed(tex->base.format);
 
+   make_empty_list(&tex->views[0]);
+   make_empty_list(&tex->views[1]);
+
    /* XXX: No tiling with compressed textures??
     */
    if (tex->compressed == 0 
@@ -209,11 +220,30 @@ static struct pipe_texture *brw_texture_create( struct pipe_screen *screen,
    }
 
 
-   memcpy(&tex->base, templ, sizeof *templ);
+
 
    if (!brw_texture_layout( bscreen, tex ))
       goto fail;
 
+   
+   if (templ->tex_usage & PIPE_TEXTURE_USAGE_RENDER_TARGET) {
+   } 
+   else if (templ->tex_usage & (PIPE_TEXTURE_USAGE_DISPLAY_TARGET |
+                            PIPE_TEXTURE_USAGE_PRIMARY)) {
+   }
+   else if (templ->tex_usage & PIPE_TEXTURE_USAGE_DEPTH_STENCIL) {
+   }
+   else if (templ->tex_usage & PIPE_TEXTURE_USAGE_SAMPLER) {
+   }
+   
+   if (templ->tex_usage & PIPE_TEXTURE_USAGE_DYNAMIC) {
+   }
+
+   tex->bo = bscreen->sws->bo_alloc( bscreen->sws,
+                                     BRW_USAGE_SAMPLER,
+                                     tex->pitch * tex->total_height * tex->cpp,
+                                     64 );
+
    tex->ss.ss0.mipmap_layout_mode = BRW_SURFACE_MIPMAPLAYOUT_BELOW;
    tex->ss.ss0.surface_type = translate_tex_target(tex->base.target);
    tex->ss.ss0.surface_format = translate_tex_format(tex->base.format);