[PATCH 8/8] wined3d: Support SV_RenderTargetArrayIndex semantic for pixel shader inputs.

Józef Kucia jkucia at codeweavers.com
Thu Apr 6 04:47:53 CDT 2017


Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
 dlls/wined3d/directx.c     |  2 ++
 dlls/wined3d/glsl_shader.c | 10 ++++++++++
 dlls/wined3d/wined3d_gl.h  |  1 +
 3 files changed, 13 insertions(+)

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 0d5a476..f434157 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -126,6 +126,7 @@ static const struct wined3d_extension_map gl_extension_map[] =
     {"GL_ARB_ES3_compatibility",            ARB_ES3_COMPATIBILITY         },
     {"GL_ARB_explicit_attrib_location",     ARB_EXPLICIT_ATTRIB_LOCATION  },
     {"GL_ARB_fragment_coord_conventions",   ARB_FRAGMENT_COORD_CONVENTIONS},
+    {"GL_ARB_fragment_layer_viewport",      ARB_FRAGMENT_LAYER_VIEWPORT   },
     {"GL_ARB_fragment_program",             ARB_FRAGMENT_PROGRAM          },
     {"GL_ARB_fragment_shader",              ARB_FRAGMENT_SHADER           },
     {"GL_ARB_framebuffer_object",           ARB_FRAMEBUFFER_OBJECT        },
@@ -3845,6 +3846,7 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter,
         {ARB_COMPUTE_SHADER,               MAKEDWORD_VERSION(4, 3)},
         {ARB_DEBUG_OUTPUT,                 MAKEDWORD_VERSION(4, 3)},
         {ARB_ES3_COMPATIBILITY,            MAKEDWORD_VERSION(4, 3)},
+        {ARB_FRAGMENT_LAYER_VIEWPORT,      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)},
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 21f543c..c8a970f 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -6444,6 +6444,14 @@ static void shader_glsl_input_pack(const struct wined3d_shader *shader, struct w
                         "uintBitsToFloat(gl_FrontFacing ? 0xffffffffu : 0u), 0.0, 0.0, 0.0);\n",
                         input->register_idx);
             }
+            else if (input->sysval_semantic == WINED3D_SV_RENDER_TARGET_ARRAY_INDEX && !semantic_idx)
+            {
+                if (gl_info->supported[ARB_FRAGMENT_LAYER_VIEWPORT])
+                    shader_addline(buffer, "ps_in[%u]%s = intBitsToFloat(gl_Layer);\n",
+                            input->register_idx, reg_mask);
+                else
+                    FIXME("ARB_fragment_layer_viewport is not supported.\n");
+            }
             else
             {
                 if (input->sysval_semantic)
@@ -7051,6 +7059,8 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context
         shader_addline(buffer, "#extension GL_ARB_derivative_control : enable\n");
     if (gl_info->supported[ARB_FRAGMENT_COORD_CONVENTIONS])
         shader_addline(buffer, "#extension GL_ARB_fragment_coord_conventions : enable\n");
+    if (gl_info->supported[ARB_FRAGMENT_LAYER_VIEWPORT])
+        shader_addline(buffer, "#extension GL_ARB_fragment_layer_viewport : enable\n");
     if (gl_info->supported[ARB_SHADER_TEXTURE_LOD])
         shader_addline(buffer, "#extension GL_ARB_shader_texture_lod : enable\n");
     /* The spec says that it doesn't have to be explicitly enabled, but the
diff --git a/dlls/wined3d/wined3d_gl.h b/dlls/wined3d/wined3d_gl.h
index 6290032..4960fc7 100644
--- a/dlls/wined3d/wined3d_gl.h
+++ b/dlls/wined3d/wined3d_gl.h
@@ -59,6 +59,7 @@ enum wined3d_gl_extension
     ARB_ES3_COMPATIBILITY,
     ARB_EXPLICIT_ATTRIB_LOCATION,
     ARB_FRAGMENT_COORD_CONVENTIONS,
+    ARB_FRAGMENT_LAYER_VIEWPORT,
     ARB_FRAGMENT_PROGRAM,
     ARB_FRAGMENT_SHADER,
     ARB_FRAMEBUFFER_OBJECT,
-- 
2.10.2




More information about the wine-patches mailing list