mesa: count mesh shader when init limits

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Yonggang Luo <luoyonggang@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36596>
This commit is contained in:
Qiang Yu
2025-02-19 14:39:53 +08:00
committed by Marge Bot
parent 13312c12fb
commit e24082cfe0

View File

@@ -323,12 +323,15 @@ void st_init_limits(struct pipe_screen *screen,
}
}
c->MaxUserAssignableUniformLocations = MAX2(
c->MaxUserAssignableUniformLocations = MAX3(
c->Program[MESA_SHADER_VERTEX].MaxUniformComponents +
c->Program[MESA_SHADER_TESS_CTRL].MaxUniformComponents +
c->Program[MESA_SHADER_TESS_EVAL].MaxUniformComponents +
c->Program[MESA_SHADER_GEOMETRY].MaxUniformComponents +
c->Program[MESA_SHADER_FRAGMENT].MaxUniformComponents,
c->Program[MESA_SHADER_TASK].MaxUniformComponents +
c->Program[MESA_SHADER_MESH].MaxUniformComponents +
c->Program[MESA_SHADER_FRAGMENT].MaxUniformComponents,
c->Program[MESA_SHADER_COMPUTE].MaxUniformComponents);
c->GLSLLowerConstArrays =
@@ -364,6 +367,15 @@ void st_init_limits(struct pipe_screen *screen,
MAX2(vertex_pipeline_max_combined_texture_image_units,
compute_pipeline_max_combined_texture_image_units);
unsigned mesh_pipeline_max_combined_texture_image_units =
c->Program[MESA_SHADER_TASK].MaxTextureImageUnits +
c->Program[MESA_SHADER_MESH].MaxTextureImageUnits +
c->Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits;
c->MaxCombinedTextureImageUnits =
MAX2(c->MaxCombinedTextureImageUnits,
mesh_pipeline_max_combined_texture_image_units);
/* This depends on program constants. */
c->MaxTextureCoordUnits
= _min(c->Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits,
@@ -438,14 +450,19 @@ void st_init_limits(struct pipe_screen *screen,
c->Program[MESA_SHADER_TESS_EVAL].MaxUniformBlocks +
c->Program[MESA_SHADER_GEOMETRY].MaxUniformBlocks +
c->Program[MESA_SHADER_FRAGMENT].MaxUniformBlocks +
c->Program[MESA_SHADER_COMPUTE].MaxUniformBlocks;
c->Program[MESA_SHADER_COMPUTE].MaxUniformBlocks +
c->Program[MESA_SHADER_TASK].MaxUniformBlocks +
c->Program[MESA_SHADER_MESH].MaxUniformBlocks;
/* Shader program limit */
c->MaxCombinedUniformBlocks = MAX2(
c->MaxCombinedUniformBlocks = MAX3(
c->Program[MESA_SHADER_VERTEX].MaxUniformBlocks +
c->Program[MESA_SHADER_TESS_CTRL].MaxUniformBlocks +
c->Program[MESA_SHADER_TESS_EVAL].MaxUniformBlocks +
c->Program[MESA_SHADER_GEOMETRY].MaxUniformBlocks +
c->Program[MESA_SHADER_FRAGMENT].MaxUniformBlocks,
c->Program[MESA_SHADER_TASK].MaxUniformBlocks +
c->Program[MESA_SHADER_MESH].MaxUniformBlocks +
c->Program[MESA_SHADER_FRAGMENT].MaxUniformBlocks,
c->Program[MESA_SHADER_COMPUTE].MaxUniformBlocks);
assert(c->MaxCombinedUniformBlocks <= MAX_COMBINED_UNIFORM_BUFFERS);
}
@@ -476,12 +493,15 @@ void st_init_limits(struct pipe_screen *screen,
MIN2(screen->caps.max_combined_hw_atomic_counter_buffers,
MAX_COMBINED_ATOMIC_BUFFERS);
if (!c->MaxCombinedAtomicBuffers) {
c->MaxCombinedAtomicBuffers = MAX2(
c->MaxCombinedAtomicBuffers = MAX3(
c->Program[MESA_SHADER_VERTEX].MaxAtomicBuffers +
c->Program[MESA_SHADER_TESS_CTRL].MaxAtomicBuffers +
c->Program[MESA_SHADER_TESS_EVAL].MaxAtomicBuffers +
c->Program[MESA_SHADER_GEOMETRY].MaxAtomicBuffers +
c->Program[MESA_SHADER_FRAGMENT].MaxAtomicBuffers,
c->Program[MESA_SHADER_TASK].MaxAtomicBuffers +
c->Program[MESA_SHADER_MESH].MaxAtomicBuffers +
c->Program[MESA_SHADER_FRAGMENT].MaxAtomicBuffers,
c->Program[MESA_SHADER_COMPUTE].MaxAtomicBuffers);
assert(c->MaxCombinedAtomicBuffers <= MAX_COMBINED_ATOMIC_BUFFERS);
}
@@ -504,12 +524,15 @@ void st_init_limits(struct pipe_screen *screen,
MIN2(screen->caps.max_combined_shader_buffers,
MAX_COMBINED_SHADER_STORAGE_BUFFERS);
if (!c->MaxCombinedShaderStorageBlocks) {
c->MaxCombinedShaderStorageBlocks = MAX2(
c->MaxCombinedShaderStorageBlocks = MAX3(
c->Program[MESA_SHADER_VERTEX].MaxShaderStorageBlocks +
c->Program[MESA_SHADER_TESS_CTRL].MaxShaderStorageBlocks +
c->Program[MESA_SHADER_TESS_EVAL].MaxShaderStorageBlocks +
c->Program[MESA_SHADER_GEOMETRY].MaxShaderStorageBlocks +
c->Program[MESA_SHADER_FRAGMENT].MaxShaderStorageBlocks,
c->Program[MESA_SHADER_TASK].MaxShaderStorageBlocks +
c->Program[MESA_SHADER_MESH].MaxShaderStorageBlocks +
c->Program[MESA_SHADER_FRAGMENT].MaxShaderStorageBlocks,
c->Program[MESA_SHADER_COMPUTE].MaxShaderStorageBlocks);
assert(c->MaxCombinedShaderStorageBlocks < MAX_COMBINED_SHADER_STORAGE_BUFFERS);
}
@@ -523,12 +546,15 @@ void st_init_limits(struct pipe_screen *screen,
extensions->ARB_shader_storage_buffer_object = GL_TRUE;
}
c->MaxCombinedImageUniforms = MAX2(
c->MaxCombinedImageUniforms = MAX3(
c->Program[MESA_SHADER_VERTEX].MaxImageUniforms +
c->Program[MESA_SHADER_TESS_CTRL].MaxImageUniforms +
c->Program[MESA_SHADER_TESS_EVAL].MaxImageUniforms +
c->Program[MESA_SHADER_GEOMETRY].MaxImageUniforms +
c->Program[MESA_SHADER_FRAGMENT].MaxImageUniforms,
c->Program[MESA_SHADER_TASK].MaxImageUniforms +
c->Program[MESA_SHADER_MESH].MaxImageUniforms +
c->Program[MESA_SHADER_FRAGMENT].MaxImageUniforms,
c->Program[MESA_SHADER_COMPUTE].MaxImageUniforms);
c->MaxCombinedShaderOutputResources += c->MaxCombinedImageUniforms;
c->MaxImageUnits = MAX_IMAGE_UNITS;