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:
parent
00f466bad9
commit
4d6e75776d
|
@ -30,6 +30,7 @@
|
||||||
#include "util/macros.h"
|
#include "util/macros.h"
|
||||||
#include "util/u_math.h"
|
#include "util/u_math.h"
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <amdgpu.h>
|
#include <amdgpu.h>
|
||||||
|
@ -202,6 +203,32 @@ ADDR_HANDLE amdgpu_addr_create(enum radeon_family family,
|
||||||
return addrCreateOutput.hLib;
|
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,
|
static int gfx6_compute_level(ADDR_HANDLE addrlib,
|
||||||
const struct ac_surf_config *config,
|
const struct ac_surf_config *config,
|
||||||
struct radeon_surf *surf, bool is_stencil,
|
struct radeon_surf *surf, bool is_stencil,
|
||||||
|
@ -1016,6 +1043,12 @@ int ac_compute_surface(ADDR_HANDLE addrlib,
|
||||||
enum radeon_surf_mode mode,
|
enum radeon_surf_mode mode,
|
||||||
struct radeon_surf *surf)
|
struct radeon_surf *surf)
|
||||||
{
|
{
|
||||||
|
int r;
|
||||||
|
|
||||||
|
r = surf_config_sanity(config);
|
||||||
|
if (r)
|
||||||
|
return r;
|
||||||
|
|
||||||
if (config->chip_class >= GFX9)
|
if (config->chip_class >= GFX9)
|
||||||
return gfx9_compute_surface(addrlib, config, mode, surf);
|
return gfx9_compute_surface(addrlib, config, mode, surf);
|
||||||
else
|
else
|
||||||
|
|
|
@ -34,22 +34,6 @@
|
||||||
|
|
||||||
static int amdgpu_surface_sanity(const struct pipe_resource *tex)
|
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) {
|
switch (tex->target) {
|
||||||
case PIPE_TEXTURE_1D:
|
case PIPE_TEXTURE_1D:
|
||||||
if (tex->height0 > 1)
|
if (tex->height0 > 1)
|
||||||
|
|
Loading…
Reference in New Issue