freedreno/a6xx: use single format enum
[mesa.git] / src / gallium / drivers / freedreno / a6xx / fd6_image.c
index 7a126ddf7b998437d8ac35827ad9583dffda7486..6ac3cc5c4c9dc111b5a6c706d8b39e7bffad632e 100644 (file)
@@ -38,7 +38,7 @@
 struct fd6_image {
        struct pipe_resource *prsc;
        enum pipe_format pfmt;
-       enum a6xx_tex_fmt fmt;
+       enum a6xx_format fmt;
        enum a6xx_tex_fetchsize fetchsize;
        enum a6xx_tex_type type;
        bool srgb;
@@ -197,9 +197,16 @@ static void emit_image_tex(struct fd_ringbuffer *ring, struct fd6_image *img)
 
        if (ubwc_enabled) {
                struct fdl_slice *ubwc_slice = &rsc->layout.ubwc_slices[img->level];
+
+               uint32_t block_width, block_height;
+               fdl6_get_ubwc_blockwidth(&rsc->layout, &block_width, &block_height);
+
                OUT_RELOC(ring, rsc->bo, img->ubwc_offset, 0, 0);
-               OUT_RING(ring, A6XX_TEX_CONST_9_FLAG_BUFFER_ARRAY_PITCH(rsc->layout.ubwc_size));
-               OUT_RING(ring, A6XX_TEX_CONST_10_FLAG_BUFFER_PITCH(ubwc_slice->pitch));
+               OUT_RING(ring, A6XX_TEX_CONST_9_FLAG_BUFFER_ARRAY_PITCH(rsc->layout.ubwc_layer_size >> 2));
+               OUT_RING(ring,
+                               A6XX_TEX_CONST_10_FLAG_BUFFER_PITCH(ubwc_slice->pitch) |
+                               A6XX_TEX_CONST_10_FLAG_BUFFER_LOGW(util_logbase2_ceil(DIV_ROUND_UP(img->width, block_width))) |
+                               A6XX_TEX_CONST_10_FLAG_BUFFER_LOGH(util_logbase2_ceil(DIV_ROUND_UP(img->height, block_height))));
        } else {
                OUT_RING(ring, 0x00000000);   /* texconst7 */
                OUT_RING(ring, 0x00000000);   /* texconst8 */
@@ -266,7 +273,7 @@ static void emit_image_ssbo(struct fd_ringbuffer *ring, struct fd6_image *img)
        if (ubwc_enabled) {
                struct fdl_slice *ubwc_slice = &rsc->layout.ubwc_slices[img->level];
                OUT_RELOCW(ring, rsc->bo, img->ubwc_offset, 0, 0);
-               OUT_RING(ring, A6XX_IBO_9_FLAG_BUFFER_ARRAY_PITCH(rsc->layout.ubwc_size));
+               OUT_RING(ring, A6XX_IBO_9_FLAG_BUFFER_ARRAY_PITCH(rsc->layout.ubwc_layer_size >> 2));
                OUT_RING(ring, A6XX_IBO_10_FLAG_BUFFER_PITCH(ubwc_slice->pitch));
        } else {
                OUT_RING(ring, 0x00000000);