For Vulkan backend.
Signed-off-by: Józef Kucia jkucia@codeweavers.com --- dlls/wined3d/resource.c | 32 ++++++++++++++++++++++++++++++ dlls/wined3d/texture.c | 36 ++-------------------------------- dlls/wined3d/wined3d_private.h | 1 + 3 files changed, 35 insertions(+), 34 deletions(-)
diff --git a/dlls/wined3d/resource.c b/dlls/wined3d/resource.c index ba71df1e323d..2897ab143c1f 100644 --- a/dlls/wined3d/resource.c +++ b/dlls/wined3d/resource.c @@ -509,3 +509,35 @@ const struct wined3d_format *wined3d_resource_get_decompress_format(const struct return wined3d_get_format(adapter, WINED3DFMT_B8G8R8A8_UNORM_SRGB, resource->bind_flags); return wined3d_get_format(adapter, WINED3DFMT_B8G8R8A8_UNORM, resource->bind_flags); } + +unsigned int wined3d_resource_get_sample_count(const struct wined3d_resource *resource) +{ + const struct wined3d_format *format = resource->format; + + /* TODO: NVIDIA expose their Coverage Sample Anti-Aliasing (CSAA) + * feature through type == MULTISAMPLE_XX and quality != 0. This could + * be mapped to GL_NV_framebuffer_multisample_coverage. + * + * AMD have a similar feature called Enhanced Quality Anti-Aliasing + * (EQAA), but it does not have an equivalent OpenGL extension. */ + + /* We advertise as many WINED3D_MULTISAMPLE_NON_MASKABLE quality + * levels as the count of advertised multisample types for the texture + * format. */ + if (resource->multisample_type == WINED3D_MULTISAMPLE_NON_MASKABLE) + { + unsigned int i, count = 0; + + for (i = 0; i < sizeof(format->multisample_types) * CHAR_BIT; ++i) + { + if (format->multisample_types & 1u << i) + { + if (resource->multisample_quality == count++) + break; + } + } + return i + 1; + } + + return resource->multisample_type; +} diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c index cb9ac2aa4ffb..55c9543f30b1 100644 --- a/dlls/wined3d/texture.c +++ b/dlls/wined3d/texture.c @@ -530,38 +530,6 @@ static void gltexture_delete(struct wined3d_device *device, const struct wined3d tex->name = 0; }
-static unsigned int wined3d_texture_get_gl_sample_count(const struct wined3d_texture *texture) -{ - const struct wined3d_format *format = texture->resource.format; - - /* TODO: NVIDIA expose their Coverage Sample Anti-Aliasing (CSAA) - * feature through type == MULTISAMPLE_XX and quality != 0. This could - * be mapped to GL_NV_framebuffer_multisample_coverage. - * - * AMD have a similar feature called Enhanced Quality Anti-Aliasing - * (EQAA), but it does not have an equivalent OpenGL extension. */ - - /* We advertise as many WINED3D_MULTISAMPLE_NON_MASKABLE quality - * levels as the count of advertised multisample types for the texture - * format. */ - if (texture->resource.multisample_type == WINED3D_MULTISAMPLE_NON_MASKABLE) - { - unsigned int i, count = 0; - - for (i = 0; i < sizeof(format->multisample_types) * CHAR_BIT; ++i) - { - if (format->multisample_types & 1u << i) - { - if (texture->resource.multisample_quality == count++) - break; - } - } - return i + 1; - } - - return texture->resource.multisample_type; -} - /* Context activation is done by the caller. */ /* The caller is responsible for binding the correct texture. */ static void wined3d_texture_gl_allocate_mutable_storage(struct wined3d_texture_gl *texture_gl, @@ -624,7 +592,7 @@ static void wined3d_texture_gl_allocate_mutable_storage(struct wined3d_texture_g static void wined3d_texture_gl_allocate_immutable_storage(struct wined3d_texture_gl *texture_gl, GLenum gl_internal_format, const struct wined3d_gl_info *gl_info) { - unsigned int samples = wined3d_texture_get_gl_sample_count(&texture_gl->t); + unsigned int samples = wined3d_resource_get_sample_count(&texture_gl->t.resource); GLsizei height = wined3d_texture_get_level_pow2_height(&texture_gl->t, 0); GLsizei width = wined3d_texture_get_level_pow2_width(&texture_gl->t, 0); GLboolean standard_pattern = texture_gl->t.resource.multisample_type != WINED3D_MULTISAMPLE_NON_MASKABLE @@ -1813,7 +1781,7 @@ static void wined3d_texture_gl_prepare_rb(struct wined3d_texture_gl *texture_gl, if (texture_gl->rb_multisample) return;
- samples = wined3d_texture_get_gl_sample_count(&texture_gl->t); + samples = wined3d_resource_get_sample_count(&texture_gl->t.resource);
gl_info->fbo_ops.glGenRenderbuffers(1, &texture_gl->rb_multisample); gl_info->fbo_ops.glBindRenderbuffer(GL_RENDERBUFFER, texture_gl->rb_multisample); diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index cc5902a8e75c..3d51a90e1b94 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -3227,6 +3227,7 @@ BOOL wined3d_resource_allocate_sysmem(struct wined3d_resource *resource) DECLSPE void wined3d_resource_free_sysmem(struct wined3d_resource *resource) DECLSPEC_HIDDEN; const struct wined3d_format *wined3d_resource_get_decompress_format( const struct wined3d_resource *resource) DECLSPEC_HIDDEN; +unsigned int wined3d_resource_get_sample_count(const struct wined3d_resource *resource) DECLSPEC_HIDDEN; GLbitfield wined3d_resource_gl_map_flags(DWORD d3d_flags) DECLSPEC_HIDDEN; GLenum wined3d_resource_gl_legacy_map_flags(DWORD d3d_flags) DECLSPEC_HIDDEN; BOOL wined3d_resource_is_offscreen(struct wined3d_resource *resource) DECLSPEC_HIDDEN;