From bae981209244bdd2825dcb641bd12f4bb22d38c2 Mon Sep 17 00:00:00 2001 From: Qiang Yu Date: Tue, 21 Jan 2025 11:00:59 +0800 Subject: [PATCH] softpipe: init shader and compute caps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Acked-by: Alyssa Rosenzweig Acked-by: Marek Olšák Part-of: --- src/gallium/drivers/softpipe/sp_screen.c | 49 ++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/gallium/drivers/softpipe/sp_screen.c b/src/gallium/drivers/softpipe/sp_screen.c index ff3b9ab6768..cba5fb90a1b 100644 --- a/src/gallium/drivers/softpipe/sp_screen.c +++ b/src/gallium/drivers/softpipe/sp_screen.c @@ -237,6 +237,53 @@ softpipe_is_format_supported( struct pipe_screen *screen, } +static void +softpipe_init_shader_caps(struct softpipe_screen *sp_screen) +{ + for (unsigned i = 0; i <= PIPE_SHADER_COMPUTE; i++) { + struct pipe_shader_caps *caps = + (struct pipe_shader_caps *)&sp_screen->base.shader_caps[i]; + + switch(i) { + case PIPE_SHADER_VERTEX: + case PIPE_SHADER_GEOMETRY: + if (sp_screen->use_llvm) { + draw_init_shader_caps(caps); + break; + } + FALLTHROUGH; + case PIPE_SHADER_FRAGMENT: + case PIPE_SHADER_COMPUTE: + tgsi_exec_init_shader_caps(caps); + break; + default: + continue; + } + + caps->supported_irs = (1 << PIPE_SHADER_IR_NIR) | (1 << PIPE_SHADER_IR_TGSI); + } +} + + +static void +softpipe_init_compute_caps(struct softpipe_screen *sp_screen) +{ + struct pipe_compute_caps *caps = + (struct pipe_compute_caps *)&sp_screen->base.compute_caps; + + caps->max_grid_size[0] = + caps->max_grid_size[1] = + caps->max_grid_size[2] = 65535; + + caps->max_block_size[0] = + caps->max_block_size[1] = + caps->max_block_size[2] = 1024; + + caps->max_threads_per_block = 1024; + caps->max_local_size = 32768; +} + + static void softpipe_init_screen_caps(struct softpipe_screen *sp_screen) { @@ -511,6 +558,8 @@ softpipe_create_screen(struct sw_winsys *winsys) softpipe_init_screen_texture_funcs(&screen->base); softpipe_init_screen_fence_funcs(&screen->base); + softpipe_init_shader_caps(screen); + softpipe_init_compute_caps(screen); softpipe_init_screen_caps(screen); return &screen->base;