[Mesa-dev] [PATCH 7/9] gallium/u_tests: test a NULL texture sampler view

Marek Olšák maraeo at gmail.com
Fri Feb 6 11:08:44 PST 2015


The updated patch is attached. It allows both (0,0,0,0) and (0,0,0,1).

Marek

On Mon, Feb 2, 2015 at 5:19 PM, Roland Scheidegger <sroland at vmware.com> wrote:
> Actually, since ARB_robust_buffer_access_behavior, GL requires some
> specfic values, but it's - odd...
> "In all the above cases, if the context was created with robust buffer
> access enabled then instead of undefined behavior the result of the
> texel fetch is zero. For the case of a texel fetch on an incomplete
> texture the result is a texture source color of (0, 0, 0, 1)."
> So, it seems if the texture was incomplete, then 0/0/0/1 has to be
> returned, but if it was unbound, then all zeros is the right answer.
> However, this is only true for textures _fetches_, not ordinary sampling
> (it is described in the vertex shader functionality). I would assume
> this to be the case for ordinary sampling too, but there the spec only
> describes the 0/0/0/1 behavior for incomplete textures, not the behavior
> for unbound ones...
>
> Roland
>
>
>
> Am 02.02.2015 um 16:51 schrieb Roland Scheidegger:
>> I don't think this is really correct. llvmpipe will return all zeros on
>> purpose, because this is d3d10 behavior (and dummy textures cannot work
>> correctly with d3d10). Traditionally both d3d9 and gl state trackers
>> used dummy textures, though I'm unsure what values they required (if
>> any). (For d3d9 though 0/0/0/1 would be somewhat odd since it would be
>> different to what bound textures but unused channels have to return, but
>> d3d9 is sometimes odd so it's possible. Well in that way d3d10 is odd
>> too...)
>> I certainly do agree though with the "don't crash" part.
>>
>> Am 01.02.2015 um 18:15 schrieb Marek Olšák:
>>> From: Marek Olšák <marek.olsak at amd.com>
>>>
>>> It shouldn't crash the GPU and it should return (0, 0, 0, 1).
>>>
>>> This is r300 behavior, so I assume it's also DX9 behavior.
>>> Radeonsi can support this easily.
>>> ---
>>>  src/gallium/auxiliary/util/u_tests.c | 39 ++++++++++++++++++++++++++++++++++++
>>>  1 file changed, 39 insertions(+)
>>>
>>> diff --git a/src/gallium/auxiliary/util/u_tests.c b/src/gallium/auxiliary/util/u_tests.c
>>> index 89ae840..9c8514c 100644
>>> --- a/src/gallium/auxiliary/util/u_tests.c
>>> +++ b/src/gallium/auxiliary/util/u_tests.c
>>> @@ -304,6 +304,44 @@ tgsi_vs_window_space_position(struct pipe_context *ctx)
>>>     util_report_result(pass);
>>>  }
>>>
>>> +static void
>>> +null_sampler_view(struct pipe_context *ctx)
>>> +{
>>> +   struct cso_context *cso;
>>> +   struct pipe_resource *cb;
>>> +   void *fs, *vs;
>>> +   bool pass = true;
>>> +   static const float expected[] = {0, 0, 0, 1};
>>> +
>>> +   cso = cso_create_context(ctx);
>>> +   cb = util_create_texture2d(ctx->screen, 256, 256,
>>> +                              PIPE_FORMAT_R8G8B8A8_UNORM);
>>> +   util_set_common_states_and_clear(cso, ctx, cb);
>>> +
>>> +   ctx->set_sampler_views(ctx, PIPE_SHADER_FRAGMENT, 0, 1, NULL);
>>> +
>>> +   /* Fragment shader. */
>>> +   fs = util_make_fragment_tex_shader(ctx, TGSI_TEXTURE_2D,
>>> +                                      TGSI_INTERPOLATE_LINEAR);
>>> +   cso_set_fragment_shader_handle(cso, fs);
>>> +
>>> +   /* Vertex shader. */
>>> +   vs = util_set_passthrough_vertex_shader(cso, ctx, false);
>>> +   util_draw_fullscreen_quad(cso);
>>> +
>>> +   /* Probe pixels. */
>>> +   pass = pass && util_probe_rect_rgba(ctx, cb, 0, 0,
>>> +                                       cb->width0, cb->height0, expected);
>>> +
>>> +   /* Cleanup. */
>>> +   cso_destroy_context(cso);
>>> +   ctx->delete_vs_state(ctx, vs);
>>> +   ctx->delete_fs_state(ctx, fs);
>>> +   pipe_resource_reference(&cb, NULL);
>>> +
>>> +   util_report_result(pass);
>>> +}
>>> +
>>>  /**
>>>   * Run all tests. This should be run with a clean context after
>>>   * context_create.
>>> @@ -314,6 +352,7 @@ util_run_tests(struct pipe_screen *screen)
>>>     struct pipe_context *ctx = screen->context_create(screen, NULL);
>>>
>>>     tgsi_vs_window_space_position(ctx);
>>> +   null_sampler_view(ctx);
>>>
>>>     ctx->destroy(ctx);
>>>
>>>
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.freedesktop.org_mailman_listinfo_mesa-2Ddev&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=Vjtt0vs_iqoI31UfJxBl7yv9I2FeiaeAYgMTLKRBc_I&m=XOQSHQnIu1sXl65rM4KSLIO5-Zej5H2L9o1CVQNkXvQ&s=uBbprkG3Qul-bWCqNmg5fX-4b9csQamQpx5wWJZmWcU&e=
>>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-gallium-u_tests-test-a-NULL-texture-sampler-view.patch
Type: text/x-patch
Size: 5780 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150206/b7db3ee7/attachment-0001.bin>


More information about the mesa-dev mailing list