[PATCH 02/10] wined3d: Probe for compute shader limits.
Guillaume Charifi
guillaume.charifi at sfr.fr
Sun Jan 29 07:43:33 CST 2017
Signed-off-by: Guillaume Charifi <guillaume.charifi at sfr.fr>
---
dlls/wined3d/directx.c | 7 +++++++
dlls/wined3d/utils.c | 6 ++++++
dlls/wined3d/wined3d_private.h | 2 ++
3 files changed, 15 insertions(+)
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 037883c..9169942 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -3345,6 +3345,7 @@ static void wined3d_adapter_init_limits(struct wined3d_gl_info *gl_info)
gl_info->limits.vertex_uniform_blocks = 0;
gl_info->limits.geometry_uniform_blocks = 0;
gl_info->limits.fragment_uniform_blocks = 0;
+ gl_info->limits.compute_uniform_blocks = 0;
gl_info->limits.fragment_samplers = 1;
gl_info->limits.vertex_samplers = 0;
gl_info->limits.combined_samplers = gl_info->limits.fragment_samplers + gl_info->limits.vertex_samplers;
@@ -3551,6 +3552,12 @@ static void wined3d_adapter_init_limits(struct wined3d_gl_info *gl_info)
TRACE("Max fragment uniform blocks: %u (%d).\n", gl_info->limits.fragment_uniform_blocks, gl_max);
}
}
+ if (gl_info->supported[ARB_COMPUTE_SHADER] && gl_info->supported[ARB_UNIFORM_BUFFER_OBJECT])
+ {
+ gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_COMPUTE_UNIFORM_BLOCKS, &gl_max);
+ gl_info->limits.compute_uniform_blocks = min(gl_max, WINED3D_MAX_CBS);
+ TRACE("Max compute uniform blocks: %u (%d).\n", gl_info->limits.compute_uniform_blocks, gl_max);
+ }
if (gl_info->supported[ARB_UNIFORM_BUFFER_OBJECT])
{
gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_COMBINED_UNIFORM_BLOCKS, &gl_max);
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index e9ee90a..951e7ee 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -5924,6 +5924,12 @@ void wined3d_gl_limits_get_uniform_block_range(const struct wined3d_gl_limits *g
return;
*base += *count;
+ *count = gl_limits->compute_uniform_blocks;
+
+ if (shader_type == WINED3D_SHADER_TYPE_COMPUTE)
+ return;
+
+ *base += *count;
*count = 0;
ERR("Unhandled shader type %#x.\n", shader_type);
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 2fe5668..708d215 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -179,6 +179,7 @@ static inline enum complex_fixup get_complex_fixup(struct color_fixup_desc fixup
#define MAX_FRAGMENT_SAMPLERS 16
#define MAX_VERTEX_SAMPLERS 4
#define MAX_COMBINED_SAMPLERS (MAX_FRAGMENT_SAMPLERS + MAX_VERTEX_SAMPLERS)
+#define MAX_COMPUTE_SAMPLERS 16
#define MAX_ACTIVE_LIGHTS 8
#define MAX_CLIP_DISTANCES WINED3DMAXUSERCLIPPLANES
#define MAX_CONSTANT_BUFFERS 15
@@ -2143,6 +2144,7 @@ struct wined3d_gl_limits
unsigned int vertex_uniform_blocks;
unsigned int geometry_uniform_blocks;
unsigned int fragment_uniform_blocks;
+ unsigned int compute_uniform_blocks;
UINT fragment_samplers;
UINT vertex_samplers;
UINT combined_samplers;
--
Guillaume Charifi <guillaume.charifi at sfr.fr>
More information about the wine-patches
mailing list