gallium,mesa: replace get_compute_param with pipe_compute_caps

Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Acked-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33176>
This commit is contained in:
Qiang Yu 2025-01-22 17:16:42 +08:00
parent 961a9c3a43
commit 0911b13d70
2 changed files with 11 additions and 39 deletions

View file

@ -790,19 +790,8 @@ lvp_get_properties(const struct lvp_physical_device *device, struct vk_propertie
{
VkSampleCountFlags sample_counts = VK_SAMPLE_COUNT_1_BIT | VK_SAMPLE_COUNT_4_BIT;
uint64_t grid_size[3], block_size[3];
uint64_t max_threads_per_block, max_local_size;
device->pscreen->get_compute_param(device->pscreen,
PIPE_COMPUTE_CAP_MAX_GRID_SIZE, grid_size);
device->pscreen->get_compute_param(device->pscreen,
PIPE_COMPUTE_CAP_MAX_BLOCK_SIZE, block_size);
device->pscreen->get_compute_param(device->pscreen,
PIPE_COMPUTE_CAP_MAX_THREADS_PER_BLOCK,
&max_threads_per_block);
device->pscreen->get_compute_param(device->pscreen,
PIPE_COMPUTE_CAP_MAX_LOCAL_SIZE,
&max_local_size);
const unsigned *grid_size = device->pscreen->compute_caps.max_grid_size;
const unsigned *block_size = device->pscreen->compute_caps.max_block_size;
const uint64_t max_render_targets = device->pscreen->caps.max_render_targets;
@ -869,9 +858,9 @@ lvp_get_properties(const struct lvp_physical_device *device, struct vk_propertie
.maxFragmentCombinedOutputResources = max_render_targets +
device->pscreen->shader_caps[MESA_SHADER_FRAGMENT].max_shader_buffers +
device->pscreen->shader_caps[MESA_SHADER_FRAGMENT].max_shader_images,
.maxComputeSharedMemorySize = max_local_size,
.maxComputeSharedMemorySize = device->pscreen->compute_caps.max_local_size,
.maxComputeWorkGroupCount = { grid_size[0], grid_size[1], grid_size[2] },
.maxComputeWorkGroupInvocations = max_threads_per_block,
.maxComputeWorkGroupInvocations = device->pscreen->compute_caps.max_threads_per_block,
.maxComputeWorkGroupSize = { block_size[0], block_size[1], block_size[2] },
.subPixelPrecisionBits = device->pscreen->caps.rasterizer_subpixel_bits,
.subTexelPrecisionBits = 8,

View file

@ -1647,40 +1647,23 @@ void st_init_extensions(struct pipe_screen *screen,
extensions->GREMEDY_string_marker = GL_TRUE;
if (screen->caps.compute) {
uint64_t grid_size[3], block_size[3];
uint64_t max_local_size, max_threads_per_block;
screen->get_compute_param(screen,
PIPE_COMPUTE_CAP_MAX_GRID_SIZE, grid_size);
screen->get_compute_param(screen,
PIPE_COMPUTE_CAP_MAX_BLOCK_SIZE, block_size);
screen->get_compute_param(screen,
PIPE_COMPUTE_CAP_MAX_THREADS_PER_BLOCK,
&max_threads_per_block);
screen->get_compute_param(screen,
PIPE_COMPUTE_CAP_MAX_LOCAL_SIZE,
&max_local_size);
consts->MaxComputeWorkGroupInvocations = max_threads_per_block;
consts->MaxComputeSharedMemorySize = max_local_size;
consts->MaxComputeWorkGroupInvocations = screen->compute_caps.max_threads_per_block;
consts->MaxComputeSharedMemorySize = screen->compute_caps.max_local_size;
for (i = 0; i < 3; i++) {
/* There are tests that fail if we report more that INT_MAX - 1. */
consts->MaxComputeWorkGroupCount[i] = MIN2(grid_size[i], INT_MAX - 1);
consts->MaxComputeWorkGroupSize[i] = block_size[i];
consts->MaxComputeWorkGroupCount[i] = MIN2(screen->compute_caps.max_grid_size[i], INT_MAX - 1);
consts->MaxComputeWorkGroupSize[i] = screen->compute_caps.max_block_size[i];
}
extensions->ARB_compute_shader =
max_threads_per_block >= 1024 &&
screen->compute_caps.max_threads_per_block >= 1024 &&
extensions->ARB_shader_image_load_store &&
extensions->ARB_shader_atomic_counters;
if (extensions->ARB_compute_shader) {
uint64_t max_variable_threads_per_block = 0;
screen->get_compute_param(screen,
PIPE_COMPUTE_CAP_MAX_VARIABLE_THREADS_PER_BLOCK,
&max_variable_threads_per_block);
unsigned max_variable_threads_per_block =
screen->compute_caps.max_variable_threads_per_block;
for (i = 0; i < 3; i++) {
/* Clamp the values to avoid having a local work group size