[22/23] wined3d: Add cube array sampler support.

Andrew Wesie awesie at gmail.com
Sun Nov 13 12:35:22 CST 2016


Signed-off-by: Andrew Wesie <awesie at gmail.com>
---
 dlls/wined3d/directx.c         | 1 +
 dlls/wined3d/glsl_shader.c     | 9 +++++++++
 dlls/wined3d/shader.c          | 4 ++++
 dlls/wined3d/shader_sm4.c      | 2 ++
 dlls/wined3d/wined3d_gl.h      | 1 +
 dlls/wined3d/wined3d_private.h | 1 +
 6 files changed, 18 insertions(+)

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 6a4264e..6461dba 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -156,6 +156,7 @@ static const struct wined3d_extension_map gl_extension_map[] =
     {"GL_ARB_texture_compression_bptc",     ARB_TEXTURE_COMPRESSION_BPTC  },
     {"GL_ARB_texture_compression_rgtc",     ARB_TEXTURE_COMPRESSION_RGTC  },
     {"GL_ARB_texture_cube_map",             ARB_TEXTURE_CUBE_MAP          },
+    {"GL_ARB_texture_cube_map_array",       ARB_TEXTURE_CUBE_MAP_ARRAY    },
     {"GL_ARB_texture_env_combine",          ARB_TEXTURE_ENV_COMBINE       },
     {"GL_ARB_texture_env_dot3",             ARB_TEXTURE_ENV_DOT3          },
     {"GL_ARB_texture_float",                ARB_TEXTURE_FLOAT             },
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 7e2ff33..3d4c44a 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -2043,6 +2043,12 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont
                     sampler_type = "sampler2DArray";
                 break;
 
+            case WINED3D_SHADER_RESOURCE_TEXTURE_CUBEARRAY:
+                if (shadow_sampler)
+                    FIXME("Unsupported Cube array shadow sampler.\n");
+                sampler_type = "samplerCubeArray";
+                break;
+
             default:
                 sampler_type = "unsupported_sampler";
                 FIXME("Unhandled resource type %#x.\n", reg_maps->resource_info[entry->resource_idx].type);
@@ -2940,6 +2946,7 @@ static void shader_glsl_get_sample_function(const struct wined3d_shader_context
         {2, ""},        /* WINED3D_SHADER_RESOURCE_TEXTURE_1DARRAY */
         {3, "2DArray"}, /* WINED3D_SHADER_RESOURCE_TEXTURE_2DARRAY */
         {3, ""},        /* WINED3D_SHADER_RESOURCE_TEXTURE_2DMSARRAY */
+        {4, ""},        /* WINED3D_SHADER_RESOURCE_TEXTURE_CUBEARRAY */
     };
     enum wined3d_shader_resource_type resource_type = ctx->reg_maps->resource_info[resource_idx].type;
     struct shader_glsl_ctx_priv *priv = ctx->backend_data;
@@ -5939,6 +5946,8 @@ static void shader_glsl_enable_extensions(struct wined3d_string_buffer *buffer,
         shader_addline(buffer, "#extension GL_EXT_gpu_shader4 : enable\n");
     if (gl_info->supported[EXT_TEXTURE_ARRAY])
         shader_addline(buffer, "#extension GL_EXT_texture_array : enable\n");
+    if (gl_info->supported[ARB_TEXTURE_CUBE_MAP_ARRAY])
+        shader_addline(buffer, "#extension GL_ARB_texture_cube_map_array : enable\n");
 }
 
 /* Context activation is done by the caller. */
diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c
index 057bc13..98675f5 100644
--- a/dlls/wined3d/shader.c
+++ b/dlls/wined3d/shader.c
@@ -1568,6 +1568,10 @@ static void shader_dump_decl_usage(struct wined3d_string_buffer *buffer,
                 shader_addline(buffer, "texture2dmsarray");
                 break;
 
+            case WINED3D_SHADER_RESOURCE_TEXTURE_CUBEARRAY:
+                shader_addline(buffer, "texturecubearray");
+                break;
+
             default:
                 shader_addline(buffer, "unknown");
                 break;
diff --git a/dlls/wined3d/shader_sm4.c b/dlls/wined3d/shader_sm4.c
index 520e3c6..6dffdf3 100644
--- a/dlls/wined3d/shader_sm4.c
+++ b/dlls/wined3d/shader_sm4.c
@@ -316,6 +316,7 @@ enum wined3d_sm4_resource_type
     WINED3D_SM4_RESOURCE_TEXTURE_1DARRAY    = 0x7,
     WINED3D_SM4_RESOURCE_TEXTURE_2DARRAY    = 0x8,
     WINED3D_SM4_RESOURCE_TEXTURE_2DMSARRAY  = 0x9,
+    WINED3D_SM4_RESOURCE_TEXTURE_CUBEARRAY  = 0xA,
 };
 
 enum wined3d_sm4_data_type
@@ -404,6 +405,7 @@ static const enum wined3d_shader_resource_type resource_type_table[] =
     /* WINED3D_SM4_RESOURCE_TEXTURE_1DARRAY */      WINED3D_SHADER_RESOURCE_TEXTURE_1DARRAY,
     /* WINED3D_SM4_RESOURCE_TEXTURE_2DARRAY */      WINED3D_SHADER_RESOURCE_TEXTURE_2DARRAY,
     /* WINED3D_SM4_RESOURCE_TEXTURE_2DMSARRAY */    WINED3D_SHADER_RESOURCE_TEXTURE_2DMSARRAY,
+    /* WINED3D_SM4_RESOURCE_TEXTURE_CUBEARRAY */    WINED3D_SHADER_RESOURCE_TEXTURE_CUBEARRAY,
 };
 
 static const enum wined3d_data_type data_type_table[] =
diff --git a/dlls/wined3d/wined3d_gl.h b/dlls/wined3d/wined3d_gl.h
index 6b29969..5894d4b 100644
--- a/dlls/wined3d/wined3d_gl.h
+++ b/dlls/wined3d/wined3d_gl.h
@@ -90,6 +90,7 @@ enum wined3d_gl_extension
     ARB_TEXTURE_COMPRESSION_BPTC,
     ARB_TEXTURE_COMPRESSION_RGTC,
     ARB_TEXTURE_CUBE_MAP,
+    ARB_TEXTURE_CUBE_MAP_ARRAY,
     ARB_TEXTURE_ENV_COMBINE,
     ARB_TEXTURE_ENV_DOT3,
     ARB_TEXTURE_FLOAT,
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index e501cfc..a9ee432 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -323,6 +323,7 @@ enum wined3d_shader_resource_type
     WINED3D_SHADER_RESOURCE_TEXTURE_1DARRAY,
     WINED3D_SHADER_RESOURCE_TEXTURE_2DARRAY,
     WINED3D_SHADER_RESOURCE_TEXTURE_2DMSARRAY,
+    WINED3D_SHADER_RESOURCE_TEXTURE_CUBEARRAY,
 };
 
 #define WINED3D_SHADER_CONST_VS_F            0x00000001
-- 
2.7.4




More information about the wine-patches mailing list