graw: test multiple cb's in geometry shaders
authorZack Rusin <zackr@vmware.com>
Tue, 15 Jun 2010 16:14:18 +0000 (12:14 -0400)
committerZack Rusin <zackr@vmware.com>
Tue, 15 Jun 2010 16:14:18 +0000 (12:14 -0400)
src/gallium/tests/graw/geometry-shader/mov-cb-2d.txt [new file with mode: 0644]
src/gallium/tests/graw/gs-test.c

diff --git a/src/gallium/tests/graw/geometry-shader/mov-cb-2d.txt b/src/gallium/tests/graw/geometry-shader/mov-cb-2d.txt
new file mode 100644 (file)
index 0000000..058acfb
--- /dev/null
@@ -0,0 +1,24 @@
+GEOM
+PROPERTY GS_INPUT_PRIMITIVE TRIANGLES
+PROPERTY GS_OUTPUT_PRIMITIVE TRIANGLE_STRIP
+DCL IN[][0], POSITION, CONSTANT
+DCL IN[][1], COLOR, CONSTANT
+DCL OUT[0], POSITION, CONSTANT
+DCL OUT[1], COLOR, CONSTANT
+DCL CONST[1][0..6]
+
+MOV OUT[0], IN[0][0]
+MOV OUT[1], CONST[1][0]
+EMIT
+
+MOV OUT[0], IN[1][0]
+MOV OUT[1], CONST[1][1]
+EMIT
+
+MOV OUT[0], IN[2][0]
+MOV OUT[1], CONST[1][4]
+EMIT
+
+ENDPRIM
+
+END
index 8d25fed0f540790071aae0fe59e663238ca88709..94d6fed7f4a1e07fadb5684c5d82f0ec1a8e4666 100644 (file)
@@ -44,7 +44,8 @@ static const int HEIGHT = 250;
 static struct pipe_screen *screen = NULL;
 static struct pipe_context *ctx = NULL;
 static struct pipe_resource *rttex = NULL;
-static struct pipe_resource *constbuf = NULL;
+static struct pipe_resource *constbuf1 = NULL;
+static struct pipe_resource *constbuf2 = NULL;
 static struct pipe_surface *surf = NULL;
 static struct pipe_sampler_view *sv = NULL;
 static void *sampler = NULL;
@@ -94,7 +95,7 @@ static struct vertex vertices_strip[] =
      { -1, -1, 0, 1 } },
 };
 
-static float constants[] = 
+static float constants1[] =
 {  0.4, 0, 0,  1,
    1,   1, 1,  1,
    2,   2, 2,  2,
@@ -111,6 +112,25 @@ static float constants[] =
    0, 0, 0, 1,
 };
 
+
+static float constants2[] =
+{  1, 0, 0,  1,
+   0, 1, 0,  1,
+   0, 0, 1,  1,
+   0, 0, 0,  1,
+
+   1,  1, 0, 1,
+   1, .5, 0, 1,
+   0,  1, 1, 1,
+   1,  0, 1, 1,
+
+   1, 0, 0, 0.5,
+   0, 1, 0, 0.5,
+   0, 0, 1, 0,
+   0, 0, 0, 1,
+};
+
+
 static void init_fs_constbuf( void )
 {
    struct pipe_resource templat;
@@ -118,34 +138,54 @@ static void init_fs_constbuf( void )
 
    templat.target = PIPE_BUFFER;
    templat.format = PIPE_FORMAT_R8_UNORM;
-   templat.width0 = sizeof(constants);
+   templat.width0 = sizeof(constants1);
    templat.height0 = 1;
    templat.depth0 = 1;
    templat.last_level = 0;
    templat.nr_samples = 1;
    templat.bind = PIPE_BIND_CONSTANT_BUFFER;
 
-   constbuf = screen->resource_create(screen,
-                                      &templat);
-   if (constbuf == NULL)
+   constbuf1 = screen->resource_create(screen, &templat);
+   if (constbuf1 == NULL)
+      exit(4);
+   constbuf2 = screen->resource_create(screen, &templat);
+   if (constbuf2 == NULL)
       exit(4);
 
+   {
+      u_box_2d(0,0,sizeof(constants1),1, &box);
 
-   u_box_2d(0,0,sizeof(constants),1, &box);
+      ctx->transfer_inline_write(ctx,
+                                 constbuf1,
+                                 u_subresource(0,0),
+                                 PIPE_TRANSFER_WRITE,
+                                 &box,
+                                 constants1,
+                                 sizeof constants1,
+                                 sizeof constants1);
 
-   ctx->transfer_inline_write(ctx,
-                              constbuf,
-                              u_subresource(0,0),
-                              PIPE_TRANSFER_WRITE,
-                              &box,
-                              constants,
-                              sizeof constants,
-                              sizeof constants);
 
+      ctx->set_constant_buffer(ctx,
+                               PIPE_SHADER_GEOMETRY, 0,
+                               constbuf1);
+   }
+   {
+      u_box_2d(0,0,sizeof(constants2),1, &box);
+
+      ctx->transfer_inline_write(ctx,
+                                 constbuf2,
+                                 u_subresource(0,0),
+                                 PIPE_TRANSFER_WRITE,
+                                 &box,
+                                 constants2,
+                                 sizeof constants2,
+                                 sizeof constants2);
 
-   ctx->set_constant_buffer(ctx,
-                            PIPE_SHADER_FRAGMENT, 0,
-                            constbuf);
+
+      ctx->set_constant_buffer(ctx,
+                               PIPE_SHADER_GEOMETRY, 1,
+                               constbuf2);
+   }
 }