[Piglit] [PATCH] arb_shader_image_load_store: Create complete textures.
Dorian Apanel
dorian.apanel at gmail.com
Tue Apr 11 18:57:50 UTC 2017
Thank you very much Nicolai for deep explanation.
You're totally right.
2017-04-11 9:27 GMT+02:00 Nicolai Hähnle <nhaehnle at gmail.com>:
> On 10.04.2017 00:26, Dorian Apanel wrote:
>
>> Hi Nicolai,
>>
>> Thanks for checking it.
>> Yes I can add some negative tests for it - as another patch, maybe in
>> this week.
>>
>
> Thanks.
>
>
> As I understand the spec, log2(size) is not relevant here.
>> Example: You create texture, default filter uses mipmaps, and default
>> max level is 1000, base 0. You supply 5 mips (16,8,4,2,1). At this
>> point, even if log2(16)+1 == 5, texture is not complete. OGL expects 995
>> more levels of size 1.
>>
>> From Spec: "required width for mipmap level i is max(1, floor(w_b / 2^i))"
>> See also this SO answer http://stackoverflow.com/a/3906855/1688267 and
>> "Creating a complete texture" paragraph
>> here https://www.khronos.org/opengl/wiki/Common_Mistakes
>>
>
> Section 8.17 (Texture Completeness) says:
>
> "Image levels k where k < level_base or k > q are insignificant to the
> definition of completeness."
>
> ... and Section 8.14.3 (Mipmapping) defines q as:
>
> p = floor(log2 (maxsize)) + level_base
> q = min{p, level_max}
>
> Explicitly setting TEXTURE_MAX_LEVEL has *never* been a necessity in
> OpenGL. You only need it if, as in this test, you don't define the smallest
> levels in the mip tree.
>
> Cheers,
> Nicolai
>
>
>
>> Thanks,
>> Dorian
>>
>> 2017-04-05 15:58 GMT+02:00 Nicolai Hähnle <nhaehnle at gmail.com
>> <mailto:nhaehnle at gmail.com>>:
>>
>> On 05.04.2017 09:55, Dorian Apanel wrote:
>>
>> From: Dorian Apanel <dorian.apanel+piglit at gmail.com
>> <mailto:dorian.apanel%2Bpiglit at gmail.com>>
>>
>> Textures created by image load/store tests are not complete (max
>> level defaults to 1000).
>> Load/Store on incomplete textures should return zeros/change
>> nothing.
>> This fix sets proper base and max level of textures.
>>
>> Signed-off-by: Dorian Apanel <dorian.apanel at gmail.com
>> <mailto:dorian.apanel at gmail.com>>
>>
>>
>>
>> Interesting. It seems you're right, but could you please also add a
>> corresponding negative test and check it against whatever drivers
>> you have? I.e., a test that creates a texture with mipmaps enabled,
>> defines only the first level image, and then tries to use it from a
>> shader to make sure that (a) reads return 0 and (b) writes are
>> ignored?
>>
>> Also, the commit message doesn't quite capture the heart of it as
>> far as I understand it. The textures are incomplete because
>> num_levels levels are created, which may be less than log2(size). So
>> GL_TEXTURE_MAX_LEVEL is used to restrict the required number of
>> levels.
>>
>> Thanks,
>> Nicolai
>>
>>
>>
>> ---
>> tests/spec/arb_shader_image_load_store/common.c | 9 +++++++++
>> 1 file changed, 9 insertions(+)
>>
>> diff --git a/tests/spec/arb_shader_image_load_store/common.c
>> b/tests/spec/arb_shader_image_load_store/common.c
>> index cbeaac7..fdc2ef3 100644
>> --- a/tests/spec/arb_shader_image_load_store/common.c
>> +++ b/tests/spec/arb_shader_image_load_store/common.c
>> @@ -141,6 +141,11 @@ upload_image_levels(const struct image_info
>> img, unsigned num_levels,
>> glGenTextures(1, &textures[unit]);
>> glBindTexture(img.target->target, textures[unit]);
>>
>> + if (img.target->target != GL_TEXTURE_BUFFER) {
>> + glTexParameteri(img.target->target,
>> GL_TEXTURE_BASE_LEVEL, 0);
>> + glTexParameteri(img.target->target,
>> GL_TEXTURE_MAX_LEVEL, num_levels - 1);
>> + }
>> +
>> switch (img.target->target) {
>> case GL_TEXTURE_1D:
>> for (l = 0; l < num_levels; ++l) {
>> @@ -301,6 +306,8 @@ upload_image_levels(const struct image_info
>> img, unsigned num_levels,
>>
>> glGenTextures(1, &tmp_tex);
>> glBindTexture(GL_TEXTURE_2D, tmp_tex);
>> + glTexParameteri(GL_TEXTURE_2D,
>> GL_TEXTURE_BASE_LEVEL, 0);
>> + glTexParameteri(GL_TEXTURE_2D,
>> GL_TEXTURE_MAX_LEVEL, 0);
>>
>> if (img.target->target ==
>> GL_TEXTURE_2D_MULTISAMPLE_ARRAY) {
>>
>> glTexImage3DMultisample(GL_TEXTURE_2D_MULTISAMPLE_ARRAY,
>> @@ -462,6 +469,8 @@ download_image_levels(const struct
>> image_info img, unsigned num_levels,
>>
>> glGenTextures(1, &tmp_tex);
>> glBindTexture(GL_TEXTURE_2D, tmp_tex);
>> + glTexParameteri(GL_TEXTURE_2D,
>> GL_TEXTURE_BASE_LEVEL, 0);
>> + glTexParameteri(GL_TEXTURE_2D,
>> GL_TEXTURE_MAX_LEVEL, 0);
>>
>> glTexImage2D(GL_TEXTURE_2D, 0,
>> img.format->format,
>> grid.size.x, grid.size.y, 0,
>>
>>
>>
>> --
>> Lerne, wie die Welt wirklich ist,
>> Aber vergiss niemals, wie sie sein sollte.
>>
>>
>>
>
> --
> Lerne, wie die Welt wirklich ist,
> Aber vergiss niemals, wie sie sein sollte.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/piglit/attachments/20170411/d21c5025/attachment-0001.html>
More information about the Piglit
mailing list