tu: Disable GMEM for multiview inside tu_render_pass_gmem_config
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17378>
This commit is contained in:
parent
c42e7aa46c
commit
2b8b5259c7
|
@ -527,6 +527,20 @@ static void
|
||||||
tu_render_pass_gmem_config(struct tu_render_pass *pass,
|
tu_render_pass_gmem_config(struct tu_render_pass *pass,
|
||||||
const struct tu_physical_device *phys_dev)
|
const struct tu_physical_device *phys_dev)
|
||||||
{
|
{
|
||||||
|
/* From the VK_KHR_multiview spec:
|
||||||
|
*
|
||||||
|
* Multiview is all-or-nothing for a render pass - that is, either all
|
||||||
|
* subpasses must have a non-zero view mask (though some subpasses may
|
||||||
|
* have only one view) or all must be zero.
|
||||||
|
*
|
||||||
|
* This means we only have to check one of the view masks.
|
||||||
|
*/
|
||||||
|
if (pass->subpasses[0].multiview_mask) {
|
||||||
|
/* It seems multiview must use sysmem rendering. */
|
||||||
|
pass->gmem_pixels = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t block_align_shift = 3; /* log2(gmem_align/(tile_align_w*tile_align_h)) */
|
uint32_t block_align_shift = 3; /* log2(gmem_align/(tile_align_w*tile_align_h)) */
|
||||||
uint32_t tile_align_w = phys_dev->info->tile_align_w;
|
uint32_t tile_align_w = phys_dev->info->tile_align_w;
|
||||||
uint32_t gmem_align = (1 << block_align_shift) * tile_align_w * phys_dev->info->tile_align_h;
|
uint32_t gmem_align = (1 << block_align_shift) * tile_align_w * phys_dev->info->tile_align_h;
|
||||||
|
@ -869,20 +883,7 @@ tu_CreateRenderPass2(VkDevice _device,
|
||||||
(att->store || att->store_stencil) && !att->clear_mask;
|
(att->store || att->store_stencil) && !att->clear_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* From the VK_KHR_multiview spec:
|
tu_render_pass_gmem_config(pass, device->physical_device);
|
||||||
*
|
|
||||||
* Multiview is all-or-nothing for a render pass - that is, either all
|
|
||||||
* subpasses must have a non-zero view mask (though some subpasses may
|
|
||||||
* have only one view) or all must be zero.
|
|
||||||
*
|
|
||||||
* This means we only have to check one of the view masks.
|
|
||||||
*/
|
|
||||||
if (pCreateInfo->pSubpasses[0].viewMask) {
|
|
||||||
/* It seems multiview must use sysmem rendering. */
|
|
||||||
pass->gmem_pixels = 0;
|
|
||||||
} else {
|
|
||||||
tu_render_pass_gmem_config(pass, device->physical_device);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (uint32_t i = 0; i < pass->attachment_count; i++) {
|
for (uint32_t i = 0; i < pass->attachment_count; i++) {
|
||||||
const struct tu_render_pass_attachment *att = &pass->attachments[i];
|
const struct tu_render_pass_attachment *att = &pass->attachments[i];
|
||||||
|
|
Loading…
Reference in New Issue