anv: fix descriptor limits on gen8
Later generations support bindless for samplers, images, and buffers and
thus per-stage descriptors are not limited by the binding table size.
However, gen8 doesn't support bindless images and thus needs to report a
lower per-stage limit so that all combinations of descriptors that fit
within the advertised limits are reported as supported by
vkGetDescriptorSetLayoutSupport.
Fixes test dEQP-VK.api.maintenance3_check.descriptor_set
Fixes: 79fb0d27f3
("anv: Implement SSBOs bindings with GPU addresses in the descriptor BO")
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
This commit is contained in:
parent
8b78cce433
commit
5ec5fecc26
|
@ -306,7 +306,7 @@ void anv_GetDescriptorSetLayoutSupport(
|
||||||
/* Our maximum binding table size is 240 and we need to reserve 8 for
|
/* Our maximum binding table size is 240 and we need to reserve 8 for
|
||||||
* render targets.
|
* render targets.
|
||||||
*/
|
*/
|
||||||
if (surface_count[s] >= MAX_BINDING_TABLE_SIZE - MAX_RTS)
|
if (surface_count[s] > MAX_BINDING_TABLE_SIZE - MAX_RTS)
|
||||||
supported = false;
|
supported = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1277,10 +1277,12 @@ void anv_GetPhysicalDeviceProperties(
|
||||||
const uint32_t max_images =
|
const uint32_t max_images =
|
||||||
pdevice->has_bindless_images ? UINT16_MAX : MAX_IMAGES;
|
pdevice->has_bindless_images ? UINT16_MAX : MAX_IMAGES;
|
||||||
|
|
||||||
/* The moment we have anything bindless, claim a high per-stage limit */
|
/* If we can use bindless for everything, claim a high per-stage limit,
|
||||||
|
* otherwise use the binding table size, minus the slots reserved for
|
||||||
|
* render targets and one slot for the descriptor buffer. */
|
||||||
const uint32_t max_per_stage =
|
const uint32_t max_per_stage =
|
||||||
pdevice->has_a64_buffer_access ? UINT32_MAX :
|
pdevice->has_bindless_images && pdevice->has_a64_buffer_access
|
||||||
MAX_BINDING_TABLE_SIZE - MAX_RTS;
|
? UINT32_MAX : MAX_BINDING_TABLE_SIZE - MAX_RTS - 1;
|
||||||
|
|
||||||
const uint32_t max_workgroup_size = 32 * devinfo->max_cs_threads;
|
const uint32_t max_workgroup_size = 32 * devinfo->max_cs_threads;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue