panfrost: Move sysvals to GL driver struct
authorAlyssa Rosenzweig <alyssa@collabora.com>
Sat, 11 Feb 2023 02:40:50 +0000 (21:40 -0500)
committerMarge Bot <emma+marge@anholt.net>
Thu, 23 Mar 2023 23:53:46 +0000 (23:53 +0000)
Only the GL driver produces/consumes these, they shouldn't be in the common
shader_info.

Signed-off-by: Alyssa Rosenzweig <alyssa@collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20906>

src/gallium/drivers/panfrost/pan_cmdstream.c
src/gallium/drivers/panfrost/pan_context.h
src/gallium/drivers/panfrost/pan_disk_cache.c
src/gallium/drivers/panfrost/pan_helpers.c
src/gallium/drivers/panfrost/pan_shader.c
src/panfrost/lib/pan_blend.c
src/panfrost/lib/pan_blitter.c
src/panfrost/lib/pan_indirect_dispatch.c
src/panfrost/util/pan_ir.h
src/panfrost/vulkan/panvk_private.h
src/panfrost/vulkan/panvk_vX_pipeline.c

index 1a11041..19fa35f 100644 (file)
@@ -1314,8 +1314,8 @@ panfrost_upload_sysvals(struct panfrost_batch *batch, void *ptr_cpu,
 {
    struct sysval_uniform *uniforms = ptr_cpu;
 
-   for (unsigned i = 0; i < ss->info.sysvals.sysval_count; ++i) {
-      int sysval = ss->info.sysvals.sysvals[i];
+   for (unsigned i = 0; i < ss->sysvals.sysval_count; ++i) {
+      int sysval = ss->sysvals.sysvals[i];
 
       switch (PAN_SYSVAL_TYPE(sysval)) {
       case PAN_SYSVAL_VIEWPORT_SCALE:
@@ -1475,7 +1475,7 @@ panfrost_emit_const_buf(struct panfrost_batch *batch,
       return 0;
 
    /* Allocate room for the sysval and the uniforms */
-   size_t sys_size = sizeof(float) * 4 * ss->info.sysvals.sysval_count;
+   size_t sys_size = sizeof(float) * 4 * ss->sysvals.sysval_count;
    struct panfrost_ptr transfer =
       pan_pool_alloc_aligned(&batch->pool.base, sys_size, 16);
 
@@ -1538,7 +1538,7 @@ panfrost_emit_const_buf(struct panfrost_batch *batch,
          unsigned sysval_idx = src.offset / 16;
          unsigned sysval_comp = (src.offset % 16) / 4;
          unsigned sysval_type =
-            PAN_SYSVAL_TYPE(ss->info.sysvals.sysvals[sysval_idx]);
+            PAN_SYSVAL_TYPE(ss->sysvals.sysvals[sysval_idx]);
          mali_ptr ptr = push_transfer.gpu + (4 * i);
 
          if (sysval_type == PAN_SYSVAL_NUM_WORK_GROUPS)
index 86c6560..9df4c0a 100644 (file)
@@ -297,6 +297,7 @@ struct panfrost_compiled_shader {
    uint32_t partial_rsd[RSD_WORDS];
 
    struct pan_shader_info info;
+   struct panfrost_sysvals sysvals;
 
    struct pan_earlyzs_lut earlyzs;
 
@@ -353,6 +354,7 @@ struct panfrost_uncompiled_shader {
 struct panfrost_shader_binary {
    /* Collected information about the compiled shader */
    struct pan_shader_info info;
+   struct panfrost_sysvals sysvals;
 
    /* The binary itself */
    struct util_dynarray binary;
index dfe57dd..382c588 100644 (file)
@@ -89,10 +89,12 @@ panfrost_disk_cache_store(struct disk_cache *cache,
     * 1. Size of program binary
     * 2. Program binary
     * 3. Shader info
+    * 4. System values
     */
    blob_write_uint32(&blob, binary->binary.size);
    blob_write_bytes(&blob, binary->binary.data, binary->binary.size);
    blob_write_bytes(&blob, &binary->info, sizeof(binary->info));
+   blob_write_bytes(&blob, &binary->sysvals, sizeof(binary->sysvals));
 
    disk_cache_put(cache, cache_key, blob.data, blob.size, NULL);
    blob_finish(&blob);
@@ -140,6 +142,7 @@ panfrost_disk_cache_retrieve(struct disk_cache *cache,
 
    blob_copy_bytes(&blob, ptr, binary_size);
    blob_copy_bytes(&blob, &binary->info, sizeof(binary->info));
+   blob_copy_bytes(&blob, &binary->sysvals, sizeof(binary->sysvals));
 
    free(buffer);
 
index 5a1859f..b65390d 100644 (file)
@@ -30,8 +30,8 @@ panfrost_analyze_sysvals(struct panfrost_compiled_shader *ss)
    unsigned dirty = 0;
    unsigned dirty_shader = PAN_DIRTY_STAGE_SHADER | PAN_DIRTY_STAGE_CONST;
 
-   for (unsigned i = 0; i < ss->info.sysvals.sysval_count; ++i) {
-      switch (PAN_SYSVAL_TYPE(ss->info.sysvals.sysvals[i])) {
+   for (unsigned i = 0; i < ss->sysvals.sysval_count; ++i) {
+      switch (PAN_SYSVAL_TYPE(ss->sysvals.sysvals[i])) {
       case PAN_SYSVAL_VIEWPORT_SCALE:
       case PAN_SYSVAL_VIEWPORT_OFFSET:
          dirty |= PAN_DIRTY_VIEWPORT;
index 544e7d5..7034ce5 100644 (file)
@@ -133,11 +133,9 @@ panfrost_shader_compile(struct panfrost_screen *screen, const nir_shader *ir,
                  dev->gpu_id < 0x700);
    }
 
-   struct panfrost_sysvals sysvals = {0};
-   NIR_PASS_V(s, panfrost_nir_lower_sysvals, &sysvals);
+   NIR_PASS_V(s, panfrost_nir_lower_sysvals, &out->sysvals);
 
    screen->vtbl.compile_shader(s, &inputs, &out->binary, &out->info);
-   out->info.sysvals = sysvals;
 
    assert(req_local_mem >= out->info.wls_size);
    out->info.wls_size = req_local_mem;
@@ -176,6 +174,7 @@ panfrost_shader_get(struct pipe_screen *pscreen,
    }
 
    state->info = res.info;
+   state->sysvals = res.sysvals;
 
    if (res.binary.size) {
       state->bin = panfrost_pool_take_ref(
index 17388e5..aacf926 100644 (file)
@@ -891,9 +891,6 @@ GENX(pan_blend_get_shader_locked)(const struct panfrost_device *dev,
 
    GENX(pan_shader_compile)(nir, &inputs, &variant->binary, &info);
 
-   /* Blend shaders can't have sysvals */
-   assert(info.sysvals.sysval_count == 0);
-
    variant->work_reg_count = info.work_reg_count;
 
 #if PAN_ARCH <= 5
index fa75954..95dd947 100644 (file)
@@ -640,9 +640,6 @@ pan_blitter_get_blit_shader(struct panfrost_device *dev,
 
    GENX(pan_shader_compile)(b.shader, &inputs, &binary, &shader->info);
 
-   /* Blit shaders shouldn't have sysvals */
-   assert(shader->info.sysvals.sysval_count == 0);
-
    shader->key = *key;
    shader->address =
       pan_pool_upload_aligned(dev->blitter.shaders.pool, binary.data,
index 0a9e70a..e84e8de 100644 (file)
@@ -136,7 +136,6 @@ pan_indirect_dispatch_init(struct panfrost_device *dev)
 
    assert(!shader_info.tls_size);
    assert(!shader_info.wls_size);
-   assert(!shader_info.sysvals.sysval_count);
 
    shader_info.push.count =
       DIV_ROUND_UP(sizeof(struct pan_indirect_dispatch_info), 4);
index f1e30d0..0ed6ef2 100644 (file)
@@ -348,8 +348,6 @@ struct pan_shader_info {
       struct pan_shader_varying output[PAN_MAX_VARYINGS];
    } varyings;
 
-   struct panfrost_sysvals sysvals;
-
    /* UBOs to push to Register Mapped Uniforms (Midgard) or Fast Access
     * Uniforms (Bifrost) */
    struct panfrost_ubo_push push;
index 34dc483..eb65e07 100644 (file)
@@ -836,7 +836,6 @@ struct panvk_pipeline {
 
    struct {
       unsigned ubo_idx;
-      struct panfrost_sysvals ids;
    } sysvals[MESA_SHADER_STAGES];
 
    unsigned tls_size;
index a03641a..8f01a0d 100644 (file)
@@ -242,7 +242,6 @@ panvk_pipeline_builder_init_sysvals(struct panvk_pipeline_builder *builder,
 {
    const struct panvk_shader *shader = builder->shaders[stage];
 
-   pipeline->sysvals[stage].ids = shader->info.sysvals;
    pipeline->sysvals[stage].ubo_idx = shader->sysval_ubo;
 }