state_tracker: Handle texture view min level in st_generate_mipmap()
authorPaul Gofman <gofmanp@gmail.com>
Mon, 4 Nov 2019 12:31:10 +0000 (15:31 +0300)
committerMarek Olšák <marek.olsak@amd.com>
Mon, 4 Nov 2019 18:24:31 +0000 (13:24 -0500)
Signed-off-by: Paul Gofman <gofmanp@gmail.com>
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
src/mesa/state_tracker/st_gen_mipmap.c

index b71a8ee57bb48eb8f0aa8d16dac1a9ba337bb16c..9c7d955a45b353b41d21815113fda66b9132d127 100644 (file)
@@ -56,13 +56,16 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target,
    struct st_context *st = st_context(ctx);
    struct st_texture_object *stObj = st_texture_object(texObj);
    struct pipe_resource *pt = st_get_texobj_resource(texObj);
-   const uint baseLevel = texObj->BaseLevel;
+   uint baseLevel = texObj->BaseLevel;
    enum pipe_format format;
    uint lastLevel, first_layer, last_layer;
 
    if (!pt)
       return;
 
+   if (texObj->Immutable)
+      baseLevel += texObj->MinLevel;
+
    /* not sure if this ultimately actually should work,
       but we're not supporting multisampled textures yet. */
    assert(pt->nr_samples < 2);
@@ -70,6 +73,9 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target,
    /* find expected last mipmap level to generate*/
    lastLevel = _mesa_compute_num_levels(ctx, texObj, target) - 1;
 
+   if (texObj->Immutable)
+      lastLevel += texObj->MinLevel;
+
    if (lastLevel == 0)
       return;