[PATCH v3 5/9] wined3d: Implement texture1d_prepare_texture().

Sven Hesse shesse at codeweavers.com
Wed Feb 7 09:35:05 CST 2018


Signed-off-by: Sven Hesse <shesse at codeweavers.com>
---
 dlls/wined3d/texture.c | 45 ++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 44 insertions(+), 1 deletion(-)

diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index 99bcfdf888..d2bc70fae1 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -1649,7 +1649,50 @@ static BOOL texture1d_load_location(struct wined3d_texture *texture, unsigned in
 
 static void texture1d_prepare_texture(struct wined3d_texture *texture, struct wined3d_context *context, BOOL srgb)
 {
-    FIXME("Not implemented.\n");
+    const struct wined3d_format *format = texture->resource.format;
+    GLenum internal = srgb ? format->glGammaInternal : format->glInternal;
+    unsigned int sub_count = texture->level_count * texture->layer_count;
+    const struct wined3d_gl_info *gl_info = context->gl_info;
+    unsigned int i;
+
+    wined3d_texture_bind_and_dirtify(texture, context, srgb);
+
+    if (wined3d_texture_use_immutable_storage(texture, gl_info))
+    {
+        if (texture->target == GL_TEXTURE_1D_ARRAY)
+        {
+            GL_EXTCALL(glTexStorage2D(GL_TEXTURE_1D_ARRAY, texture->level_count, internal,
+                wined3d_texture_get_level_width(texture, 0), texture->layer_count));
+            checkGLcall("glTexStorage2D");
+        }
+        else
+        {
+            GL_EXTCALL(glTexStorage1D(GL_TEXTURE_1D, texture->level_count, internal,
+                wined3d_texture_get_level_width(texture, 0)));
+            checkGLcall("glTexStorage1D");
+        }
+    }
+    else
+    {
+        for (i = 0; i < sub_count; ++i)
+        {
+            struct wined3d_surface *surface = texture->sub_resources[i].u.surface;
+
+            if (texture->target == GL_TEXTURE_1D_ARRAY)
+            {
+                gl_info->gl_ops.gl.p_glTexImage2D(GL_TEXTURE_1D_ARRAY, surface->texture_level, internal,
+                    wined3d_texture_get_level_width(texture, i), texture->layer_count, 0,
+                    format->glFormat, format->glType, NULL);
+                checkGLcall("glTexImage2D");
+            }
+            else
+            {
+                gl_info->gl_ops.gl.p_glTexImage1D(GL_TEXTURE_1D, surface->texture_level, internal,
+                    wined3d_texture_get_level_width(texture, i), 0, format->glFormat, format->glType, NULL);
+                checkGLcall("glTexImage1D");
+            }
+        }
+    }
 }
 
 static void texture1d_cleanup_sub_resources(struct wined3d_texture *texture)
-- 
2.16.1




More information about the wine-devel mailing list