[Mesa-dev] [PATCH v2 11/52] st/nine: Return D3DERR_INVALIDCALL when trying to create a texture of bad format

Ilia Mirkin imirkin at alum.mit.edu
Sat Jan 10 09:26:29 PST 2015


On Sat, Jan 10, 2015 at 5:33 AM, Axel Davy <axel.davy at ens.fr> wrote:
> Reviewed-by: David Heidelberg <david at ixit.cz>
> Signed-off-by: Axel Davy <axel.davy at ens.fr>

Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>

> ---

It is customary to include what changes were made from v1 -> v2. I do
it below the --- line since I don't think it belongs in git commit
history, others include it in the log (I believe due to the simplicity
of usage, but perhaps there's another argument).

>  src/gallium/state_trackers/nine/cubetexture9.c   | 10 +++++++++-
>  src/gallium/state_trackers/nine/texture9.c       |  9 ++++++++-
>  src/gallium/state_trackers/nine/volumetexture9.c | 10 +++++++++-
>  3 files changed, 26 insertions(+), 3 deletions(-)
>
> diff --git a/src/gallium/state_trackers/nine/cubetexture9.c b/src/gallium/state_trackers/nine/cubetexture9.c
> index 2c607c0..bb1219a 100644
> --- a/src/gallium/state_trackers/nine/cubetexture9.c
> +++ b/src/gallium/state_trackers/nine/cubetexture9.c
> @@ -38,6 +38,8 @@ NineCubeTexture9_ctor( struct NineCubeTexture9 *This,
>                         HANDLE *pSharedHandle )
>  {
>      struct pipe_resource *info = &This->base.base.info;
> +    struct pipe_screen *screen = pParams->device->screen;
> +    enum pipe_format pf;
>      unsigned i;
>      D3DSURFACE_DESC sfdesc;
>      HRESULT hr;
> @@ -55,9 +57,15 @@ NineCubeTexture9_ctor( struct NineCubeTexture9 *This,
>      if (Usage & D3DUSAGE_AUTOGENMIPMAP)
>          Levels = 0;
>
> +    pf = d3d9_to_pipe_format(Format);
> +    if (pf == PIPE_FORMAT_NONE ||
> +        !screen->is_format_supported(screen, pf, PIPE_TEXTURE_CUBE, 0, PIPE_BIND_SAMPLER_VIEW)) {
> +        return D3DERR_INVALIDCALL;
> +    }
> +
>      info->screen = pParams->device->screen;
>      info->target = PIPE_TEXTURE_CUBE;
> -    info->format = d3d9_to_pipe_format(Format);
> +    info->format = pf;
>      info->width0 = EdgeLength;
>      info->height0 = EdgeLength;
>      info->depth0 = 1;
> diff --git a/src/gallium/state_trackers/nine/texture9.c b/src/gallium/state_trackers/nine/texture9.c
> index 8852142..4d7e950 100644
> --- a/src/gallium/state_trackers/nine/texture9.c
> +++ b/src/gallium/state_trackers/nine/texture9.c
> @@ -47,6 +47,7 @@ NineTexture9_ctor( struct NineTexture9 *This,
>      struct pipe_screen *screen = pParams->device->screen;
>      struct pipe_resource *info = &This->base.base.info;
>      struct pipe_resource *resource;
> +    enum pipe_format pf;
>      unsigned l;
>      D3DSURFACE_DESC sfdesc;
>      HRESULT hr;
> @@ -92,9 +93,15 @@ NineTexture9_ctor( struct NineTexture9 *This,
>      if (Usage & D3DUSAGE_AUTOGENMIPMAP)
>          Levels = 0;
>
> +    pf = d3d9_to_pipe_format(Format);
> +    if (Format != D3DFMT_NULL && (pf == PIPE_FORMAT_NONE ||
> +        !screen->is_format_supported(screen, pf, PIPE_TEXTURE_2D, 0, PIPE_BIND_SAMPLER_VIEW))) {
> +        return D3DERR_INVALIDCALL;
> +    }
> +
>      info->screen = screen;
>      info->target = PIPE_TEXTURE_2D;
> -    info->format = d3d9_to_pipe_format(Format);
> +    info->format = pf;
>      info->width0 = Width;
>      info->height0 = Height;
>      info->depth0 = 1;
> diff --git a/src/gallium/state_trackers/nine/volumetexture9.c b/src/gallium/state_trackers/nine/volumetexture9.c
> index 9366dc9..f116899 100644
> --- a/src/gallium/state_trackers/nine/volumetexture9.c
> +++ b/src/gallium/state_trackers/nine/volumetexture9.c
> @@ -37,6 +37,8 @@ NineVolumeTexture9_ctor( struct NineVolumeTexture9 *This,
>                           HANDLE *pSharedHandle )
>  {
>      struct pipe_resource *info = &This->base.base.info;
> +    struct pipe_screen *screen = pParams->device->screen;
> +    enum pipe_format pf;
>      unsigned l;
>      D3DVOLUME_DESC voldesc;
>      HRESULT hr;
> @@ -57,9 +59,15 @@ NineVolumeTexture9_ctor( struct NineVolumeTexture9 *This,
>      if (Usage & D3DUSAGE_AUTOGENMIPMAP)
>          Levels = 0;
>
> +    pf = d3d9_to_pipe_format(Format);
> +    if (pf == PIPE_FORMAT_NONE ||
> +        !screen->is_format_supported(screen, pf, PIPE_TEXTURE_3D, 0, PIPE_BIND_SAMPLER_VIEW)) {
> +        return D3DERR_INVALIDCALL;
> +    }
> +
>      info->screen = pParams->device->screen;
>      info->target = PIPE_TEXTURE_3D;
> -    info->format = d3d9_to_pipe_format(Format);
> +    info->format = pf;
>      info->width0 = Width;
>      info->height0 = Height;
>      info->depth0 = Depth;
> --
> 2.1.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list