freedreno,turnip: Make VS input attr/binding count configurable

a610 and similar models have fewer VS inputs available.

Signed-off-by: Danylo Piliaiev <dpiliaiev@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20991>
This commit is contained in:
Danylo Piliaiev 2023-02-02 17:23:22 +01:00 committed by Marge Bot
parent 4a43ab3019
commit 02ea3e4e10
4 changed files with 8 additions and 3 deletions

View file

@ -173,6 +173,8 @@ struct fd_dev_info {
/* Corresponds to HLSQ_CONTROL_1_REG::PRIMALLOCTHRESHOLD */ /* Corresponds to HLSQ_CONTROL_1_REG::PRIMALLOCTHRESHOLD */
uint32_t prim_alloc_threshold; uint32_t prim_alloc_threshold;
uint32_t vs_max_inputs_count;
struct { struct {
uint32_t PC_POWER_CNTL; uint32_t PC_POWER_CNTL;
uint32_t TPL1_DBG_ECO_CNTL; uint32_t TPL1_DBG_ECO_CNTL;

View file

@ -158,6 +158,8 @@ class A6xxGPUInfo(GPUInfo):
self.a6xx.prim_alloc_threshold = 0x7 self.a6xx.prim_alloc_threshold = 0x7
self.a6xx.vs_max_inputs_count = 32
for name, val in template.items(): for name, val in template.items():
if name == "magic": # handled above if name == "magic": # handled above
continue continue

View file

@ -1070,8 +1070,8 @@ tu_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,
.maxDescriptorSetSampledImages = max_descriptor_set_size, .maxDescriptorSetSampledImages = max_descriptor_set_size,
.maxDescriptorSetStorageImages = max_descriptor_set_size, .maxDescriptorSetStorageImages = max_descriptor_set_size,
.maxDescriptorSetInputAttachments = MAX_RTS, .maxDescriptorSetInputAttachments = MAX_RTS,
.maxVertexInputAttributes = 32, .maxVertexInputAttributes = pdevice->info->a6xx.vs_max_inputs_count,
.maxVertexInputBindings = 32, .maxVertexInputBindings = pdevice->info->a6xx.vs_max_inputs_count,
.maxVertexInputAttributeOffset = 4095, .maxVertexInputAttributeOffset = 4095,
.maxVertexInputBindingStride = 2048, .maxVertexInputBindingStride = 2048,
.maxVertexOutputComponents = 128, .maxVertexOutputComponents = 128,

View file

@ -671,7 +671,8 @@ fd_screen_get_shader_param(struct pipe_screen *pscreen,
case PIPE_SHADER_CAP_MAX_INPUTS: case PIPE_SHADER_CAP_MAX_INPUTS:
if (shader == PIPE_SHADER_GEOMETRY && is_a6xx(screen)) if (shader == PIPE_SHADER_GEOMETRY && is_a6xx(screen))
return 16; return 16;
return is_a6xx(screen) ? 32 : 16; return is_a6xx(screen) ?
(screen->info->a6xx.vs_max_inputs_count) : 16;
case PIPE_SHADER_CAP_MAX_OUTPUTS: case PIPE_SHADER_CAP_MAX_OUTPUTS:
return is_a6xx(screen) ? 32 : 16; return is_a6xx(screen) ? 32 : 16;
case PIPE_SHADER_CAP_MAX_TEMPS: case PIPE_SHADER_CAP_MAX_TEMPS: