From ca09c173f6e0dfdcf4da59d741a3d58bfc3c982e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sun, 2 Mar 2025 11:04:47 -0500 Subject: [PATCH] gallium/u_blitter: remove UTIL_BLITTER_ATTRIB_COLOR, use a constant buffer Pass the clear color via a constant buffer instead of a FS input. This results in less driver code and it could be faster on some GPUs. Reviewed-by: Alyssa Rosenzweig Part-of: --- src/gallium/auxiliary/util/u_blitter.c | 82 ++++++------------- src/gallium/auxiliary/util/u_blitter.h | 3 - src/gallium/auxiliary/util/u_simple_shaders.c | 9 +- src/gallium/auxiliary/util/u_simple_shaders.h | 2 +- src/gallium/drivers/panfrost/pan_resource.c | 2 +- src/gallium/drivers/r300/r300_render.c | 9 +- src/gallium/drivers/r600/r600_blit.c | 2 +- src/gallium/drivers/r600/r600_pipe_common.c | 5 -- src/gallium/drivers/radeonsi/si_clear.c | 2 +- .../drivers/radeonsi/si_nir_lower_vs_inputs.c | 23 ++---- src/gallium/drivers/radeonsi/si_pipe.c | 4 - src/gallium/drivers/radeonsi/si_pipe.h | 2 - src/gallium/drivers/radeonsi/si_shader.c | 10 +-- src/gallium/drivers/radeonsi/si_shader.h | 1 - .../drivers/radeonsi/si_shaderlib_nir.c | 4 - .../drivers/radeonsi/si_state_draw.cpp | 4 - 16 files changed, 50 insertions(+), 114 deletions(-) diff --git a/src/gallium/auxiliary/util/u_blitter.c b/src/gallium/auxiliary/util/u_blitter.c index e19b59e3fed..80d67353682 100644 --- a/src/gallium/auxiliary/util/u_blitter.c +++ b/src/gallium/auxiliary/util/u_blitter.c @@ -75,8 +75,7 @@ struct blitter_context_priv /* Fragment shaders. */ void *fs_empty; - void *fs_write_one_cbuf; - void *fs_clear_all_cbufs; + void *fs_clear_color[2]; /* FS which outputs a color from a texture where * the 1st index indicates the texture type / destination type, @@ -450,30 +449,18 @@ static void bind_fs_empty(struct blitter_context_priv *ctx) ctx->bind_fs_state(pipe, ctx->fs_empty); } -static void bind_fs_write_one_cbuf(struct blitter_context_priv *ctx) +static void bind_fs_clear_color(struct blitter_context_priv *ctx, + bool write_all_cbufs) { struct pipe_context *pipe = ctx->base.pipe; - if (!ctx->fs_write_one_cbuf) { + if (!ctx->fs_clear_color[write_all_cbufs]) { assert(!ctx->cached_all_shaders); - ctx->fs_write_one_cbuf = - util_make_fragment_passthrough_shader(pipe, TGSI_SEMANTIC_GENERIC, - TGSI_INTERPOLATE_CONSTANT, false); + ctx->fs_clear_color[write_all_cbufs] = + util_make_fs_clear_color(pipe, write_all_cbufs); } - ctx->bind_fs_state(pipe, ctx->fs_write_one_cbuf); -} - -static void bind_fs_clear_all_cbufs(struct blitter_context_priv *ctx) -{ - struct pipe_context *pipe = ctx->base.pipe; - - if (!ctx->fs_clear_all_cbufs) { - assert(!ctx->cached_all_shaders); - ctx->fs_clear_all_cbufs = util_make_fs_clear_all_cbufs(pipe); - } - - ctx->bind_fs_state(pipe, ctx->fs_clear_all_cbufs); + ctx->bind_fs_state(pipe, ctx->fs_clear_color[write_all_cbufs]); } void util_blitter_destroy(struct blitter_context *blitter) @@ -569,10 +556,11 @@ void util_blitter_destroy(struct blitter_context *blitter) if (ctx->fs_empty) ctx->delete_fs_state(pipe, ctx->fs_empty); - if (ctx->fs_write_one_cbuf) - ctx->delete_fs_state(pipe, ctx->fs_write_one_cbuf); - if (ctx->fs_clear_all_cbufs) - ctx->delete_fs_state(pipe, ctx->fs_clear_all_cbufs); + + for (i = 0; i < ARRAY_SIZE(ctx->fs_clear_color); i++) { + if (ctx->fs_clear_color[i]) + ctx->delete_fs_state(pipe, ctx->fs_clear_color[i]); + } for (i = 0; i < ARRAY_SIZE(ctx->fs_stencil_blit_fallback); ++i) if (ctx->fs_stencil_blit_fallback[i]) @@ -863,20 +851,6 @@ static void blitter_set_rectangle(struct blitter_context_priv *ctx, ctx->base.pipe->set_viewport_states(ctx->base.pipe, 0, 1, &viewport); } -static void blitter_set_clear_color(struct blitter_context_priv *ctx, - const float color[4]) -{ - int i; - - if (color) { - for (i = 0; i < 4; i++) - memcpy(&ctx->vertices[i][1][0], color, sizeof(uint32_t) * 4); - } else { - for (i = 0; i < 4; i++) - memset(&ctx->vertices[i][1][0], 0, sizeof(uint32_t) * 4); - } -} - static void get_texcoords(struct pipe_sampler_view *src, unsigned src_width0, unsigned src_height0, int x1, int y1, int x2, int y2, @@ -1354,11 +1328,8 @@ void util_blitter_cache_all_shaders(struct blitter_context *blitter) ctx->fs_empty = util_make_empty_fragment_shader(pipe); - ctx->fs_write_one_cbuf = - util_make_fragment_passthrough_shader(pipe, TGSI_SEMANTIC_GENERIC, - TGSI_INTERPOLATE_CONSTANT, false); - - ctx->fs_clear_all_cbufs = util_make_fs_clear_all_cbufs(pipe); + ctx->fs_clear_color[0] = util_make_fs_clear_color(pipe, false); + ctx->fs_clear_color[1] = util_make_fs_clear_color(pipe, true); ctx->cached_all_shaders = true; } @@ -1431,10 +1402,6 @@ void util_blitter_draw_rectangle(struct blitter_context *blitter, unsigned i; switch (type) { - case UTIL_BLITTER_ATTRIB_COLOR: - blitter_set_clear_color(ctx, attrib->color); - break; - case UTIL_BLITTER_ATTRIB_TEXCOORD_XYZW: for (i = 0; i < 4; i++) { ctx->vertices[i][1][2] = attrib->texcoord.z; @@ -1565,7 +1532,7 @@ static void util_blitter_clear_custom(struct blitter_context *blitter, }; pipe->set_constant_buffer(pipe, PIPE_SHADER_FRAGMENT, blitter->cb_slot, false, &cb); - bind_fs_clear_all_cbufs(ctx); + bind_fs_clear_color(ctx, true); } else { bind_fs_empty(ctx); } @@ -2408,7 +2375,7 @@ void util_blitter_clear_render_target(struct blitter_context *blitter, /* bind states */ pipe->bind_blend_state(pipe, ctx->blend[PIPE_MASK_RGBA][0]); pipe->bind_depth_stencil_alpha_state(pipe, ctx->dsa_keep_depth_stencil); - bind_fs_write_one_cbuf(ctx); + bind_fs_clear_color(ctx, false); /* set a framebuffer state */ fb_state.width = dstsurf->width; @@ -2426,8 +2393,12 @@ void util_blitter_clear_render_target(struct blitter_context *blitter, blitter_set_dst_dimensions(ctx, dstsurf->width, dstsurf->height); blitter_set_common_draw_rect_state(ctx, false, msaa); - union blitter_attrib attrib; - memcpy(attrib.color, color->ui, sizeof(color->ui)); + struct pipe_constant_buffer cb = { + .user_buffer = color->f, + .buffer_size = 4 * sizeof(float), + }; + pipe->set_constant_buffer(pipe, PIPE_SHADER_FRAGMENT, blitter->cb_slot, + false, &cb); num_layers = dstsurf->u.tex.last_layer - dstsurf->u.tex.first_layer + 1; @@ -2440,10 +2411,11 @@ void util_blitter_clear_render_target(struct blitter_context *blitter, blitter->draw_rectangle(blitter, ctx->velem_state, get_vs, dstx, dsty, dstx+width, dsty+height, 0, - num_layers, UTIL_BLITTER_ATTRIB_COLOR, &attrib); + num_layers, UTIL_BLITTER_ATTRIB_NONE, NULL); util_blitter_restore_vertex_states(blitter); util_blitter_restore_fragment_states(blitter); + util_blitter_restore_constant_buffer_state(blitter); util_blitter_restore_fb_state(blitter); util_blitter_restore_render_cond(blitter); util_blitter_unset_running_flag(blitter); @@ -2558,7 +2530,7 @@ void util_blitter_custom_depth_stencil(struct blitter_context *blitter, ctx->blend[0][0]); pipe->bind_depth_stencil_alpha_state(pipe, dsa_stage); if (cbsurf) - bind_fs_write_one_cbuf(ctx); + bind_fs_clear_color(ctx, false); else bind_fs_empty(ctx); @@ -2685,7 +2657,7 @@ void util_blitter_custom_resolve_color(struct blitter_context *blitter, /* bind states */ pipe->bind_blend_state(pipe, custom_blend); pipe->bind_depth_stencil_alpha_state(pipe, ctx->dsa_keep_depth_stencil); - bind_fs_write_one_cbuf(ctx); + bind_fs_clear_color(ctx, false); pipe->set_sample_mask(pipe, sample_mask); if (pipe->set_min_samples) pipe->set_min_samples(pipe, 1); @@ -2753,7 +2725,7 @@ void util_blitter_custom_color(struct blitter_context *blitter, pipe->bind_blend_state(pipe, custom_blend ? custom_blend : ctx->blend[PIPE_MASK_RGBA][0]); pipe->bind_depth_stencil_alpha_state(pipe, ctx->dsa_keep_depth_stencil); - bind_fs_write_one_cbuf(ctx); + bind_fs_clear_color(ctx, false); /* set a framebuffer state */ fb_state.width = dstsurf->width; diff --git a/src/gallium/auxiliary/util/u_blitter.h b/src/gallium/auxiliary/util/u_blitter.h index 38d403ced5e..f7fa1248368 100644 --- a/src/gallium/auxiliary/util/u_blitter.h +++ b/src/gallium/auxiliary/util/u_blitter.h @@ -40,14 +40,11 @@ struct pipe_context; enum blitter_attrib_type { UTIL_BLITTER_ATTRIB_NONE, - UTIL_BLITTER_ATTRIB_COLOR, UTIL_BLITTER_ATTRIB_TEXCOORD_XY, UTIL_BLITTER_ATTRIB_TEXCOORD_XYZW, }; union blitter_attrib { - float color[4]; - struct { float x1, y1, x2, y2, z, w; } texcoord; diff --git a/src/gallium/auxiliary/util/u_simple_shaders.c b/src/gallium/auxiliary/util/u_simple_shaders.c index 9ecb041bdd9..2b6d703cc86 100644 --- a/src/gallium/auxiliary/util/u_simple_shaders.c +++ b/src/gallium/auxiliary/util/u_simple_shaders.c @@ -1313,16 +1313,19 @@ util_make_fs_stencil_blit(struct pipe_context *pipe, bool msaa_src, bool has_txq } void * -util_make_fs_clear_all_cbufs(struct pipe_context *pipe) +util_make_fs_clear_color(struct pipe_context *pipe, bool write_all_cbufs) { - static const char text[] = + static const char text_templ[] = "FRAG\n" - "PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1\n" + "PROPERTY FS_COLOR0_WRITES_ALL_CBUFS %u\n" "DCL OUT[0], COLOR[0]\n" "DCL CONST[0][0]\n" "MOV OUT[0], CONST[0][0]\n" "END\n"; + char text[1000]; + + snprintf(text, ARRAY_SIZE(text), text_templ, write_all_cbufs); struct tgsi_token tokens[1000]; struct pipe_shader_state state = { 0 }; diff --git a/src/gallium/auxiliary/util/u_simple_shaders.h b/src/gallium/auxiliary/util/u_simple_shaders.h index c64c6045026..b4db195654c 100644 --- a/src/gallium/auxiliary/util/u_simple_shaders.h +++ b/src/gallium/auxiliary/util/u_simple_shaders.h @@ -161,7 +161,7 @@ void * util_make_fs_stencil_blit(struct pipe_context *pipe, bool msaa_src, bool has_txq); void * -util_make_fs_clear_all_cbufs(struct pipe_context *pipe); +util_make_fs_clear_color(struct pipe_context *pipe, bool write_all_cbufs); #ifdef __cplusplus } diff --git a/src/gallium/drivers/panfrost/pan_resource.c b/src/gallium/drivers/panfrost/pan_resource.c index 89d1f3d69d6..e13a05fb664 100644 --- a/src/gallium/drivers/panfrost/pan_resource.c +++ b/src/gallium/drivers/panfrost/pan_resource.c @@ -85,7 +85,7 @@ panfrost_clear_render_target(struct pipe_context *pipe, return; panfrost_blitter_save( - ctx, render_condition_enabled ? PAN_RENDER_COND : PAN_RENDER_BASE); + ctx, (render_condition_enabled ? PAN_RENDER_COND : PAN_RENDER_BASE) | PAN_SAVE_FRAGMENT_CONSTANT); util_blitter_clear_render_target(ctx->blitter, dst, color, dstx, dsty, width, height); } diff --git a/src/gallium/drivers/r300/r300_render.c b/src/gallium/drivers/r300/r300_render.c index d3ed9f8ecc8..8fd7c667c87 100644 --- a/src/gallium/drivers/r300/r300_render.c +++ b/src/gallium/drivers/r300/r300_render.c @@ -1161,11 +1161,9 @@ void r300_blitter_draw_rectangle(struct blitter_context *blitter, unsigned last_is_point = r300->is_point; unsigned width = x2 - x1; unsigned height = y2 - y1; - unsigned vertex_size = - type == UTIL_BLITTER_ATTRIB_COLOR || !r300->draw ? 8 : 4; + unsigned vertex_size = !r300->draw ? 8 : 4; unsigned dwords = 13 + vertex_size + (type == UTIL_BLITTER_ATTRIB_TEXCOORD_XY ? 7 : 0); - static const union blitter_attrib zeros; CS_LOCALS(r300); /* XXX workaround for a lockup in MSAA resolve on SWTCL chipsets, this @@ -1234,9 +1232,8 @@ void r300_blitter_draw_rectangle(struct blitter_context *blitter, OUT_CS_32F(1); if (vertex_size == 8) { - if (!attrib) - attrib = &zeros; - OUT_CS_TABLE(attrib->color, 4); + static const float zeros[4]; + OUT_CS_TABLE(zeros, 4); } END_CS; diff --git a/src/gallium/drivers/r600/r600_blit.c b/src/gallium/drivers/r600/r600_blit.c index e0a39321d6c..e213f3eeaca 100644 --- a/src/gallium/drivers/r600/r600_blit.c +++ b/src/gallium/drivers/r600/r600_blit.c @@ -20,7 +20,7 @@ enum r600_blitter_op /* bitmask */ R600_CLEAR = R600_SAVE_FRAGMENT_STATE | R600_SAVE_CONST_BUF0, - R600_CLEAR_SURFACE = R600_SAVE_FRAGMENT_STATE | R600_SAVE_FRAMEBUFFER, + R600_CLEAR_SURFACE = R600_SAVE_FRAGMENT_STATE | R600_SAVE_FRAMEBUFFER | R600_SAVE_CONST_BUF0, R600_COPY_BUFFER = R600_DISABLE_RENDER_COND, diff --git a/src/gallium/drivers/r600/r600_pipe_common.c b/src/gallium/drivers/r600/r600_pipe_common.c index b84f0035de9..9d5e9a989fd 100644 --- a/src/gallium/drivers/r600/r600_pipe_common.c +++ b/src/gallium/drivers/r600/r600_pipe_common.c @@ -163,11 +163,6 @@ void r600_draw_rectangle(struct blitter_context *blitter, vb[19] = 1; switch (type) { - case UTIL_BLITTER_ATTRIB_COLOR: - memcpy(vb+4, attrib->color, sizeof(float)*4); - memcpy(vb+12, attrib->color, sizeof(float)*4); - memcpy(vb+20, attrib->color, sizeof(float)*4); - break; case UTIL_BLITTER_ATTRIB_TEXCOORD_XYZW: case UTIL_BLITTER_ATTRIB_TEXCOORD_XY: vb[6] = vb[14] = vb[22] = attrib->texcoord.z; diff --git a/src/gallium/drivers/radeonsi/si_clear.c b/src/gallium/drivers/radeonsi/si_clear.c index 236e497568e..8d11cafc122 100644 --- a/src/gallium/drivers/radeonsi/si_clear.c +++ b/src/gallium/drivers/radeonsi/si_clear.c @@ -13,7 +13,7 @@ enum { SI_CLEAR = SI_SAVE_FRAGMENT_STATE | SI_SAVE_FRAGMENT_CONSTANT, - SI_CLEAR_SURFACE = SI_SAVE_FRAMEBUFFER | SI_SAVE_FRAGMENT_STATE, + SI_CLEAR_SURFACE = SI_SAVE_FRAMEBUFFER | SI_SAVE_FRAGMENT_STATE | SI_SAVE_FRAGMENT_CONSTANT, }; void si_init_buffer_clear(struct si_clear_info *info, diff --git a/src/gallium/drivers/radeonsi/si_nir_lower_vs_inputs.c b/src/gallium/drivers/radeonsi/si_nir_lower_vs_inputs.c index baab8df529c..b97d513fa20 100644 --- a/src/gallium/drivers/radeonsi/si_nir_lower_vs_inputs.c +++ b/src/gallium/drivers/radeonsi/si_nir_lower_vs_inputs.c @@ -132,22 +132,17 @@ load_vs_input_from_blit_sgpr(nir_builder *b, unsigned input_index, assert(input_index == 1); unsigned vs_blit_property = b->shader->info.vs.blit_sgprs_amd; - if (vs_blit_property == SI_VS_BLIT_SGPRS_POS_COLOR + has_attribute_ring_address) { - for (int i = 0; i < 4; i++) - out[i] = ac_nir_load_arg_at_offset(b, &s->args->ac, s->args->vs_blit_inputs, 3 + i); - } else { - assert(vs_blit_property == SI_VS_BLIT_SGPRS_POS_TEXCOORD + has_attribute_ring_address); + assert(vs_blit_property == SI_VS_BLIT_SGPRS_POS_TEXCOORD + has_attribute_ring_address); - nir_def *x1 = ac_nir_load_arg_at_offset(b, &s->args->ac, s->args->vs_blit_inputs, 3); - nir_def *y1 = ac_nir_load_arg_at_offset(b, &s->args->ac, s->args->vs_blit_inputs, 4); - nir_def *x2 = ac_nir_load_arg_at_offset(b, &s->args->ac, s->args->vs_blit_inputs, 5); - nir_def *y2 = ac_nir_load_arg_at_offset(b, &s->args->ac, s->args->vs_blit_inputs, 6); + nir_def *x1 = ac_nir_load_arg_at_offset(b, &s->args->ac, s->args->vs_blit_inputs, 3); + nir_def *y1 = ac_nir_load_arg_at_offset(b, &s->args->ac, s->args->vs_blit_inputs, 4); + nir_def *x2 = ac_nir_load_arg_at_offset(b, &s->args->ac, s->args->vs_blit_inputs, 5); + nir_def *y2 = ac_nir_load_arg_at_offset(b, &s->args->ac, s->args->vs_blit_inputs, 6); - out[0] = nir_bcsel(b, sel_x1, x1, x2); - out[1] = nir_bcsel(b, sel_y1, y1, y2); - out[2] = ac_nir_load_arg_at_offset(b, &s->args->ac, s->args->vs_blit_inputs, 7); - out[3] = ac_nir_load_arg_at_offset(b, &s->args->ac, s->args->vs_blit_inputs, 8); - } + out[0] = nir_bcsel(b, sel_x1, x1, x2); + out[1] = nir_bcsel(b, sel_y1, y1, y2); + out[2] = ac_nir_load_arg_at_offset(b, &s->args->ac, s->args->vs_blit_inputs, 7); + out[3] = ac_nir_load_arg_at_offset(b, &s->args->ac, s->args->vs_blit_inputs, 8); } } diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c index e70cfaab170..9a0c9a97893 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.c +++ b/src/gallium/drivers/radeonsi/si_pipe.c @@ -251,10 +251,6 @@ static void si_destroy_context(struct pipe_context *context) sctx->b.delete_vs_state(&sctx->b, sctx->vs_blit_pos); if (sctx->vs_blit_pos_layered) sctx->b.delete_vs_state(&sctx->b, sctx->vs_blit_pos_layered); - if (sctx->vs_blit_color) - sctx->b.delete_vs_state(&sctx->b, sctx->vs_blit_color); - if (sctx->vs_blit_color_layered) - sctx->b.delete_vs_state(&sctx->b, sctx->vs_blit_color_layered); if (sctx->vs_blit_texcoord) sctx->b.delete_vs_state(&sctx->b, sctx->vs_blit_texcoord); if (sctx->cs_clear_buffer_rmw) diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h index 77cf738b57d..bfab9741942 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.h +++ b/src/gallium/drivers/radeonsi/si_pipe.h @@ -973,8 +973,6 @@ struct si_context { void *custom_blend_dcc_decompress; void *vs_blit_pos; void *vs_blit_pos_layered; - void *vs_blit_color; - void *vs_blit_color_layered; void *vs_blit_texcoord; void *cs_clear_buffer_rmw; void *cs_ubyte_to_ushort; diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index ecfdbdaad99..e36d7aca309 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -294,15 +294,7 @@ static void declare_vs_blit_inputs(struct si_shader *shader, struct si_shader_ar ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_FLOAT, NULL); /* depth */ if (info->vs.blit_sgprs_amd == - SI_VS_BLIT_SGPRS_POS_COLOR + has_attribute_ring_address) { - ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_FLOAT, NULL); /* color0 */ - ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_FLOAT, NULL); /* color1 */ - ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_FLOAT, NULL); /* color2 */ - ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_FLOAT, NULL); /* color3 */ - if (has_attribute_ring_address) - ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_INT, NULL); /* attribute ring address */ - } else if (info->vs.blit_sgprs_amd == - SI_VS_BLIT_SGPRS_POS_TEXCOORD + has_attribute_ring_address) { + SI_VS_BLIT_SGPRS_POS_TEXCOORD + has_attribute_ring_address) { ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_FLOAT, NULL); /* texcoord.x1 */ ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_FLOAT, NULL); /* texcoord.y1 */ ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_FLOAT, NULL); /* texcoord.x2 */ diff --git a/src/gallium/drivers/radeonsi/si_shader.h b/src/gallium/drivers/radeonsi/si_shader.h index d2b4056f737..a2273d9445b 100644 --- a/src/gallium/drivers/radeonsi/si_shader.h +++ b/src/gallium/drivers/radeonsi/si_shader.h @@ -326,7 +326,6 @@ enum { /* These represent the number of SGPRs the shader uses. */ SI_VS_BLIT_SGPRS_POS = 3, - SI_VS_BLIT_SGPRS_POS_COLOR = 7, SI_VS_BLIT_SGPRS_POS_TEXCOORD = 9, MAX_SI_VS_BLIT_SGPRS = 10, /* +1 for the attribute ring address */ diff --git a/src/gallium/drivers/radeonsi/si_shaderlib_nir.c b/src/gallium/drivers/radeonsi/si_shaderlib_nir.c index 5dde67ee301..f4e1a8f3357 100644 --- a/src/gallium/drivers/radeonsi/si_shaderlib_nir.c +++ b/src/gallium/drivers/radeonsi/si_shaderlib_nir.c @@ -300,10 +300,6 @@ void *si_get_blitter_vs(struct si_context *sctx, enum blitter_attrib_type type, vs = num_layers > 1 ? &sctx->vs_blit_pos_layered : &sctx->vs_blit_pos; vs_blit_property = SI_VS_BLIT_SGPRS_POS; break; - case UTIL_BLITTER_ATTRIB_COLOR: - vs = num_layers > 1 ? &sctx->vs_blit_color_layered : &sctx->vs_blit_color; - vs_blit_property = SI_VS_BLIT_SGPRS_POS_COLOR; - break; case UTIL_BLITTER_ATTRIB_TEXCOORD_XY: case UTIL_BLITTER_ATTRIB_TEXCOORD_XYZW: assert(num_layers == 1); diff --git a/src/gallium/drivers/radeonsi/si_state_draw.cpp b/src/gallium/drivers/radeonsi/si_state_draw.cpp index b8d990e534e..e103b8360b9 100644 --- a/src/gallium/drivers/radeonsi/si_state_draw.cpp +++ b/src/gallium/drivers/radeonsi/si_state_draw.cpp @@ -2498,10 +2498,6 @@ static void si_draw_rectangle(struct blitter_context *blitter, void *vertex_elem sctx->vs_blit_sh_data[2] = fui(depth); switch (type) { - case UTIL_BLITTER_ATTRIB_COLOR: - memcpy(&sctx->vs_blit_sh_data[3], attrib->color, sizeof(float) * 4); - sctx->vs_blit_sh_data[7] = attribute_ring_address_lo; - break; case UTIL_BLITTER_ATTRIB_TEXCOORD_XY: case UTIL_BLITTER_ATTRIB_TEXCOORD_XYZW: memcpy(&sctx->vs_blit_sh_data[3], &attrib->texcoord, sizeof(attrib->texcoord));