<div dir="ltr"><br><br>On Tue, Jul 28, 2015 at 1:23 PM, Ian Romanick <<a href="mailto:idr@freedesktop.org">idr@freedesktop.org</a>> wrote:<br>> On 07/27/2015 02:13 PM, Nanley Chery wrote:<br>>> From: Nanley Chery <<a href="mailto:nanley.g.chery@intel.com">nanley.g.chery@intel.com</a>><br>>><br>>> The buffer variable is too small to accomodate running the<br>>> [Compressed]TexImage commands with the GL_PALETTE8_RGBA8_OES format<br>>> (which needs 1024 bytes instead of the 768 allocated). Rely on the GL<br>>                ^^^^<br>> You mean (32 bits * 256 entries) + (16 * 16) = 1280, right? :)<br>><br><br>Whoops. Yes, I did.<br><br>>> behavior of allocating unspecified memory when a NULL pointer is passed.<br>><br>> I'm a little bit skeptical about this.<br>><div>>     *   Should glCompressedTexSubImage2D be allowed for modifying paletted<br>>         texture data.<br>><br>>         RESOLVED:  No, this would then require implementations that do not<br>>         support paletted formats internally to also store the palette<br>>         per texture.  This can be a memory overhead on platforms that are<br>>         memory constrained.<br>><br>> I have a feeling that some implementations would generate an error for<br>> this even though the spec does not call for one.<br>><br><div><br>OpenGL 4.5 Core:<br><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><br>If the data argument of TexImage1D, TexImage2D, or TexImage3D is NULL ,<br>and the pixel unpack buffer object is zero, a one-, two-, or three-dimensional tex-<br>ture image is created with the specified target, level, internalformat, border, width,<br>height, and depth, but with unspecified image contents. In this case no pixel values<br>are accessed in client memory, and no pixel processing is performed.<br><br>[...]<br><br>If the data argument of CompressedTexImage1D, CompressedTexImage2D,<br>or CompressedTexImage3D is NULL , and the pixel unpack buffer object is zero,<br>a texture image with unspecified image contents is created, just as when a NULL<br>pointer is passed to TexImage1D, TexImage2D, or TexImage3D.</blockquote><br>GLES 1.0 says about the same thing about TexImage but not about </div><div>CompressedTexImage. Perhaps this could be why some implementations would emit errors?</div><div><br>> It also shouldn't matter for most (all?) of these cases.  These are all<br>> trying to get the implementation to generate an error based on other<br>> parameters to the functions.  The error should be generated before<br>> dereferencing the pointer.<br>></div><div><br></div><div>I agree. </div><div><br>> I think it's better to just increase the size of the buffer to (4 *<br>> 256) + (16 * 16).<br>></div><div>>> Signed-off-by: Nanley Chery <<a href="mailto:nanley.g.chery@intel.com">nanley.g.chery@intel.com</a>><br>>> Cc: Ian Romanick <<a href="mailto:ian.d.romanick@intel.com">ian.d.romanick@intel.com</a>><br>>> ---<br>>>  .../oes_compressed_paletted_texture-api.c                     | 11 +++++------<br>>>  1 file changed, 5 insertions(+), 6 deletions(-)<br>>><br>>> diff --git a/tests/spec/oes_compressed_paletted_texture/oes_compressed_paletted_texture-api.c b/tests/spec/oes_compressed_paletted_texture/oes_compressed_paletted_texture-api.c<br>>> index 13b0bba..4d9f5b7 100644<br>>> --- a/tests/spec/oes_compressed_paletted_texture/oes_compressed_paletted_texture-api.c<br>>> +++ b/tests/spec/oes_compressed_paletted_texture/oes_compressed_paletted_texture-api.c<br>>> @@ -63,7 +63,6 @@ piglit_display(void)<br>>>  void<br>>>  piglit_init(int argc, char **argv)<br>>>  {<br>>> -     GLubyte buffer[512 + (16 * 16)];<br>>>       GLuint tex;<br>>>       GLsizei size;<br>>>       unsigned i;<br>>> @@ -98,7 +97,7 @@ piglit_init(int argc, char **argv)<br>>>       for (i = 0; i < ARRAY_SIZE(t); i++) {<br>>>               glTexImage2D(GL_TEXTURE_2D, 0, t[i].internal_format,<br>>>                            16, 16, 0,<br>>> -                          t[i].internal_format, t[i].type, buffer);<br>>> +                          t[i].internal_format, t[i].type, NULL);<br>>>  #if defined(PIGLIT_USE_OPENGL_ES1) || defined(PIGLIT_USE_OPENGL_ES2)<br>>>               {<br>>>                       GLenum error = glGetError();<br>>> @@ -131,13 +130,13 @@ piglit_init(int argc, char **argv)<br>>>                */<br>>>               glCompressedTexImage2D(GL_TEXTURE_2D, 0, t[i].internal_format,<br>>>                                         16, 16, 0,<br>>> -                                       size + t[i].palette_size - 1, buffer);<br>>> +                                       size + t[i].palette_size - 1, NULL);<br>>>               if (!piglit_check_gl_error(GL_INVALID_VALUE))<br>>>                       piglit_report_result(PIGLIT_FAIL);<br>>><br>>>               glCompressedTexImage2D(GL_TEXTURE_2D, 0, t[i].internal_format,<br>>>                                         16, 16, 0,<br>>> -                                       size + t[i].palette_size, buffer);<br>>> +                                       size + t[i].palette_size, NULL);<br>>>               if (!piglit_check_gl_error(GL_NO_ERROR))<br>>>                       piglit_report_result(PIGLIT_FAIL);<br>>><br>>> @@ -155,7 +154,7 @@ piglit_init(int argc, char **argv)<br>>>               size = (8 * 8) >> t[i].shift;<br>>>               glCompressedTexImage2D(GL_TEXTURE_2D, 1, t[i].internal_format,<br>>>                                      8, 8, 0,<br>>> -                                    size + t[i].palette_size, buffer);<br>>> +                                    size + t[i].palette_size, NULL);<br>>>               if (!piglit_check_gl_error(GL_INVALID_VALUE))<br>>>                       piglit_report_result(PIGLIT_FAIL);<br>>><br>>> @@ -184,7 +183,7 @@ piglit_init(int argc, char **argv)<br>>>               size = (17 * 17) >> t[i].shift;<br>>>               glCompressedTexImage2D(GL_TEXTURE_2D, 0, t[i].internal_format,<br>>>                                      16, 16, 1,<br>>> -                                    size + t[i].palette_size, buffer);<br>>> +                                    size + t[i].palette_size, NULL);<br>>>  #if defined(PIGLIT_USE_OPENGL_ES1) || defined(PIGLIT_USE_OPENGL_ES2)<br>>>               if (!piglit_check_gl_error(GL_INVALID_VALUE))<br>>>                       piglit_report_result(PIGLIT_FAIL);<br>>><br>></div></div></div>