From: Nanley Chery Date: Wed, 2 Nov 2016 23:18:44 +0000 (-0700) Subject: anv/blorp: Don't create linear ASTC surfaces for buffers X-Git-Tag: upstream/17.1.0~4997 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1625d911d7368a9a96411012c69512074a3ff506;p=platform%2Fupstream%2Fmesa.git anv/blorp: Don't create linear ASTC surfaces for buffers Such a surface is not possible on our hardware. Without this change, ISL surface creation would fail with the next patch. Signed-off-by: Nanley Chery Reviewed-by: Jason Ekstrand --- diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c index 87f242c..0feb5d5 100644 --- a/src/intel/vulkan/anv_blorp.c +++ b/src/intel/vulkan/anv_blorp.c @@ -126,6 +126,22 @@ get_blorp_surf_for_anv_buffer(struct anv_device *device, struct blorp_surf *blorp_surf, struct isl_surf *isl_surf) { + const struct isl_format_layout *fmtl = + isl_format_get_layout(format); + + /* ASTC is the only format which doesn't support linear layouts. + * Create an equivalently sized surface with ISL to get around this. + */ + if (fmtl->txc == ISL_TXC_ASTC) { + /* Use an equivalently sized format */ + format = ISL_FORMAT_R32G32B32A32_UINT; + assert(fmtl->bpb == isl_format_get_layout(format)->bpb); + + /* Shrink the dimensions for the new format */ + width = DIV_ROUND_UP(width, fmtl->bw); + height = DIV_ROUND_UP(height, fmtl->bh); + } + *blorp_surf = (struct blorp_surf) { .surf = isl_surf, .addr = {