From: Sven Hesse Subject: [PATCH v3 5/9] wined3d: Implement texture1d_prepare_texture(). Message-Id: <20180207153509.10627-5-shesse@codeweavers.com> Date: Wed, 7 Feb 2018 16:35:05 +0100 In-Reply-To: <20180207153509.10627-1-shesse@codeweavers.com> References: <20180207153509.10627-1-shesse@codeweavers.com> Signed-off-by: Sven Hesse --- 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