[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