ac/radeonsi: move some aspects of sanity checking to ac_surface

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Nicolai Hähnle 2017-05-10 20:44:51 +02:00
parent 00f466bad9
commit 4d6e75776d
2 changed files with 33 additions and 16 deletions

View File

@ -30,6 +30,7 @@
#include "util/macros.h"
#include "util/u_math.h"
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <amdgpu.h>
@ -202,6 +203,32 @@ ADDR_HANDLE amdgpu_addr_create(enum radeon_family family,
return addrCreateOutput.hLib;
}
static int surf_config_sanity(const struct ac_surf_config *config)
{
/* all dimension must be at least 1 ! */
if (!config->info.width || !config->info.height || !config->info.depth ||
!config->info.array_size || !config->info.levels)
return -EINVAL;
switch (config->info.samples) {
case 0:
case 1:
case 2:
case 4:
case 8:
break;
default:
return -EINVAL;
}
if (config->is_3d && config->info.array_size > 1)
return -EINVAL;
if (config->is_cube && config->info.depth > 1)
return -EINVAL;
return 0;
}
static int gfx6_compute_level(ADDR_HANDLE addrlib,
const struct ac_surf_config *config,
struct radeon_surf *surf, bool is_stencil,
@ -1016,6 +1043,12 @@ int ac_compute_surface(ADDR_HANDLE addrlib,
enum radeon_surf_mode mode,
struct radeon_surf *surf)
{
int r;
r = surf_config_sanity(config);
if (r)
return r;
if (config->chip_class >= GFX9)
return gfx9_compute_surface(addrlib, config, mode, surf);
else

View File

@ -34,22 +34,6 @@
static int amdgpu_surface_sanity(const struct pipe_resource *tex)
{
/* all dimension must be at least 1 ! */
if (!tex->width0 || !tex->height0 || !tex->depth0 ||
!tex->array_size)
return -EINVAL;
switch (tex->nr_samples) {
case 0:
case 1:
case 2:
case 4:
case 8:
break;
default:
return -EINVAL;
}
switch (tex->target) {
case PIPE_TEXTURE_1D:
if (tex->height0 > 1)