From c56554168557eab90f3180ddf993389965ff86b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B3zef=20Kucia?= Date: Fri, 3 Mar 2017 01:30:29 +0100 Subject: [PATCH] wined3d: Add ARB_shader_atomic_counters extension. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Józef Kucia Signed-off-by: Henri Verbeet Signed-off-by: Alexandre Julliard --- dlls/wined3d/directx.c | 21 +++++++++++++++++++++ dlls/wined3d/glsl_shader.c | 3 +++ dlls/wined3d/wined3d_gl.h | 1 + 3 files changed, 25 insertions(+) diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index 5fa34e5ed55..425d1fd3dad 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -147,6 +147,7 @@ static const struct wined3d_extension_map gl_extension_map[] = {"GL_ARB_point_sprite", ARB_POINT_SPRITE }, {"GL_ARB_provoking_vertex", ARB_PROVOKING_VERTEX }, {"GL_ARB_sampler_objects", ARB_SAMPLER_OBJECTS }, + {"GL_ARB_shader_atomic_counters", ARB_SHADER_ATOMIC_COUNTERS }, {"GL_ARB_shader_bit_encoding", ARB_SHADER_BIT_ENCODING }, {"GL_ARB_shader_image_load_store", ARB_SHADER_IMAGE_LOAD_STORE }, {"GL_ARB_shader_image_size", ARB_SHADER_IMAGE_SIZE }, @@ -2788,6 +2789,8 @@ static void load_gl_funcs(struct wined3d_gl_info *gl_info) USE_GL_FUNC(glGetSamplerParameterfv) USE_GL_FUNC(glGetSamplerParameterIiv) USE_GL_FUNC(glGetSamplerParameterIuiv) + /* GL_ARB_shader_atomic_counters */ + USE_GL_FUNC(glGetActiveAtomicCounterBufferiv) /* GL_ARB_shader_image_load_store */ USE_GL_FUNC(glBindImageTexture) USE_GL_FUNC(glMemoryBarrier) @@ -3659,6 +3662,23 @@ static void wined3d_adapter_init_limits(struct wined3d_gl_info *gl_info) gl_info->limits.texture_buffer_offset_alignment = gl_max; TRACE("Minimum required texture buffer offset alignment %d.\n", gl_max); } + if (gl_info->supported[ARB_SHADER_ATOMIC_COUNTERS]) + { + GLint max_fragment_buffers, max_combined_buffers, max_bindings; + gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS, &max_fragment_buffers); + TRACE("Max fragment atomic counter buffers: %d.\n", max_fragment_buffers); + gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS, &max_combined_buffers); + TRACE("Max combined atomic counter buffers: %d.\n", max_combined_buffers); + gl_info->gl_ops.gl.p_glGetIntegerv(GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, &max_bindings); + TRACE("Max atomic counter buffer bindings: %d.\n", max_bindings); + if (max_fragment_buffers < MAX_UNORDERED_ACCESS_VIEWS + || max_combined_buffers < MAX_UNORDERED_ACCESS_VIEWS + || max_bindings < MAX_UNORDERED_ACCESS_VIEWS) + { + WARN("Disabling ARB_shader_atomic_counters.\n"); + gl_info->supported[ARB_SHADER_ATOMIC_COUNTERS] = FALSE; + } + } if (gl_info->supported[NV_LIGHT_MAX_EXPONENT]) gl_info->gl_ops.gl.p_glGetFloatv(GL_MAX_SHININESS_NV, &gl_info->limits.shininess); @@ -3766,6 +3786,7 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter, {ARB_INTERNALFORMAT_QUERY, MAKEDWORD_VERSION(4, 2)}, {ARB_MAP_BUFFER_ALIGNMENT, MAKEDWORD_VERSION(4, 2)}, + {ARB_SHADER_ATOMIC_COUNTERS, MAKEDWORD_VERSION(4, 2)}, {ARB_SHADER_IMAGE_LOAD_STORE, MAKEDWORD_VERSION(4, 2)}, {ARB_SHADING_LANGUAGE_420PACK, MAKEDWORD_VERSION(4, 2)}, {ARB_SHADING_LANGUAGE_PACKING, MAKEDWORD_VERSION(4, 2)}, diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index c6d2e393e23..9b1d5ee5b09 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -6619,6 +6619,8 @@ static void shader_glsl_enable_extensions(struct wined3d_string_buffer *buffer, { if (gl_info->supported[ARB_GPU_SHADER5]) shader_addline(buffer, "#extension GL_ARB_gpu_shader5 : enable\n"); + if (gl_info->supported[ARB_SHADER_ATOMIC_COUNTERS]) + shader_addline(buffer, "#extension GL_ARB_shader_atomic_counters : enable\n"); if (gl_info->supported[ARB_SHADER_BIT_ENCODING]) shader_addline(buffer, "#extension GL_ARB_shader_bit_encoding : enable\n"); if (gl_info->supported[ARB_SHADER_IMAGE_LOAD_STORE]) @@ -9444,6 +9446,7 @@ static void shader_glsl_get_caps(const struct wined3d_gl_info *gl_info, struct s && gl_info->supported[ARB_COMPUTE_SHADER] && gl_info->supported[ARB_DERIVATIVE_CONTROL] && gl_info->supported[ARB_GPU_SHADER5] + && gl_info->supported[ARB_SHADER_ATOMIC_COUNTERS] && gl_info->supported[ARB_SHADER_IMAGE_LOAD_STORE] && gl_info->supported[ARB_SHADER_IMAGE_SIZE] && gl_info->supported[ARB_SHADING_LANGUAGE_PACKING]) diff --git a/dlls/wined3d/wined3d_gl.h b/dlls/wined3d/wined3d_gl.h index fa5985c93b8..00fb7cb8890 100644 --- a/dlls/wined3d/wined3d_gl.h +++ b/dlls/wined3d/wined3d_gl.h @@ -80,6 +80,7 @@ enum wined3d_gl_extension ARB_POINT_SPRITE, ARB_PROVOKING_VERTEX, ARB_SAMPLER_OBJECTS, + ARB_SHADER_ATOMIC_COUNTERS, ARB_SHADER_BIT_ENCODING, ARB_SHADER_IMAGE_LOAD_STORE, ARB_SHADER_IMAGE_SIZE,