<div dir="ltr">I've updated this and the API patch such that the changes made to khr_texture_compression-basic.c here only exist in the API patch.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Sep 16, 2015 at 1:43 PM, Nanley Chery <span dir="ltr"><<a href="mailto:nanleychery@gmail.com" target="_blank">nanleychery@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">From: Nanley Chery <<a href="mailto:nanley.g.chery@intel.com">nanley.g.chery@intel.com</a>><br>
<br>
These tests check that 2D texture arrays work for the 5x5 and<br>
12x12 block sizes.<br>
<br>
v2. add to all.py (Ilia).<br>
create test for gles2.<br>
<br>
Signed-off-by: Nanley Chery <<a href="mailto:nanley.g.chery@intel.com">nanley.g.chery@intel.com</a>><br>
---<br>
tests/all.py | 2 +<br>
.../khr_texture_compression_astc/CMakeLists.gl.txt | 1 +<br>
.../CMakeLists.gles2.txt | 1 +<br>
.../compressed/hdr/array/waffles-12x12.ktx | Bin 0 -> 5888 bytes<br>
.../compressed/hdr/array/waffles-5x5.ktx | Bin 0 -> 30400 bytes<br>
.../compressed/ldrl/array/waffles-12x12.ktx | Bin 0 -> 11680 bytes<br>
.../compressed/ldrl/array/waffles-5x5.ktx | Bin 0 -> 30400 bytes<br>
.../compressed/ldrs/array/waffles-12x12.ktx | Bin 0 -> 11680 bytes<br>
.../compressed/ldrs/array/waffles-5x5.ktx | Bin 0 -> 30400 bytes<br>
.../khr_compressed_astc-basic.c | 251 ++++++++++--------<br>
.../khr_compressed_astc-miptree-array.c | 294 +++++++++++++++++++++<br>
11 files changed, 433 insertions(+), 116 deletions(-)<br>
create mode 100644 tests/spec/khr_texture_compression_astc/compressed/hdr/array/waffles-12x12.ktx<br>
create mode 100644 tests/spec/khr_texture_compression_astc/compressed/hdr/array/waffles-5x5.ktx<br>
create mode 100644 tests/spec/khr_texture_compression_astc/compressed/ldrl/array/waffles-12x12.ktx<br>
create mode 100644 tests/spec/khr_texture_compression_astc/compressed/ldrl/array/waffles-5x5.ktx<br>
create mode 100644 tests/spec/khr_texture_compression_astc/compressed/ldrs/array/waffles-12x12.ktx<br>
create mode 100644 tests/spec/khr_texture_compression_astc/compressed/ldrs/array/waffles-5x5.ktx<br>
create mode 100644 tests/spec/khr_texture_compression_astc/khr_compressed_astc-miptree-array.c<br>
<br>
diff --git a/tests/all.py b/tests/all.py<br>
index 7972c84..15881a3 100644<br>
--- a/tests/all.py<br>
+++ b/tests/all.py<br>
@@ -4157,6 +4157,8 @@ with profile.group_manager(<br>
PiglitGLTest,<br>
grouptools.join('spec', 'khr_texture_compression_astc')) as g:<br>
g(['arb_texture_compression-invalid-formats', 'astc'], 'invalid formats')<br>
+ g(['khr_compressed_astc-array_gl'], 'array-gl')<br>
+ g(['khr_compressed_astc-array_gles2'], 'array-gles')<br>
g(['khr_compressed_astc-basic_gl'], 'basic-gl')<br>
g(['khr_compressed_astc-basic_gles2'], 'basic-gles')<br>
g(['khr_compressed_astc-miptree_gl'], 'miptree-gl')<br>
diff --git a/tests/spec/khr_texture_compression_astc/CMakeLists.gl.txt b/tests/spec/khr_texture_compression_astc/CMakeLists.gl.txt<br>
index 903d531..a70a3ed 100644<br>
--- a/tests/spec/khr_texture_compression_astc/CMakeLists.gl.txt<br>
+++ b/tests/spec/khr_texture_compression_astc/CMakeLists.gl.txt<br>
@@ -3,6 +3,7 @@ link_libraries (<br>
)<br>
<br>
piglit_add_executable(khr_compressed_astc-miptree_${piglit_target_api} khr_compressed_astc-miptree.c)<br>
+piglit_add_executable(khr_compressed_astc-array_${piglit_target_api} khr_compressed_astc-miptree-array.c)<br>
piglit_add_executable(khr_compressed_astc-basic_${piglit_target_api} khr_compressed_astc-basic.c)<br>
<br>
# vim: ft=cmake:<br>
diff --git a/tests/spec/khr_texture_compression_astc/CMakeLists.gles2.txt b/tests/spec/khr_texture_compression_astc/CMakeLists.gles2.txt<br>
index 89d8279..2f1e1f8 100644<br>
--- a/tests/spec/khr_texture_compression_astc/CMakeLists.gles2.txt<br>
+++ b/tests/spec/khr_texture_compression_astc/CMakeLists.gles2.txt<br>
@@ -1,5 +1,6 @@<br>
link_libraries(piglitutil_${piglit_target_api})<br>
piglit_add_executable(khr_compressed_astc-miptree_${piglit_target_api} khr_compressed_astc-miptree.c)<br>
+piglit_add_executable(khr_compressed_astc-array_${piglit_target_api} khr_compressed_astc-miptree-array.c)<br>
piglit_add_executable(khr_compressed_astc-basic_${piglit_target_api} khr_compressed_astc-basic.c)<br>
<br>
# vim: ft=cmake:<br>
diff --git a/tests/spec/khr_texture_compression_astc/compressed/hdr/array/waffles-12x12.ktx b/tests/spec/khr_texture_compression_astc/compressed/hdr/array/waffles-12x12.ktx<br>
new file mode 100644<br>
index 0000000000000000000000000000000000000000..88303a51ff442db1dac95f6a75695283ddb417bc<br>
GIT binary patch<br>
literal 5888<br>
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
<br>
literal 0<br>
HcmV?d00001<br>
<br>
diff --git a/tests/spec/khr_texture_compression_astc/compressed/hdr/array/waffles-5x5.ktx b/tests/spec/khr_texture_compression_astc/compressed/hdr/array/waffles-5x5.ktx<br>
new file mode 100644<br>
index 0000000000000000000000000000000000000000..c7b1cba579b5464cad6b9134e633df56cdf15403<br>
GIT binary patch<br>
literal 30400<br>
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
<br>
literal 0<br>
HcmV?d00001<br>
<br>
diff --git a/tests/spec/khr_texture_compression_astc/compressed/ldrl/array/waffles-12x12.ktx b/tests/spec/khr_texture_compression_astc/compressed/ldrl/array/waffles-12x12.ktx<br>
new file mode 100644<br>
index 0000000000000000000000000000000000000000..b9ef01f95f64e52bd6738bca78fc6417bdcd2bf7<br>
GIT binary patch<br>
literal 11680<br>
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
LuV)xZdRY4JB2Mno<br>
<br>
literal 0<br>
HcmV?d00001<br>
<br>
diff --git a/tests/spec/khr_texture_compression_astc/compressed/ldrl/array/waffles-5x5.ktx b/tests/spec/khr_texture_compression_astc/compressed/ldrl/array/waffles-5x5.ktx<br>
new file mode 100644<br>
index 0000000000000000000000000000000000000000..2cb8df8e341b71db7e539fb7217b9bc441b78c11<br>
GIT binary patch<br>
literal 30400<br>
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
BF8}}l<br>
<br>
literal 0<br>
HcmV?d00001<br>
<br>
diff --git a/tests/spec/khr_texture_compression_astc/compressed/ldrs/array/waffles-12x12.ktx b/tests/spec/khr_texture_compression_astc/compressed/ldrs/array/waffles-12x12.ktx<br>
new file mode 100644<br>
index 0000000000000000000000000000000000000000..c0d7dda913c061b5ffa29255126899af4e9f414a<br>
GIT binary patch<br>
literal 11680<br>
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
N-O#`=fxx56e+LK+>_z|p<br>
<br>
literal 0<br>
HcmV?d00001<br>
<br>
diff --git a/tests/spec/khr_texture_compression_astc/compressed/ldrs/array/waffles-5x5.ktx b/tests/spec/khr_texture_compression_astc/compressed/ldrs/array/waffles-5x5.ktx<br>
new file mode 100644<br>
index 0000000000000000000000000000000000000000..7cdc7a1fa85252f07dd6f2141386649839973386<br>
GIT binary patch<br>
literal 30400<br>
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
<br>
literal 0<br>
HcmV?d00001<br>
<br>
diff --git a/tests/spec/khr_texture_compression_astc/khr_compressed_astc-basic.c b/tests/spec/khr_texture_compression_astc/khr_compressed_astc-basic.c<br>
index b2bd98d..6867db6 100644<br>
--- a/tests/spec/khr_texture_compression_astc/khr_compressed_astc-basic.c<br>
+++ b/tests/spec/khr_texture_compression_astc/khr_compressed_astc-basic.c<br>
@@ -23,67 +23,116 @@<br>
<br>
#include "piglit-util-gl.h"<br>
<br>
+PIGLIT_GL_TEST_CONFIG_BEGIN<br>
+<br>
+ config.supports_gl_compat_version = 11;<br>
+ config.supports_gl_es_version = 20;<br>
+ config.window_visual = PIGLIT_GL_VISUAL_RGB | PIGLIT_GL_VISUAL_DOUBLE;<br>
+<br>
+PIGLIT_GL_TEST_CONFIG_END<br>
+<br>
static const GLenum cube_map_face_targets[] = {<br>
- GL_TEXTURE_CUBE_MAP_POSITIVE_X,<br>
- GL_TEXTURE_CUBE_MAP_NEGATIVE_X,<br>
- GL_TEXTURE_CUBE_MAP_POSITIVE_Y,<br>
- GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,<br>
- GL_TEXTURE_CUBE_MAP_POSITIVE_Z,<br>
- GL_TEXTURE_CUBE_MAP_NEGATIVE_Z<br>
+ GL_TEXTURE_CUBE_MAP_POSITIVE_X,<br>
+ GL_TEXTURE_CUBE_MAP_NEGATIVE_X,<br>
+ GL_TEXTURE_CUBE_MAP_POSITIVE_Y,<br>
+ GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,<br>
+ GL_TEXTURE_CUBE_MAP_POSITIVE_Z,<br>
+ GL_TEXTURE_CUBE_MAP_NEGATIVE_Z<br>
};<br>
<br>
-static const GLenum good_targets[] = {<br>
- GL_TEXTURE_2D_ARRAY,<br>
- GL_TEXTURE_CUBE_MAP_ARRAY_EXT,<br>
- GL_TEXTURE_3D,<br>
+static const GLenum good_compressed_tex_3d_targets[] = {<br>
+ GL_TEXTURE_2D_ARRAY,<br>
+ GL_TEXTURE_CUBE_MAP_ARRAY_EXT,<br>
+ GL_TEXTURE_3D,<br>
};<br>
<br>
-typedef struct _astc_fmt {<br>
+static const struct astc_fmt {<br>
+ /** The GLenum for the ASTC format. */<br>
GLenum fmt;<br>
+<br>
+ /** The block width. */<br>
int bw;<br>
+<br>
+ /** The block height. */<br>
int bh;<br>
+<br>
+ /** The number of bytes per block. */<br>
int bb;<br>
-} astc_fmt;<br>
-<br>
-static const astc_fmt formats[] = {<br>
- {GL_COMPRESSED_RGBA_ASTC_4x4_KHR , 4, 4, 16},<br>
- {GL_COMPRESSED_RGBA_ASTC_5x4_KHR , 5, 4, 16},<br>
- {GL_COMPRESSED_RGBA_ASTC_5x5_KHR , 5, 5, 16},<br>
- {GL_COMPRESSED_RGBA_ASTC_6x5_KHR , 6, 5, 16},<br>
- {GL_COMPRESSED_RGBA_ASTC_6x6_KHR , 6, 6, 16},<br>
- {GL_COMPRESSED_RGBA_ASTC_8x5_KHR , 8, 5, 16},<br>
- {GL_COMPRESSED_RGBA_ASTC_8x6_KHR , 8, 6, 16},<br>
- {GL_COMPRESSED_RGBA_ASTC_8x8_KHR , 8, 8, 16},<br>
- {GL_COMPRESSED_RGBA_ASTC_10x5_KHR , 10, 5, 16},<br>
- {GL_COMPRESSED_RGBA_ASTC_10x6_KHR , 10, 6, 16},<br>
- {GL_COMPRESSED_RGBA_ASTC_10x8_KHR , 10, 8, 16},<br>
- {GL_COMPRESSED_RGBA_ASTC_10x10_KHR , 10, 10, 16},<br>
- {GL_COMPRESSED_RGBA_ASTC_12x10_KHR , 12, 10, 16},<br>
- {GL_COMPRESSED_RGBA_ASTC_12x12_KHR , 12, 12, 16},<br>
- {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR , 4, 4, 16},<br>
- {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR , 5, 4, 16},<br>
- {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR , 5, 5, 16},<br>
- {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR , 6, 5, 16},<br>
- {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR , 6, 6, 16},<br>
- {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR , 8, 5, 16},<br>
- {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR , 8, 6, 16},<br>
- {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR , 8, 8, 16},<br>
- {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR , 10, 5, 16},<br>
- {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR , 10, 6, 16},<br>
- {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR , 10, 8, 16},<br>
- {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, 10, 10, 16},<br>
- {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, 12, 10, 16},<br>
- {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR, 12, 12, 16}<br>
+} formats[] = {<br>
+ {GL_COMPRESSED_RGBA_ASTC_4x4_KHR , 4, 4, 16},<br>
+ {GL_COMPRESSED_RGBA_ASTC_5x4_KHR , 5, 4, 16},<br>
+ {GL_COMPRESSED_RGBA_ASTC_5x5_KHR , 5, 5, 16},<br>
+ {GL_COMPRESSED_RGBA_ASTC_6x5_KHR , 6, 5, 16},<br>
+ {GL_COMPRESSED_RGBA_ASTC_6x6_KHR , 6, 6, 16},<br>
+ {GL_COMPRESSED_RGBA_ASTC_8x5_KHR , 8, 5, 16},<br>
+ {GL_COMPRESSED_RGBA_ASTC_8x6_KHR , 8, 6, 16},<br>
+ {GL_COMPRESSED_RGBA_ASTC_8x8_KHR , 8, 8, 16},<br>
+ {GL_COMPRESSED_RGBA_ASTC_10x5_KHR , 10, 5, 16},<br>
+ {GL_COMPRESSED_RGBA_ASTC_10x6_KHR , 10, 6, 16},<br>
+ {GL_COMPRESSED_RGBA_ASTC_10x8_KHR , 10, 8, 16},<br>
+ {GL_COMPRESSED_RGBA_ASTC_10x10_KHR , 10, 10, 16},<br>
+ {GL_COMPRESSED_RGBA_ASTC_12x10_KHR , 12, 10, 16},<br>
+ {GL_COMPRESSED_RGBA_ASTC_12x12_KHR , 12, 12, 16},<br>
+ {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR , 4, 4, 16},<br>
+ {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR , 5, 4, 16},<br>
+ {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR , 5, 5, 16},<br>
+ {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR , 6, 5, 16},<br>
+ {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR , 6, 6, 16},<br>
+ {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR , 8, 5, 16},<br>
+ {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR , 8, 6, 16},<br>
+ {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR , 8, 8, 16},<br>
+ {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR , 10, 5, 16},<br>
+ {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR , 10, 6, 16},<br>
+ {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR , 10, 8, 16},<br>
+ {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, 10, 10, 16},<br>
+ {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, 12, 10, 16},<br>
+ {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR, 12, 12, 16}<br>
};<br>
<br>
<br>
#define REQUIRE_ERROR(expected_error) \<br>
-do {\<br>
- if (!piglit_check_gl_error(expected_error))\<br>
- piglit_report_result(PIGLIT_FAIL);\<br>
+do { \<br>
+ if (!piglit_check_gl_error(expected_error)) \<br>
+ piglit_report_result(PIGLIT_FAIL); \<br>
} while (0)<br>
<br>
<br>
+bool static inline<br>
+have_tex_storage_support()<br>
+{<br>
+#if defined (PIGLIT_USE_OPENGL)<br>
+ return piglit_get_gl_version() >= 42 ||<br>
+ piglit_is_extension_supported("GL_ARB_texture_storage");<br>
+#else<br>
+ return piglit_get_gl_version() >= 30 ||<br>
+ piglit_is_extension_supported("GL_EXT_texture_storage");<br>
+#endif<br>
+}<br>
+<br>
+<br>
+bool static inline<br>
+have_cube_map_array_support()<br>
+{<br>
+#if defined (PIGLIT_USE_OPENGL)<br>
+ return piglit_get_gl_version() >= 40 ||<br>
+ piglit_is_extension_supported("GL_ARB_texture_cube_map_array");<br>
+#else<br>
+ return piglit_get_gl_version() >= 30 ||<br>
+ piglit_is_extension_supported("GL_EXT_texture_cube_map_array");<br>
+#endif<br>
+}<br>
+<br>
+bool static inline<br>
+have_gen_mipmap_support()<br>
+{<br>
+#if defined (PIGLIT_USE_OPENGL)<br>
+ return piglit_get_gl_version() >= 30;<br>
+#else<br>
+ return piglit_get_gl_version() >= 20;<br>
+#endif<br>
+}<br>
+<br>
+<br>
/*<br>
* The KHR_texture_compression_astc_ldr spec says:<br>
* * An INVALID_OPERATION error is generated by CompressedTexImage3D if<br>
@@ -105,29 +154,28 @@ do {\<br>
* the TEXTURE_CUBE_MAP_ARRAY target.<br>
*<br>
*/<br>
-void test_compressed_teximg_3d(int fi, bool have_cube_map_ext)<br>
+void test_compressed_teximg_3d(int fi, bool have_cube_map_ext, bool have_hdr)<br>
{<br>
int j;<br>
GLuint tex3D;<br>
char fake_tex_data[6*16];<br>
- bool have_hdr = piglit_is_extension_supported(<br>
- "GL_KHR_texture_compression_astc_hdr");<br>
<br>
- for (j = 0; j < ARRAY_SIZE(good_targets); ++j) {<br>
+ for (j = 0; j < ARRAY_SIZE(good_compressed_tex_3d_targets); ++j) {<br>
<br>
/* Skip the cube_map target if there's no support */<br>
- if (good_targets[j] == GL_TEXTURE_CUBE_MAP_ARRAY_EXT &&<br>
- !have_cube_map_ext)<br>
+ if ((good_compressed_tex_3d_targets[j] ==<br>
+ GL_TEXTURE_CUBE_MAP_ARRAY_EXT) && !have_cube_map_ext)<br>
continue;<br>
<br>
/* Run the command */<br>
glGenTextures(1, &tex3D);<br>
- glBindTexture(good_targets[j], tex3D);<br>
- glCompressedTexImage3D(good_targets[j], 0, formats[fi].fmt,<br>
- 4, 4, 6, 0, 6*formats[fi].bb, fake_tex_data);<br>
+ glBindTexture(good_compressed_tex_3d_targets[j], tex3D);<br>
+ glCompressedTexImage3D(good_compressed_tex_3d_targets[j], 0,<br>
+ formats[fi].fmt, 4, 4, 6, 0, 6*formats[fi].bb, fake_tex_data);<br>
<br>
/* Test expected GL errors */<br>
- if (good_targets[j] == GL_TEXTURE_3D && !have_hdr) {<br>
+ if (good_compressed_tex_3d_targets[j] == GL_TEXTURE_3D<br>
+ && !have_hdr) {<br>
REQUIRE_ERROR(GL_INVALID_OPERATION);<br>
} else {<br>
REQUIRE_ERROR(GL_NO_ERROR);<br>
@@ -147,7 +195,7 @@ void test_compressed_teximg_3d(int fi, bool have_cube_map_ext)<br>
*<br>
* and <width> and <height> are not equal."<br>
*/<br>
-void test_non_square_img(int fi)<br>
+void test_non_square_img(int fi, bool have_hdr)<br>
{<br>
int j;<br>
char fake_tex_data[6*16];<br>
@@ -209,13 +257,17 @@ void test_sub_img(int fi)<br>
char fake_tex_data[4*16];<br>
int width = 7;<br>
int height = 7;<br>
- int expectedSizeGood = get_expected_size(4, 4,<br>
+ int expected_size_good = get_expected_size(4, 4,<br>
formats[fi].bw,<br>
formats[fi].bh, formats[fi].bb);<br>
- int expectedSizeBad = get_expected_size(width, height,<br>
+ int expected_size_bad = get_expected_size(width, height,<br>
formats[fi].bw,<br>
formats[fi].bh, formats[fi].bb);<br>
<br>
+ /* Ensure enough space has been allocated */<br>
+ assert(expected_size_bad <= sizeof(fake_tex_data));<br>
+ assert(expected_size_good <= sizeof(fake_tex_data));<br>
+<br>
/* Allocate enough to hold the larger case */<br>
glGenTextures(1, &tex);<br>
glBindTexture(GL_TEXTURE_2D, tex);<br>
@@ -225,26 +277,28 @@ void test_sub_img(int fi)<br>
/* Check for No Error */<br>
glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0,<br>
formats[fi].bw, formats[fi].bh,<br>
- formats[fi].fmt, expectedSizeGood, fake_tex_data);<br>
+ formats[fi].fmt, expected_size_good, fake_tex_data);<br>
REQUIRE_ERROR(GL_NO_ERROR);<br>
<br>
/* Check for expected Error */<br>
glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height,<br>
- formats[fi].fmt, expectedSizeBad, fake_tex_data);<br>
+ formats[fi].fmt, expected_size_bad, fake_tex_data);<br>
REQUIRE_ERROR(GL_INVALID_OPERATION);<br>
<br>
glDeleteTextures(1, &tex);<br>
<br>
- if (piglit_is_extension_supported("GL_EXT_texture_storage")) {<br>
- /* Check for expected Error */<br>
- glGenTextures(1, &tex);<br>
- glTextureStorage3DEXT(tex, GL_TEXTURE_3D, 1, formats[fi].fmt,<br>
- 14, 14, 1);<br>
- glCompressedTexImage3D(GL_TEXTURE_3D, 0, formats[fi].fmt,<br>
- 7, 7, 1, 0, expectedSizeBad, fake_tex_data);<br>
- REQUIRE_ERROR(GL_INVALID_OPERATION);<br>
- glDeleteTextures(1, &tex);<br>
- }<br>
+ /* Check for expected Error */<br>
+ glGenTextures(1, &tex);<br>
+ glBindTexture(GL_TEXTURE_3D, tex);<br>
+ glTexStorage3D(GL_TEXTURE_3D, 1, formats[fi].fmt, 14, 14, 1);<br>
+ glCompressedTexImage3D(GL_TEXTURE_3D, 0, formats[fi].fmt,<br>
+ 7, 7, 1, 0, expected_size_bad, fake_tex_data);<br>
+ REQUIRE_ERROR(GL_INVALID_OPERATION);<br>
+ glDeleteTextures(1, &tex);<br>
+<br>
+ /* XXX : Test the methods exposed by GL_EXT_texture_storage<br>
+ * once support is added in Mesa.<br>
+ */<br>
}<br>
<br>
/*<br>
@@ -264,11 +318,11 @@ void test_tex_img(int fi, bool have_mipmap)<br>
{<br>
GLuint tex;<br>
char fake_tex_data[16];<br>
+<br>
glGenTextures(1, &tex);<br>
glBindTexture(GL_TEXTURE_2D, tex);<br>
<br>
- /* Allocate for an ASTC texture for following texsubimage calls<br>
- * Since TexImage*D must fail, then the corresponding TexSubImage<br>
+ /* Since TexImage*D must fail, then the corresponding TexSubImage<br>
* calls must fail as well.<br>
*/<br>
glCompressedTexImage2D(GL_TEXTURE_2D, 0,<br>
@@ -302,65 +356,30 @@ void test_tex_img(int fi, bool have_mipmap)<br>
<br>
}<br>
<br>
-bool static inline<br>
-have_tex_storage_support()<br>
-{<br>
-#if defined (PIGLIT_USE_OPENGL)<br>
- return piglit_get_gl_version() >= 42 ||<br>
- piglit_is_extension_supported("GL_ARB_texture_storage");<br>
-#else<br>
- return piglit_get_gl_version() >= 30 ||<br>
- piglit_is_extension_supported("GL_EXT_texture_storage");<br>
-#endif<br>
-}<br>
-<br>
-<br>
-bool static inline<br>
-have_cube_map_array_support()<br>
+void<br>
+piglit_init(int argc, char **argv)<br>
{<br>
-#if defined (PIGLIT_USE_OPENGL_ES3)<br>
- return piglit_is_extension_supported("GL_EXT_texture_cube_map_array");<br>
-#elif defined (PIGLIT_USE_OPENGL)<br>
- return piglit_get_gl_version() >= 40 ||<br>
- piglit_is_extension_supported("GL_ARB_texture_cube_map_array");<br>
-#endif<br>
- return false;<br>
+ piglit_require_extension("GL_KHR_texture_compression_astc_ldr");<br>
}<br>
<br>
-<br>
enum piglit_result<br>
piglit_display(void)<br>
{<br>
unsigned i;<br>
bool have_cube_map_ext = have_cube_map_array_support();<br>
bool have_tex_stor_ext = have_tex_storage_support();<br>
- bool have_mipmap = piglit_is_extension_supported("GL_ARB_framebuffer_object");<br>
+ bool have_gen_mipmap = have_gen_mipmap_support();<br>
+ bool have_hdr = piglit_is_extension_supported(<br>
+ "GL_KHR_texture_compression_astc_hdr");<br>
<br>
for (i = 0; i < ARRAY_SIZE(formats); i++) {<br>
if (have_cube_map_ext)<br>
- test_non_square_img(i);<br>
+ test_non_square_img(i, have_hdr);<br>
if (have_tex_stor_ext)<br>
test_sub_img(i);<br>
- test_compressed_teximg_3d(i, have_cube_map_ext);<br>
- test_tex_img(i, have_mipmap);<br>
+ test_compressed_teximg_3d(i, have_cube_map_ext, have_hdr);<br>
+ test_tex_img(i, have_gen_mipmap);<br>
}<br>
<br>
piglit_report_result(PIGLIT_PASS);<br>
}<br>
-<br>
-<br>
-void<br>
-piglit_init(int argc, char **argv)<br>
-{<br>
- piglit_require_extension("GL_KHR_texture_compression_astc_ldr");<br>
-}<br>
-<br>
-<br>
-PIGLIT_GL_TEST_CONFIG_BEGIN<br>
-<br>
- config.supports_gl_compat_version = 11;<br>
- config.supports_gl_es_version = 10;<br>
-<br>
- config.window_visual = PIGLIT_GL_VISUAL_RGB | PIGLIT_GL_VISUAL_DOUBLE;<br>
-<br>
-PIGLIT_GL_TEST_CONFIG_END<br>
diff --git a/tests/spec/khr_texture_compression_astc/khr_compressed_astc-miptree-array.c b/tests/spec/khr_texture_compression_astc/khr_compressed_astc-miptree-array.c<br>
new file mode 100644<br>
index 0000000..c1f8fa2<br>
--- /dev/null<br>
+++ b/tests/spec/khr_texture_compression_astc/khr_compressed_astc-miptree-array.c<br>
@@ -0,0 +1,294 @@<br>
+/*<br>
+ * Copyright 2015 Intel Corporation<br>
+ *<br>
+ * Permission is hereby granted, free of charge, to any person obtaining a<br>
+ * copy of this software and associated documentation files (the "Software"),<br>
+ * to deal in the Software without restriction, including without limitation<br>
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,<br>
+ * and/or sell copies of the Software, and to permit persons to whom the<br>
+ * Software is furnished to do so, subject to the following conditions:<br>
+ *<br>
+ * The above copyright notice and this permission notice (including the next<br>
+ * paragraph) shall be included in all copies or substantial portions of the<br>
+ * Software.<br>
+ *<br>
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR<br>
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,<br>
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL<br>
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER<br>
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING<br>
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER<br>
+ * DEALINGS IN THE SOFTWARE.<br>
+ */<br>
+<br>
+/**<br>
+ * \file<br>
+ * \brief Test texturing from an ASTC miptree of a real image.<br>
+ *<br>
+ * This is an adaptation of the khr_texture_compression_astc-miptree test.<br>
+ *<br>
+ * This test draws miplevels of the compressed textures in a 2D array<br>
+ * according to the MIPLAYOUT_BELOW organization scheme. Each miplevel of<br>
+ * both images are compared for equality after each level is drawn.<br>
+ */<br>
+<br>
+#include "piglit-util-gl.h"<br>
+#include "piglit_ktx.h"<br>
+<br>
+#define num_levels 8<br>
+#define level0_width 160<br>
+#define level0_height 106<br>
+<br>
+#define num_vertices 4<br>
+<br>
+static GLuint prog;<br>
+<br>
+static struct piglit_gl_test_config *piglit_config;<br>
+<br>
+<br>
+/**<br>
+ * The \a filename is relative to the current test's source directory.<br>
+ *<br>
+ * A new texture is created and returned in \a tex_name.<br>
+ */<br>
+static void<br>
+load_texture(const char *dir1, const char *dir2,<br>
+ const char *filename, GLuint *tex_name)<br>
+{<br>
+ struct piglit_ktx *ktx;<br>
+ const struct piglit_ktx_info *info;<br>
+ char filepath[4096];<br>
+ bool ok = true;<br>
+<br>
+ piglit_join_paths(filepath, sizeof(filepath), 7,<br>
+ piglit_source_dir(),<br>
+ "tests",<br>
+ "spec",<br>
+ "khr_texture_compression_astc",<br>
+ dir1,<br>
+ dir2,<br>
+ filename);<br>
+<br>
+ ktx = piglit_ktx_read_file(filepath);<br>
+ if (ktx == NULL)<br>
+ piglit_report_result(PIGLIT_FAIL);<br>
+<br>
+<br>
+ info = piglit_ktx_get_info(ktx);<br>
+ assert(info->num_miplevels == num_levels);<br>
+ assert((info->target == GL_TEXTURE_2D_ARRAY) || (info->target == GL_TEXTURE_2D));<br>
+ assert(info->pixel_width == level0_width);<br>
+ assert(info->pixel_height== level0_height);<br>
+<br>
+ *tex_name = 0;<br>
+ ok = piglit_ktx_load_texture(ktx, tex_name, NULL);<br>
+ if (!ok)<br>
+ piglit_report_result(PIGLIT_FAIL);<br>
+<br>
+ piglit_ktx_destroy(ktx);<br>
+}<br>
+<br>
+/** Compares the compresseed texture against the decompressed texture */<br>
+bool draw_compare_levels(GLint index,<br>
+ GLint level_pixel_size_loc, GLint pixel_offset_loc,<br>
+ GLuint compressed_tex)<br>
+{<br>
+ unsigned y = 0;<br>
+ unsigned x = 0;<br>
+ bool pass = true;<br>
+ int level = 0;<br>
+<br>
+ glBindTexture(GL_TEXTURE_2D_ARRAY, compressed_tex);<br>
+<br>
+ for (; level < num_levels; ++level) {<br>
+ int w = level0_width >> level;<br>
+ int h = level0_height >> level;<br>
+ glUniform2f(level_pixel_size_loc, (float) w, (float) h);<br>
+<br>
+ /* Draw miplevel of compressed texture 1. */<br>
+ glUniform2f(pixel_offset_loc, x, y);<br>
+ glUniform1i(index, 0);<br>
+ glDrawArrays(GL_TRIANGLE_FAN, 0, num_vertices);<br>
+<br>
+ /* Draw miplevel of compressed texture 2. */<br>
+ glUniform2f(pixel_offset_loc, level0_width + x, y);<br>
+ glUniform1i(index, 1);<br>
+ glDrawArrays(GL_TRIANGLE_FAN, 0, num_vertices);<br>
+<br>
+ if (pass) {<br>
+ pass = piglit_probe_rects_equal(x, y,<br>
+ level0_width + x, y,<br>
+ w, h, GL_RGBA);<br>
+<br>
+ if (!pass)<br>
+ piglit_loge("Miplevel %d", level);<br>
+ }<br>
+<br>
+ /* Update the next miplevel arrangement */<br>
+ if (level == 1)<br>
+ x += w;<br>
+ else<br>
+ y += h;<br>
+ }<br>
+<br>
+ piglit_present_results();<br>
+ return pass;<br>
+}<br>
+<br>
+enum piglit_result<br>
+test_miptrees(void* odd)<br>
+{<br>
+ int subtest = 0;<br>
+ int block_dims = *(bool*)odd;<br>
+<br>
+ /* Texture objects. */<br>
+ GLuint compressed_tex;<br>
+<br>
+ static const char * tests[3] = {"hdr", "ldrs", "ldrl"};<br>
+ static const char * block_dim_str[2] = {"12x12", "5x5"};<br>
+<br>
+<br>
+ GLint pixel_offset_loc = glGetUniformLocation(prog, "pixel_offset");<br>
+ GLint level_pixel_size_loc = glGetUniformLocation(prog,<br>
+ "level_pixel_size");<br>
+ GLint index = glGetUniformLocation(prog, "index");<br>
+<br>
+ /* Generate filename for compressed texture */<br>
+ char cur_file[50];<br>
+ snprintf(cur_file, sizeof(cur_file), "array/waffles-%s.ktx",<br>
+ block_dim_str[block_dims]);<br>
+<br>
+ /* Test each submode */<br>
+ for (; subtest < ARRAY_SIZE(tests); ++subtest) {<br>
+<br>
+ /* Load texture for current submode and block size */<br>
+ load_texture("compressed", tests[subtest], cur_file,<br>
+ &compressed_tex);<br>
+<br>
+ /* Draw and compare each level of the two textures */<br>
+ glClear(GL_COLOR_BUFFER_BIT);<br>
+ if (!draw_compare_levels(index, level_pixel_size_loc,<br>
+ pixel_offset_loc, compressed_tex)) {<br>
+ piglit_loge("Mode %s Block %s.", tests[subtest],<br>
+ block_dim_str[block_dims]);<br>
+ return PIGLIT_FAIL;<br>
+ }<br>
+ }<br>
+ return PIGLIT_PASS;<br>
+}<br>
+<br>
+PIGLIT_GL_TEST_CONFIG_BEGIN<br>
+<br>
+ piglit_config = &config;<br>
+ config.supports_gl_compat_version = 11;<br>
+ config.supports_gl_es_version = 10;<br>
+<br>
+ config.window_width = 2 * level0_width;<br>
+ config.window_height = level0_height + (level0_height >> 1);<br>
+ config.window_visual = PIGLIT_GL_VISUAL_RGB | PIGLIT_GL_VISUAL_DOUBLE;<br>
+ static bool is_odd[2] = {true, false};<br>
+<br>
+ config.subtests = (struct piglit_subtest[]) {<br>
+ {<br>
+ "5x5 Block Dim",<br>
+ "odd",<br>
+ test_miptrees,<br>
+ &is_odd[0]<br>
+ },<br>
+ {<br>
+ "12x12 Block Dim",<br>
+ "even",<br>
+ test_miptrees,<br>
+ &is_odd[1]<br>
+ },<br>
+ {NULL},<br>
+ };<br>
+<br>
+PIGLIT_GL_TEST_CONFIG_END<br>
+<br>
+void<br>
+piglit_init(int argc, char **argv)<br>
+{<br>
+ static const char vs_source[] =<br>
+ "#version 130\n"<br>
+ "\n"<br>
+ "uniform vec2 window_pixel_size;\n"<br>
+ "uniform vec2 level_pixel_size;\n"<br>
+ "uniform vec2 pixel_offset;\n"<br>
+ "\n"<br>
+ "// vertex is some corner of the unit square [0,1]^2 \n"<br>
+ "attribute vec2 vertex;\n"<br>
+ "varying vec2 tex_coord;\n"<br>
+ "\n"<br>
+ "void main()\n"<br>
+ "{\n"<br>
+ " vec2 pos = vertex;\n"<br>
+ " pos *= level_pixel_size;\n"<br>
+ " pos += pixel_offset;\n"<br>
+ " pos /= 0.5 * window_pixel_size;\n"<br>
+ " pos -= vec2(1, 1);\n"<br>
+ " gl_Position = vec4(pos.xy, 0.0, 1.0);\n"<br>
+ "\n"<br>
+ " tex_coord = vertex;\n"<br>
+ "}\n";<br>
+<br>
+ static const char fs_source[] =<br>
+ "#version 130\n"<br>
+ "precision highp float;\n"<br>
+ "\n"<br>
+ "uniform sampler2DArray tex;\n"<br>
+ "uniform int index;\n"<br>
+ "varying vec2 tex_coord;\n"<br>
+ "\n"<br>
+ "void main()\n"<br>
+ "{\n"<br>
+ " vec4 t = texture(tex, vec3(tex_coord.x, tex_coord.y, index));\n"<br>
+ " gl_FragColor = vec4(t.rgb, 1.0);\n"<br>
+ "}\n";<br>
+<br>
+ /* Vertices to draw a square triangle strip. */<br>
+ static const GLfloat vertices[2 * num_vertices] = {<br>
+ 0, 0,<br>
+ 1, 0,<br>
+ 1, 1,<br>
+ 0, 1,<br>
+ };<br>
+<br>
+ GLint vertex_loc;<br>
+ GLuint vertex_buf;<br>
+ GLuint vao;<br>
+<br>
+ piglit_require_extension("GL_KHR_texture_compression_astc_ldr");<br>
+<br>
+ glClearColor(0.9098, 0.8314, 0.7843, 1.0);<br>
+ glViewport(0, 0, piglit_width, piglit_height);<br>
+<br>
+ glGenBuffers(1, &vertex_buf);<br>
+ glBindBuffer(GL_ARRAY_BUFFER, vertex_buf);<br>
+<br>
+ glGenVertexArrays(1, &vao);<br>
+ glBindVertexArray(vao);<br>
+<br>
+ prog = piglit_build_simple_program(vs_source, fs_source);<br>
+ glReleaseShaderCompiler();<br>
+ glUseProgram(prog);<br>
+<br>
+ vertex_loc = glGetAttribLocation(prog, "vertex");<br>
+ glEnableVertexAttribArray(vertex_loc);<br>
+ glVertexAttribPointer(vertex_loc, 2, GL_FLOAT, GL_FALSE, 0, NULL);<br>
+ glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices,<br>
+ GL_STATIC_DRAW);<br>
+<br>
+ glUniform1i(glGetUniformLocation(prog, "tex"), 0);<br>
+ glUniform2f(glGetUniformLocation(prog, "window_pixel_size"),<br>
+ piglit_width, piglit_height);<br>
+}<br>
+<br>
+enum piglit_result<br>
+piglit_display(void)<br>
+{<br>
+ return piglit_run_selected_subtests(piglit_config->subtests,<br>
+ piglit_config->selected_subtests,<br>
+ piglit_config->num_selected_subtests,<br>
+ PIGLIT_SKIP);<br>
+}<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.5.1<br>
<br>
</font></span></blockquote></div><br></div>