llvmpipe: enable stencil only formats. (v2)
This fixes two bugs, one in clearing and one in sign extensions for S8 only types, and enables it for use. These are useful for vulkan support later. v2: move casting to same place as Z casting. Reviewed-by: Roland Scheidegger <sroland@vmware.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4574>
This commit is contained in:
parent
65906d1331
commit
024b5dfc1c
|
@ -599,6 +599,12 @@ lp_build_depth_stencil_load_swizzled(struct gallivm_state *gallivm,
|
|||
LLVMConstVector(shuffles, zs_type.length), "");
|
||||
*s_fb = *z_fb;
|
||||
|
||||
if (format_desc->block.bits == 8) {
|
||||
/* Extend stencil-only 8 bit values (S8_UINT) */
|
||||
*s_fb = LLVMBuildZExt(builder, *s_fb,
|
||||
lp_build_int_vec_type(gallivm, z_src_type), "");
|
||||
}
|
||||
|
||||
if (format_desc->block.bits < z_src_type.width) {
|
||||
/* Extend destination ZS values (e.g., when reading from Z16_UNORM) */
|
||||
*z_fb = LLVMBuildZExt(builder, *z_fb,
|
||||
|
|
|
@ -211,7 +211,11 @@ lp_rast_clear_zstencil(struct lp_rasterizer_task *task,
|
|||
switch (block_size) {
|
||||
case 1:
|
||||
assert(clear_mask == 0xff);
|
||||
memset(dst, (uint8_t) clear_value, height * width);
|
||||
for (i = 0; i < height; i++) {
|
||||
uint8_t *row = (uint8_t *)dst;
|
||||
memset(row, (uint8_t) clear_value, width);
|
||||
dst += dst_stride;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (clear_mask == 0xffff) {
|
||||
|
|
|
@ -733,11 +733,6 @@ llvmpipe_is_format_supported( struct pipe_screen *_screen,
|
|||
|
||||
if (format_desc->colorspace != UTIL_FORMAT_COLORSPACE_ZS)
|
||||
return false;
|
||||
|
||||
/* TODO: Support stencil-only formats */
|
||||
if (format_desc->swizzle[0] == PIPE_SWIZZLE_NONE) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (format_desc->layout == UTIL_FORMAT_LAYOUT_ASTC ||
|
||||
|
|
Loading…
Reference in New Issue