[PATCH 3/6] wined3d: Check for compressed and height scaled formats in texture_init().
Henri Verbeet
hverbeet at codeweavers.com
Mon Mar 21 11:40:12 CDT 2016
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
dlls/wined3d/surface.c | 23 ++---------------------
dlls/wined3d/texture.c | 11 +++++++++++
2 files changed, 13 insertions(+), 21 deletions(-)
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 5842d52..7878ee0 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -518,7 +518,7 @@ static void surface_evict_sysmem(struct wined3d_surface *surface)
surface_invalidate_location(surface, WINED3D_LOCATION_SYSMEM);
}
-static HRESULT surface_private_setup(struct wined3d_surface *surface)
+static void surface_private_setup(struct wined3d_surface *surface)
{
/* TODO: Check against the maximum texture sizes supported by the video card. */
struct wined3d_texture *texture = surface->container;
@@ -546,24 +546,11 @@ static HRESULT surface_private_setup(struct wined3d_surface *surface)
surface->pow2Width = pow2Width;
surface->pow2Height = pow2Height;
- if (pow2Width > surface->resource.width || pow2Height > surface->resource.height)
- {
- /* TODO: Add support for non power two compressed textures. */
- if (texture->resource.format_flags & (WINED3DFMT_FLAG_COMPRESSED | WINED3DFMT_FLAG_HEIGHT_SCALE))
- {
- FIXME("(%p) Compressed or height scaled non-power-two textures are not supported w(%d) h(%d)\n",
- surface, surface->resource.width, surface->resource.height);
- return WINED3DERR_NOTAVAILABLE;
- }
- }
-
if (texture->resource.usage & WINED3DUSAGE_DEPTHSTENCIL)
surface->locations = WINED3D_LOCATION_DISCARDED;
if (wined3d_texture_use_pbo(texture, gl_info))
surface->resource.map_binding = WINED3D_LOCATION_BUFFER;
-
- return WINED3D_OK;
}
static BOOL surface_is_full_rect(const struct wined3d_surface *surface, const RECT *r)
@@ -4627,13 +4614,7 @@ HRESULT wined3d_surface_init(struct wined3d_surface *surface, struct wined3d_tex
surface->texture_level = level;
surface->texture_layer = layer;
- /* Call the private setup routine */
- if (FAILED(hr = surface_private_setup(surface)))
- {
- ERR("Private setup failed, hr %#x.\n", hr);
- wined3d_surface_cleanup(surface);
- return hr;
- }
+ surface_private_setup(surface);
/* Similar to lockable rendertargets above, creating the DIB section
* during surface initialization prevents the sysmem pointer from changing
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index 588066f..7e28681 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -1423,6 +1423,17 @@ static HRESULT texture_init(struct wined3d_texture *texture, const struct wined3
if (!gl_info->supported[ARB_TEXTURE_RECTANGLE] && !gl_info->supported[WINED3D_GL_NORMALIZED_TEXRECT])
{
+ const struct wined3d_format *format = wined3d_get_format(gl_info, desc->format);
+
+ /* TODO: Add support for non-power-of-two compressed textures. */
+ if (format->flags[WINED3D_GL_RES_TYPE_TEX_2D]
+ & (WINED3DFMT_FLAG_COMPRESSED | WINED3DFMT_FLAG_HEIGHT_SCALE))
+ {
+ FIXME("Compressed or height scaled non-power-of-two (%ux%u) textures are not supported.\n",
+ desc->width, desc->height);
+ return WINED3DERR_NOTAVAILABLE;
+ }
+
/* Find the nearest pow2 match. */
pow2_width = pow2_height = 1;
while (pow2_width < desc->width)
--
2.1.4
More information about the wine-patches
mailing list