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

Marek Olšák maraeo at gmail.com
Sun Feb 1 09:16:01 PST 2015


From: Marek Olšák <marek.olsak at 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



More information about the mesa-dev mailing list