=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: wined3d: Introduce general helper function to get sample count for resource.
Alexandre Julliard
julliard at winehq.org
Mon Mar 4 15:08:26 CST 2019
Module: wine
Branch: master
Commit: e4bf926c3b88ac47c980498f0602887c13967157
URL: https://source.winehq.org/git/wine.git/?a=commit;h=e4bf926c3b88ac47c980498f0602887c13967157
Author: Józef Kucia <jkucia at codeweavers.com>
Date: Sun Mar 3 19:55:23 2019 +0100
wined3d: Introduce general helper function to get sample count for resource.
For Vulkan backend.
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
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 ba71df1..2897ab1 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 cb9ac2a..55c9543 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 cc5902a..3d51a90 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;
More information about the wine-cvs
mailing list