瀏覽代碼

util: Handle conversion between depth stencil formats.

tags/mesa-8.0-rc1
José Fonseca 15 年之前
父節點
當前提交
f2a2ba9c6c
共有 1 個檔案被更改,包括 44 行新增0 行删除
  1. 44
    0
      src/gallium/auxiliary/util/u_format.c

+ 44
- 0
src/gallium/auxiliary/util/u_format.c 查看文件

@@ -432,6 +432,50 @@ util_format_translate(enum pipe_format dst_format,
* TODO: Add a special case for formats that are mere swizzles of each other
*/

if (src_format_desc->colorspace == UTIL_FORMAT_COLORSPACE_ZS ||
dst_format_desc->colorspace == UTIL_FORMAT_COLORSPACE_ZS) {
float *tmp_z = NULL;
uint8_t *tmp_s = NULL;

assert(x_step == 1);
assert(y_step == 1);

if (src_format_desc->unpack_z_float &&
dst_format_desc->pack_z_float) {
tmp_z = MALLOC(width * sizeof *tmp_z);
}

if (src_format_desc->unpack_s_8uscaled &&
dst_format_desc->pack_s_8uscaled) {
tmp_s = MALLOC(width * sizeof *tmp_s);
}

while (height--) {
if (tmp_z) {
src_format_desc->unpack_z_float(tmp_z, 0, src_row, src_stride, width, 1);
dst_format_desc->pack_z_float(dst_row, dst_stride, tmp_z, 0, width, 1);
}

if (tmp_s) {
src_format_desc->unpack_s_8uscaled(tmp_s, 0, src_row, src_stride, width, 1);
dst_format_desc->pack_s_8uscaled(dst_row, dst_stride, tmp_s, 0, width, 1);
}

dst_row += dst_step;
src_row += src_step;
}

if (tmp_s) {
FREE(tmp_s);
}

if (tmp_z) {
FREE(tmp_z);
}

return;
}

if (util_format_fits_8unorm(src_format_desc) ||
util_format_fits_8unorm(dst_format_desc)) {
unsigned tmp_stride;

Loading…
取消
儲存