From 10eaa4a2ecb847a4032bed9b2c23cbb930ef80ac Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Sat, 7 Jan 2023 16:48:51 -0500 Subject: [PATCH] asahi: Add XML for custom border colours These use extended sampler descriptors. Signed-off-by: Alyssa Rosenzweig Part-of: --- src/asahi/lib/agx_helpers.h | 36 +++++++++++++++++++++++++++ src/asahi/lib/cmdbuf.xml | 24 +++++++++++++++--- src/gallium/drivers/asahi/agx_state.c | 7 ++++-- 3 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 src/asahi/lib/agx_helpers.h diff --git a/src/asahi/lib/agx_helpers.h b/src/asahi/lib/agx_helpers.h new file mode 100644 index 00000000000..78c2d3e340b --- /dev/null +++ b/src/asahi/lib/agx_helpers.h @@ -0,0 +1,36 @@ +/* + * Copyright 2023 Alyssa Rosenzweig + * SPDX-License-Identifier: MIT + */ + +#ifndef __AGX_HELPERS_H +#define __AGX_HELPERS_H + +#include +#include "agx_pack.h" + +static inline enum agx_sampler_states +agx_translate_sampler_state_count(unsigned count, bool extended) +{ + assert(count <= 16 && "max 16 sampler state registers supported"); + + if (count == 0) { + return AGX_SAMPLER_STATES_0; + } else if (extended) { + if (count <= 8) + return AGX_SAMPLER_STATES_8_EXTENDED; + else + return AGX_SAMPLER_STATES_16_EXTENDED; + } else { + if (count <= 4) + return AGX_SAMPLER_STATES_4_COMPACT; + else if (count <= 8) + return AGX_SAMPLER_STATES_8_COMPACT; + else if (count <= 12) + return AGX_SAMPLER_STATES_12_COMPACT; + else + return AGX_SAMPLER_STATES_16_COMPACT; + } +} + +#endif diff --git a/src/asahi/lib/cmdbuf.xml b/src/asahi/lib/cmdbuf.xml index c7ca83648e1..26fb40bbb78 100644 --- a/src/asahi/lib/cmdbuf.xml +++ b/src/asahi/lib/cmdbuf.xml @@ -289,6 +289,7 @@ + @@ -308,6 +309,13 @@ + + + + + + + @@ -519,11 +527,21 @@ + + + + + + + + + + - + @@ -677,7 +695,7 @@ - + @@ -770,7 +788,7 @@ - + diff --git a/src/gallium/drivers/asahi/agx_state.c b/src/gallium/drivers/asahi/agx_state.c index 8e5a734a064..964ded44010 100644 --- a/src/gallium/drivers/asahi/agx_state.c +++ b/src/gallium/drivers/asahi/agx_state.c @@ -27,6 +27,7 @@ #include #include "asahi/compiler/agx_compile.h" #include "asahi/lib/agx_formats.h" +#include "asahi/lib/agx_helpers.h" #include "asahi/lib/agx_pack.h" #include "asahi/lib/agx_ppp.h" #include "asahi/lib/agx_usc.h" @@ -1890,7 +1891,8 @@ agx_encode_state(struct agx_batch *batch, uint8_t *out, bool is_lines, cfg.uniform_register_count = ctx->vs->info.push_count; cfg.preshader_register_count = ctx->vs->info.nr_preamble_gprs; cfg.texture_state_register_count = tex_count; - cfg.sampler_state_register_count = tex_count; + cfg.sampler_state_register_count = + agx_translate_sampler_state_count(tex_count, false); } out += AGX_VDM_STATE_VERTEX_SHADER_WORD_0_LENGTH; @@ -2071,7 +2073,8 @@ agx_encode_state(struct agx_batch *batch, uint8_t *out, bool is_lines, cfg.uniform_register_count = ctx->fs->info.push_count; cfg.preshader_register_count = ctx->fs->info.nr_preamble_gprs; cfg.texture_state_register_count = frag_tex_count; - cfg.sampler_state_register_count = frag_tex_count; + cfg.sampler_state_register_count = + agx_translate_sampler_state_count(frag_tex_count, false); cfg.cf_binding_count = ctx->fs->info.varyings.fs.nr_bindings; cfg.cf_bindings = batch->varyings;