radeonsi: set up HTILE in descriptors only when level 0 is accessible
[mesa.git] / src / gallium / drivers / radeonsi / si_descriptors.c
index acf6fb47fae5870c77a539855d4959c6a9c04b33..b080562348c540a7be8eaa88af9aa09befa5ccf4 100644 (file)
@@ -432,7 +432,7 @@ void si_set_mutable_tex_desc_fields(struct si_screen *sscreen,
 
                        if (sscreen->b.chip_class <= VI)
                                meta_va += base_level_info->dcc_offset;
-               } else if (tex->tc_compatible_htile) {
+               } else if (tex->tc_compatible_htile && first_level == 0) {
                        meta_va = tex->resource.gpu_address + tex->htile_offset;
                }
 
@@ -2192,6 +2192,8 @@ void si_emit_graphics_shader_userdata(struct si_context *sctx,
                                               R_00B330_SPI_SHADER_USER_DATA_ES_0);
                        si_emit_shader_pointer(sctx, descs,
                                               R_00B430_SPI_SHADER_USER_DATA_HS_0);
+                       si_emit_shader_pointer(sctx, descs,
+                                              R_00B530_SPI_SHADER_USER_DATA_LS_0);
                }
        }
 
@@ -2359,7 +2361,7 @@ static void si_invalidate_bindless_buf_desc(struct si_context *sctx,
                                            uint64_t offset)
 {
        struct r600_resource *buf = r600_resource(resource);
-       uint32_t *desc_list = desc->desc_list;
+       uint32_t *desc_list = desc->desc_list + 4;
        uint64_t old_desc_va;
 
        assert(resource->target == PIPE_BUFFER);
@@ -2372,7 +2374,7 @@ static void si_invalidate_bindless_buf_desc(struct si_context *sctx,
                /* The buffer has been invalidated when the handle wasn't
                 * resident, update the descriptor and the dirty flag.
                 */
-               si_set_buf_desc_address(buf, offset, &desc_list[4]);
+               si_set_buf_desc_address(buf, offset, &desc_list[0]);
 
                desc->dirty = true;
                sctx->bindless_descriptors_dirty = true;
@@ -2940,6 +2942,8 @@ void si_release_all_descriptors(struct si_context *sctx)
        }
        si_release_buffer_resources(&sctx->rw_buffers,
                                    &sctx->descriptors[SI_DESCS_RW_BUFFERS]);
+       for (i = 0; i < SI_NUM_VERTEX_BUFFERS; i++)
+               pipe_vertex_buffer_unreference(&sctx->vertex_buffer[i]);
 
        for (i = 0; i < SI_NUM_DESCS; ++i)
                si_release_descriptors(&sctx->descriptors[i]);