i915g: Fix depth texture formats.

Depth compare still looks broken though.
This commit is contained in:
Stéphane Marchesin 2011-06-26 19:17:04 -07:00
parent a8ebc5400e
commit b13865e694

View file

@ -62,6 +62,7 @@ static void update_map(struct i915_context *i915,
uint unit,
const struct i915_texture *tex,
const struct i915_sampler_state *sampler,
const struct pipe_sampler_view* view,
uint state[2]);
@ -161,9 +162,10 @@ static void update_samplers(struct i915_context *i915)
i915->current.sampler[unit]); /* the result */
update_map(i915,
unit,
texture, /* texture */
i915->sampler[unit], /* sampler state */
i915->current.texbuffer[unit]); /* the result */
texture, /* texture */
i915->sampler[unit], /* sampler state */
i915->fragment_sampler_views[unit], /* sampler view */
i915->current.texbuffer[unit]); /* the result */
i915->current.sampler_enable_nr++;
i915->current.sampler_enable_flags |= (1 << unit);
@ -180,13 +182,21 @@ struct i915_tracked_state i915_hw_samplers = {
};
/***********************************************************************
* Sampler views
*/
static uint translate_texture_format(enum pipe_format pipeFormat)
static uint translate_texture_format(enum pipe_format pipeFormat,
const struct pipe_sampler_view* view)
{
if ( (view->swizzle_r != PIPE_SWIZZLE_RED ||
view->swizzle_g != PIPE_SWIZZLE_GREEN ||
view->swizzle_b != PIPE_SWIZZLE_BLUE ||
view->swizzle_a != PIPE_SWIZZLE_ALPHA ) &&
pipeFormat != PIPE_FORMAT_Z24_UNORM_S8_USCALED &&
pipeFormat != PIPE_FORMAT_Z24X8_UNORM )
debug_printf("i915: unsupported texture swizzle for format %d\n", pipeFormat);
switch (pipeFormat) {
case PIPE_FORMAT_L8_UNORM:
return MAPSURF_8BIT | MT_8BIT_L8;
@ -230,7 +240,25 @@ static uint translate_texture_format(enum pipe_format pipeFormat)
return (MAPSURF_COMPRESSED | MT_COMPRESS_DXT4_5);
case PIPE_FORMAT_Z24_UNORM_S8_USCALED:
case PIPE_FORMAT_Z24X8_UNORM:
return (MAPSURF_32BIT | MT_32BIT_xI824);
{
if ( view->swizzle_r == PIPE_SWIZZLE_RED &&
view->swizzle_g == PIPE_SWIZZLE_RED &&
view->swizzle_b == PIPE_SWIZZLE_RED &&
view->swizzle_a == PIPE_SWIZZLE_ONE)
return (MAPSURF_32BIT | MT_32BIT_xA824);
if ( view->swizzle_r == PIPE_SWIZZLE_RED &&
view->swizzle_g == PIPE_SWIZZLE_RED &&
view->swizzle_b == PIPE_SWIZZLE_RED &&
view->swizzle_a == PIPE_SWIZZLE_RED)
return (MAPSURF_32BIT | MT_32BIT_xI824);
if ( view->swizzle_r == PIPE_SWIZZLE_ZERO &&
view->swizzle_g == PIPE_SWIZZLE_ZERO &&
view->swizzle_b == PIPE_SWIZZLE_ZERO &&
view->swizzle_a == PIPE_SWIZZLE_RED)
return (MAPSURF_32BIT | MT_32BIT_xL824);
debug_printf("i915: unsupported depth swizzle\n");
return (MAPSURF_32BIT | MT_32BIT_xL824);
}
default:
debug_printf("i915: translate_texture_format() bad image format %x\n",
pipeFormat);
@ -260,6 +288,7 @@ static void update_map(struct i915_context *i915,
uint unit,
const struct i915_texture *tex,
const struct i915_sampler_state *sampler,
const struct pipe_sampler_view* view,
uint state[2])
{
const struct pipe_resource *pt = &tex->b.b;
@ -273,7 +302,7 @@ static void update_map(struct i915_context *i915,
assert(height);
assert(depth);
format = translate_texture_format(pt->format);
format = translate_texture_format(pt->format, view);
pitch = tex->stride;
assert(format);
@ -316,8 +345,9 @@ static void update_maps(struct i915_context *i915)
update_map(i915,
unit,
texture, /* texture */
i915->sampler[unit], /* sampler state */
texture, /* texture */
i915->sampler[unit], /* sampler state */
i915->fragment_sampler_views[unit], /* sampler view */
i915->current.texbuffer[unit]);
}
}