From: Marek Olšák <marek.ol...@amd.com> --- src/gallium/auxiliary/util/u_simple_shaders.c | 12 ++++++--- src/gallium/auxiliary/util/u_tests.c | 37 +++++++++++++++++++++------ 2 files changed, 38 insertions(+), 11 deletions(-)
diff --git a/src/gallium/auxiliary/util/u_simple_shaders.c b/src/gallium/auxiliary/util/u_simple_shaders.c index edb3037..c612b67 100644 --- a/src/gallium/auxiliary/util/u_simple_shaders.c +++ b/src/gallium/auxiliary/util/u_simple_shaders.c @@ -246,9 +246,15 @@ util_make_fragment_tex_shader_writemask(struct pipe_context *pipe, ureg_MOV( ureg, out, imm ); } - ureg_TEX( ureg, - ureg_writemask(out, writemask), - tex_target, tex, sampler ); + if (tex_target == TGSI_TEXTURE_BUFFER) + ureg_TXF(ureg, + ureg_writemask(out, writemask), + tex_target, tex, sampler); + else + ureg_TEX(ureg, + ureg_writemask(out, writemask), + tex_target, tex, sampler); + ureg_END( ureg ); return ureg_create_shader_and_destroy( ureg, pipe ); diff --git a/src/gallium/auxiliary/util/u_tests.c b/src/gallium/auxiliary/util/u_tests.c index 520354c..fb5bac4 100644 --- a/src/gallium/auxiliary/util/u_tests.c +++ b/src/gallium/auxiliary/util/u_tests.c @@ -33,7 +33,9 @@ #include "util/u_memory.h" #include "util/u_simple_shaders.h" #include "util/u_surface.h" +#include "util/u_string.h" #include "util/u_tile.h" +#include "tgsi/tgsi_strings.h" #include "tgsi/tgsi_text.h" #include "cso_cache/cso_context.h" #include <stdio.h> @@ -231,14 +233,21 @@ enum { }; static void -util_report_result_helper(const char *name, int status) +util_report_result_helper(int status, const char *name, ...) { - printf("Test(%s) = %s\n", name, + char buf[256]; + va_list ap; + + va_start(ap, name); + util_vsnprintf(buf, sizeof(buf), name, ap); + va_end(ap); + + printf("Test(%s) = %s\n", buf, status == SKIP ? "skip" : status == PASS ? "pass" : "fail"); } -#define util_report_result(status) util_report_result_helper(__func__, status) +#define util_report_result(status) util_report_result_helper(status, __func__) /** * Test TGSI_PROPERTY_VS_WINDOW_SPACE_POSITION. @@ -307,13 +316,23 @@ tgsi_vs_window_space_position(struct pipe_context *ctx) } static void -null_sampler_view(struct pipe_context *ctx) +null_sampler_view(struct pipe_context *ctx, unsigned tgsi_tex_target) { struct cso_context *cso; struct pipe_resource *cb; void *fs, *vs; bool pass = true; - static const float expected[] = {0, 0, 0, 1}; + static const float expected_tex[] = {0, 0, 0, 1}; + static const float expected_buf[] = {0, 0, 0, 0}; + const float *expected = tgsi_tex_target == TGSI_TEXTURE_BUFFER ? + expected_buf : expected_tex; + + if (tgsi_tex_target == TGSI_TEXTURE_BUFFER && + !ctx->screen->get_param(ctx->screen, PIPE_CAP_TEXTURE_BUFFER_OBJECTS)) { + util_report_result_helper(SKIP, "%s: %s", __func__, + tgsi_texture_names[tgsi_tex_target]); + return; + } cso = cso_create_context(ctx); cb = util_create_texture2d(ctx->screen, 256, 256, @@ -323,7 +342,7 @@ null_sampler_view(struct pipe_context *ctx) ctx->set_sampler_views(ctx, PIPE_SHADER_FRAGMENT, 0, 1, NULL); /* Fragment shader. */ - fs = util_make_fragment_tex_shader(ctx, TGSI_TEXTURE_2D, + fs = util_make_fragment_tex_shader(ctx, tgsi_tex_target, TGSI_INTERPOLATE_LINEAR); cso_set_fragment_shader_handle(cso, fs); @@ -341,7 +360,8 @@ null_sampler_view(struct pipe_context *ctx) ctx->delete_fs_state(ctx, fs); pipe_resource_reference(&cb, NULL); - util_report_result(pass); + util_report_result_helper(pass, "%s: %s", __func__, + tgsi_texture_names[tgsi_tex_target]); } static void @@ -408,7 +428,8 @@ 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); + null_sampler_view(ctx, TGSI_TEXTURE_2D); + null_sampler_view(ctx, TGSI_TEXTURE_BUFFER); null_constant_buffer(ctx); ctx->destroy(ctx); -- 2.1.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev