summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Whitwell <keithw@vmware.com>2009-11-04 16:42:44 +0000
committerKeith Whitwell <keithw@vmware.com>2009-11-04 16:42:44 +0000
commit99394a737a46999a2fc08915e9f1408246109c4a (patch)
treecf13e775a88bd3ffa727a9246e626b8e28c88cd7
parent5f8dde99ed62beaf1c2590515c33ed8b5076ed8d (diff)
i965g: add some missing texture creation code
-rw-r--r--src/gallium/drivers/i965/brw_context.c1
-rw-r--r--src/gallium/drivers/i965/brw_screen_texture.c32
2 files changed, 32 insertions, 1 deletions
diff --git a/src/gallium/drivers/i965/brw_context.c b/src/gallium/drivers/i965/brw_context.c
index 30cc243255b..0692412b323 100644
--- a/src/gallium/drivers/i965/brw_context.c
+++ b/src/gallium/drivers/i965/brw_context.c
@@ -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 );
diff --git a/src/gallium/drivers/i965/brw_screen_texture.c b/src/gallium/drivers/i965/brw_screen_texture.c
index 48b3451bfc4..fe3e57da908 100644
--- a/src/gallium/drivers/i965/brw_screen_texture.c
+++ b/src/gallium/drivers/i965/brw_screen_texture.c
@@ -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);