Reviewed-by: David Heidelberg <da...@ixit.cz> Signed-off-by: Axel Davy <axel.d...@ens.fr> --- src/gallium/state_trackers/nine/cubetexture9.c | 8 ++++++++ src/gallium/state_trackers/nine/texture9.c | 9 ++++++++- src/gallium/state_trackers/nine/volumetexture9.c | 10 +++++++++- 3 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/src/gallium/state_trackers/nine/cubetexture9.c b/src/gallium/state_trackers/nine/cubetexture9.c index 2c607c0..43db8cb 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,6 +57,12 @@ 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); 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.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev