st/dri: Use depth instead of bpp when communicating formats with the X server v3
Some hardware can't reinterpret the format of hardware buffers and thus the X server needs to know the format when the buffer is created. Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com> Reviewed-by: Michel Daenzer <michel@daenzer.net> Reviewed-by: Jakob Bornecrantz <jakob@vmware.com>
This commit is contained in:
parent
6781fd05e9
commit
576161289d
|
@ -104,7 +104,7 @@ dri2_drawable_get_buffers(struct dri_drawable *drawable,
|
||||||
for (i = 0; i < *count; i++) {
|
for (i = 0; i < *count; i++) {
|
||||||
enum pipe_format format;
|
enum pipe_format format;
|
||||||
unsigned bind;
|
unsigned bind;
|
||||||
int att, bpp;
|
int att, depth;
|
||||||
|
|
||||||
dri_drawable_get_format(drawable, statts[i], &format, &bind);
|
dri_drawable_get_format(drawable, statts[i], &format, &bind);
|
||||||
if (format == PIPE_FORMAT_NONE)
|
if (format == PIPE_FORMAT_NONE)
|
||||||
|
@ -134,12 +134,47 @@ dri2_drawable_get_buffers(struct dri_drawable *drawable,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
bpp = util_format_get_blocksizebits(format);
|
/*
|
||||||
|
* In this switch statement we must support all formats that
|
||||||
|
* may occur as the stvis->color_format or
|
||||||
|
* stvis->depth_stencil_format.
|
||||||
|
*/
|
||||||
|
switch(format) {
|
||||||
|
case PIPE_FORMAT_B8G8R8A8_UNORM:
|
||||||
|
depth = 32;
|
||||||
|
break;
|
||||||
|
case PIPE_FORMAT_B8G8R8X8_UNORM:
|
||||||
|
depth = 24;
|
||||||
|
break;
|
||||||
|
case PIPE_FORMAT_B5G6R5_UNORM:
|
||||||
|
depth = 16;
|
||||||
|
break;
|
||||||
|
case PIPE_FORMAT_Z16_UNORM:
|
||||||
|
att = __DRI_BUFFER_DEPTH;
|
||||||
|
depth = 16;
|
||||||
|
break;
|
||||||
|
case PIPE_FORMAT_Z24X8_UNORM:
|
||||||
|
case PIPE_FORMAT_X8Z24_UNORM:
|
||||||
|
att = __DRI_BUFFER_DEPTH;
|
||||||
|
depth = 24;
|
||||||
|
break;
|
||||||
|
case PIPE_FORMAT_Z24_UNORM_S8_UINT:
|
||||||
|
case PIPE_FORMAT_S8_UINT_Z24_UNORM:
|
||||||
|
depth = 32;
|
||||||
|
break;
|
||||||
|
case PIPE_FORMAT_Z32_UNORM:
|
||||||
|
att = __DRI_BUFFER_DEPTH;
|
||||||
|
depth = 32;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
depth = util_format_get_blocksizebits(format);
|
||||||
|
assert(!"Unexpected format in dri2_drawable_get_buffers()");
|
||||||
|
}
|
||||||
|
|
||||||
if (att >= 0) {
|
if (att >= 0) {
|
||||||
attachments[num_attachments++] = att;
|
attachments[num_attachments++] = att;
|
||||||
if (with_format) {
|
if (with_format) {
|
||||||
attachments[num_attachments++] = bpp;
|
attachments[num_attachments++] = depth;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue