freedreno/a6xx: handle non-UBWC-compatible texture views

Signed-off-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
This commit is contained in:
Rob Clark 2019-06-07 10:31:59 -07:00
parent fe5c7b2b75
commit dac3bc9862
3 changed files with 23 additions and 0 deletions

View file

@ -260,6 +260,24 @@ fd6_fill_ubwc_buffer_sizes(struct fd_resource *rsc)
return meta_size;
}
/**
* Ensure the rsc is in an ok state to be used with the specified format.
* This handles the case of UBWC buffers used with non-UBWC compatible
* formats, by triggering an uncompress.
*/
void
fd6_validate_format(struct fd_context *ctx, struct fd_resource *rsc,
enum pipe_format format)
{
if (!rsc->ubwc_size)
return;
if (ok_ubwc_format(fd6_pipe2color(format)))
return;
fd_resource_uncompress(ctx, rsc);
}
uint32_t
fd6_setup_slices(struct fd_resource *rsc)
{

View file

@ -31,6 +31,8 @@
#include "freedreno_resource.h"
uint32_t fd6_fill_ubwc_buffer_sizes(struct fd_resource *rsc);
void fd6_validate_format(struct fd_context *ctx, struct fd_resource *rsc,
enum pipe_format format);
uint32_t fd6_setup_slices(struct fd_resource *rsc);
#endif /* FD6_RESOURCE_H_ */

View file

@ -33,6 +33,7 @@
#include "util/hash_table.h"
#include "fd6_texture.h"
#include "fd6_resource.h"
#include "fd6_format.h"
#include "fd6_emit.h"
@ -225,6 +226,8 @@ fd6_sampler_view_create(struct pipe_context *pctx, struct pipe_resource *prsc,
if (!so)
return NULL;
fd6_validate_format(fd_context(pctx), rsc, format);
if (format == PIPE_FORMAT_X32_S8X24_UINT) {
rsc = rsc->stencil;
format = rsc->base.format;