i915: Add render and texture support for tiled texture and buffers

This is step towards tiled textures and buffer support for
	i915. But the tiled attribute is never set.
This commit is contained in:
Jakob Bornecrantz 2008-06-23 17:57:45 +02:00
parent a479bf6235
commit f52ab4cc22
4 changed files with 16 additions and 7 deletions

View file

@ -192,6 +192,8 @@ struct i915_texture {
unsigned depth_pitch; /* per-image on i945? */
unsigned total_height;
unsigned tiled;
unsigned nr_images[PIPE_MAX_TEXTURE_LEVELS];
/* Explicitly store the offset of each image for each cube face or

View file

@ -213,10 +213,10 @@ i915_emit_hardware_state(struct i915_context *i915 )
if (cbuf_surface) {
unsigned cpitch = (cbuf_surface->pitch * cbuf_surface->cpp);
unsigned ctile = BUF_3D_USE_FENCE;
#if 0
if (!((cpitch - 1) & cpitch) && cpitch >= 512)
if (cbuf_surface->texture &&
((struct i915_texture*)(cbuf_surface->texture))->tiled) {
ctile = BUF_3D_TILED_SURFACE;
#endif
}
OUT_BATCH(_3DSTATE_BUF_INFO_CMD);
@ -234,10 +234,10 @@ i915_emit_hardware_state(struct i915_context *i915 )
if (depth_surface) {
unsigned zpitch = (depth_surface->pitch * depth_surface->cpp);
unsigned ztile = BUF_3D_USE_FENCE;
#if 0
if (!((zpitch - 1) & zpitch) && zpitch >= 512)
if (depth_surface->texture &&
((struct i915_texture*)(depth_surface->texture))->tiled) {
ztile = BUF_3D_TILED_SURFACE;
#endif
}
OUT_BATCH(_3DSTATE_BUF_INFO_CMD);

View file

@ -234,6 +234,7 @@ i915_update_texture(struct i915_context *i915,
const uint width = pt->width[0], height = pt->height[0], depth = pt->depth[0];
const uint num_levels = pt->last_level;
unsigned max_lod = num_levels * 4;
unsigned tiled = MS3_USE_FENCE_REGS;
assert(tex);
assert(width);
@ -246,12 +247,17 @@ i915_update_texture(struct i915_context *i915,
assert(format);
assert(pitch);
if (tex->tiled) {
assert(!((pitch - 1) & pitch));
tiled = MS3_TILED_SURFACE;
}
/* MS3 state */
state[0] =
(((height - 1) << MS3_HEIGHT_SHIFT)
| ((width - 1) << MS3_WIDTH_SHIFT)
| format
| MS3_USE_FENCE_REGS);
| tiled);
/*
* XXX When min_filter != mag_filter and there's just one mipmap level,

View file

@ -174,6 +174,7 @@ i915_displaytarget_layout(struct i915_texture *tex)
if (tex->base.width[0] >= 128) {
tex->pitch = power_of_two(tex->base.width[0] * pt->cpp) / pt->cpp;
tex->total_height = round_up(tex->base.height[0], 8);
tex->tiled = 1;
} else {
tex->pitch = round_up(tex->base.width[0], 64 / pt->cpp);
tex->total_height = tex->base.height[0];