anv: Add a #define for the max binding table size
This also fixes a bug where we mis-calculate maximum binding table sizes
and may return true in vkGetDescriptorSetLayoutSupport even for sets too
large to fit in a binding table.
Fixes: ddc4069122
"anv: Implement VK_KHR_maintenance3"
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
This commit is contained in:
parent
3b755b52e8
commit
a5a0dc08f1
|
@ -163,10 +163,10 @@ void anv_GetDescriptorSetLayoutSupport(
|
|||
|
||||
bool supported = true;
|
||||
for (unsigned s = 0; s < MESA_SHADER_STAGES; s++) {
|
||||
/* Our maximum binding table size is 250 and we need to reserve 8 for
|
||||
* render targets. 240 is a nice round number.
|
||||
/* Our maximum binding table size is 240 and we need to reserve 8 for
|
||||
* render targets.
|
||||
*/
|
||||
if (surface_count[s] >= 240)
|
||||
if (surface_count[s] >= MAX_BINDING_TABLE_SIZE - MAX_RTS)
|
||||
supported = false;
|
||||
}
|
||||
|
||||
|
|
|
@ -1121,7 +1121,7 @@ void anv_GetPhysicalDeviceProperties(
|
|||
.maxPerStageDescriptorSampledImages = max_samplers,
|
||||
.maxPerStageDescriptorStorageImages = MAX_IMAGES,
|
||||
.maxPerStageDescriptorInputAttachments = 64,
|
||||
.maxPerStageResources = 250,
|
||||
.maxPerStageResources = MAX_BINDING_TABLE_SIZE - MAX_RTS,
|
||||
.maxDescriptorSetSamplers = 6 * max_samplers, /* number of stages * maxPerStageDescriptorSamplers */
|
||||
.maxDescriptorSetUniformBuffers = 6 * 64, /* number of stages * maxPerStageDescriptorUniformBuffers */
|
||||
.maxDescriptorSetUniformBuffersDynamic = MAX_DYNAMIC_BUFFERS / 2,
|
||||
|
|
|
@ -162,6 +162,18 @@ struct gen_l3_config;
|
|||
#define MAX_INLINE_UNIFORM_BLOCK_SIZE 4096
|
||||
#define MAX_INLINE_UNIFORM_BLOCK_DESCRIPTORS 32
|
||||
|
||||
/* From the Skylake PRM Vol. 7 "Binding Table Surface State Model":
|
||||
*
|
||||
* "The surface state model is used when a Binding Table Index (specified
|
||||
* in the message descriptor) of less than 240 is specified. In this model,
|
||||
* the Binding Table Index is used to index into the binding table, and the
|
||||
* binding table entry contains a pointer to the SURFACE_STATE."
|
||||
*
|
||||
* Binding table values above 240 are used for various things in the hardware
|
||||
* such as stateless, stateless with incoherent cache, SLM, and bindless.
|
||||
*/
|
||||
#define MAX_BINDING_TABLE_SIZE 240
|
||||
|
||||
/* The kernel relocation API has a limitation of a 32-bit delta value
|
||||
* applied to the address before it is written which, in spite of it being
|
||||
* unsigned, is treated as signed . Because of the way that this maps to
|
||||
|
|
Loading…
Reference in New Issue