On 22 May 2015 at 10:11, Stefan Dösinger <stefan(a)codeweavers.com> wrote:
> @@ -1145,18 +1151,21 @@ static HRESULT texture_init(struct wined3d_texture *texture, const struct wined3
> /* WINED3DUSAGE_DEPTHSTENCIL needs WINED3DFMT_FLAG_DEPTH or WINED3DFMT_FLAG_STENCIL, not both. */
>
> if ((format->flags[WINED3D_GL_RES_TYPE_TEX_2D] & required_flags) == required_flags
> - && (!(desc->usage & WINED3DUSAGE_DEPTHSTENCIL) || (format->flags[WINED3D_GL_RES_TYPE_TEX_2D] & ds_flags))
> + && check_ds_support(format, WINED3D_GL_RES_TYPE_TEX_2D, desc->usage)
> && (gl_info->supported[WINED3D_GL_NORMALIZED_TEXRECT]
> || (desc->width == pow2_width && desc->height == pow2_height)))
> gl_type = WINED3D_GL_RES_TYPE_TEX_2D;
> else if ((format->flags[WINED3D_GL_RES_TYPE_TEX_RECT] & required_flags) == required_flags
> - && (!(desc->usage & WINED3DUSAGE_DEPTHSTENCIL) || (format->flags[WINED3D_GL_RES_TYPE_TEX_RECT] & ds_flags)))
> + && check_ds_support(format, WINED3D_GL_RES_TYPE_TEX_RECT, desc->usage))
> gl_type = WINED3D_GL_RES_TYPE_TEX_RECT;
> + else if ((format->flags[WINED3D_GL_RES_TYPE_RB] & required_flags) == required_flags
> + && check_ds_support(format, WINED3D_GL_RES_TYPE_RB, desc->usage))
> + gl_type = WINED3D_GL_RES_TYPE_RB;
> else
> gl_type = WINED3D_GL_RES_TYPE_TEX_2D; /* No error, may be SCRATCH pool or emulated conditional np2. */
>
This is kind of ok because the existing code is like this, but notice
the similarity to some of the code in resource_init(). In fact, is
there any reason the caller needs to pass "gl_type" to resource_init()
instead of letting it figure it out on its own?
> -static void delete_fbo_attachment(const struct wined3d_gl_info *gl_info)
> +static void delete_fbo_attachment(const struct wined3d_gl_info *gl_info,
> + enum wined3d_gl_resource_type d3d_type, GLuint *object)
> {
> - gl_info->fbo_ops.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
> - GL_TEXTURE_2D, 0, 0);
> + switch (d3d_type)
> + {
> + case WINED3D_GL_RES_TYPE_TEX_1D:
> + case WINED3D_GL_RES_TYPE_TEX_2D:
> + case WINED3D_GL_RES_TYPE_TEX_RECT:
> + case WINED3D_GL_RES_TYPE_TEX_3D:
> + case WINED3D_GL_RES_TYPE_TEX_CUBE:
> + gl_info->gl_ops.gl.p_glDeleteTextures(1, object);
> + break;
> +
> + case WINED3D_GL_RES_TYPE_RB:
> + gl_info->fbo_ops.glDeleteRenderbuffers(1, object);
> + break;
> +
> + case WINED3D_GL_RES_TYPE_BUFFER:
> + case WINED3D_GL_RES_TYPE_COUNT:
> + break;
> + }
> }
Why is "object" a pointer?