[PATCH 5/6] wined3d: Add ARB_shader_storage_buffer_object extension.
Józef Kucia
jkucia at codeweavers.com
Wed Mar 1 17:55:30 CST 2017
Nvidia binary drivers require the ARB_shader_storage_buffer_object
extension to be enabled in order to use atomic operations on compute
shader shared variables.
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
This is a workaround for a driver bug. The
ARB_shader_storage_buffer_object spec says:
"Note that no "#extension" directive is necessary to use atomic memory
functions on shared variables in compute shaders."
Without this change a test added in the next patch fails on proprietary
Nvidia drivers.
---
dlls/wined3d/directx.c | 4 ++++
dlls/wined3d/glsl_shader.c | 2 ++
dlls/wined3d/wined3d_gl.h | 1 +
3 files changed, 7 insertions(+)
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 02df3f0..5fa34e5 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -150,6 +150,7 @@ static const struct wined3d_extension_map gl_extension_map[] =
{"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 },
+ {"GL_ARB_shader_storage_buffer_object", ARB_SHADER_STORAGE_BUFFER_OBJECT},
{"GL_ARB_shader_texture_lod", ARB_SHADER_TEXTURE_LOD },
{"GL_ARB_shading_language_100", ARB_SHADING_LANGUAGE_100 },
{"GL_ARB_shading_language_420pack", ARB_SHADING_LANGUAGE_420PACK },
@@ -2832,6 +2833,8 @@ static void load_gl_funcs(struct wined3d_gl_info *gl_info)
USE_GL_FUNC(glUniformMatrix4fvARB)
USE_GL_FUNC(glUseProgramObjectARB)
USE_GL_FUNC(glValidateProgramARB)
+ /* GL_ARB_shader_storage_buffer_object */
+ USE_GL_FUNC(glShaderStorageBlockBinding)
/* GL_ARB_sync */
USE_GL_FUNC(glClientWaitSync)
USE_GL_FUNC(glDeleteSync)
@@ -3774,6 +3777,7 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter,
{ARB_ES3_COMPATIBILITY, MAKEDWORD_VERSION(4, 3)},
{ARB_INTERNALFORMAT_QUERY2, MAKEDWORD_VERSION(4, 3)},
{ARB_SHADER_IMAGE_SIZE, MAKEDWORD_VERSION(4, 3)},
+ {ARB_SHADER_STORAGE_BUFFER_OBJECT, MAKEDWORD_VERSION(4, 3)},
{ARB_STENCIL_TEXTURING, MAKEDWORD_VERSION(4, 3)},
{ARB_TEXTURE_BUFFER_RANGE, MAKEDWORD_VERSION(4, 3)},
{ARB_TEXTURE_QUERY_LEVELS, MAKEDWORD_VERSION(4, 3)},
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index e5dd567..d6bb622 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -6613,6 +6613,8 @@ static void shader_glsl_enable_extensions(struct wined3d_string_buffer *buffer,
shader_addline(buffer, "#extension GL_ARB_shader_image_load_store : enable\n");
if (gl_info->supported[ARB_SHADER_IMAGE_SIZE])
shader_addline(buffer, "#extension GL_ARB_shader_image_size : enable\n");
+ if (gl_info->supported[ARB_SHADER_STORAGE_BUFFER_OBJECT])
+ shader_addline(buffer, "#extension GL_ARB_shader_storage_buffer_object : enable\n");
if (gl_info->supported[ARB_SHADING_LANGUAGE_420PACK])
shader_addline(buffer, "#extension GL_ARB_shading_language_420pack : enable\n");
if (gl_info->supported[ARB_SHADING_LANGUAGE_PACKING])
diff --git a/dlls/wined3d/wined3d_gl.h b/dlls/wined3d/wined3d_gl.h
index 396f93f..fa5985c 100644
--- a/dlls/wined3d/wined3d_gl.h
+++ b/dlls/wined3d/wined3d_gl.h
@@ -83,6 +83,7 @@ enum wined3d_gl_extension
ARB_SHADER_BIT_ENCODING,
ARB_SHADER_IMAGE_LOAD_STORE,
ARB_SHADER_IMAGE_SIZE,
+ ARB_SHADER_STORAGE_BUFFER_OBJECT,
ARB_SHADER_TEXTURE_LOD,
ARB_SHADING_LANGUAGE_100,
ARB_SHADING_LANGUAGE_420PACK,
--
2.10.2
More information about the wine-patches
mailing list