graw: fix setup for multiple constant buffers
authorZack Rusin <zackr@vmware.com>
Tue, 15 Jun 2010 16:01:47 +0000 (12:01 -0400)
committerZack Rusin <zackr@vmware.com>
Tue, 15 Jun 2010 16:01:47 +0000 (12:01 -0400)
src/gallium/tests/graw/fs-test.c
src/gallium/tests/python/tests/regress/fragment-shader/frag-cb-2d.sh

index 3389efb7ca86ec26a7743ebd75487c7ab493832a..dea087357d62d64a463130612eabb4292210fac6 100644 (file)
@@ -42,7 +42,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;
@@ -73,7 +74,7 @@ static struct vertex vertices[] =
      { -1, 0, 0, 1 } },
 };
 
-static float constants[] = 
+static float constants1[] = 
 {  0.4, 0, 0,  1,
    1,   1, 1,  1,
    2,   2, 2,  2,
@@ -81,7 +82,25 @@ static float constants[] =
 
    3,  0, 0, 0,
    0, .5, 0, 0,
-   0,  0, 1, 0,
+   1,  0, 0, 1,
+   0,  0, 0, 1,
+
+   1, 0, 0, 0.5,
+   0, 1, 0, 0.5,
+   0, 0, 1, 0,
+   0, 0, 0, 1,
+};
+
+
+static float constants2[] = 
+{  1, 0, 0,  1,
+   0, 1, 0,  1,
+   0, 0, 1,  1,
+   0, 0, 0,  0,
+
+   1,  1, 0, 1,
+   1, .5, 0, 1,
+   1,  0, 0, 1,
    0,  0, 0, 1,
 
    1, 0, 0, 0.5,
@@ -97,34 +116,58 @@ 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(constants),1, &box);
 
-   ctx->transfer_inline_write(ctx,
-                              constbuf,
-                              u_subresource(0,0),
-                              PIPE_TRANSFER_WRITE,
-                              &box,
-                              constants,
-                              sizeof constants,
-                              sizeof constants);
+   {
+      u_box_2d(0,0,sizeof(constants1),1, &box);
+
+      ctx->transfer_inline_write(ctx,
+                                 constbuf1,
+                                 u_subresource(0,0),
+                                 PIPE_TRANSFER_WRITE,
+                                 &box,
+                                 constants1,
+                                 sizeof constants1,
+                                 sizeof constants1);
 
 
-   ctx->set_constant_buffer(ctx,
-                            PIPE_SHADER_FRAGMENT, 0,
-                            constbuf);
+      ctx->set_constant_buffer(ctx,
+                               PIPE_SHADER_FRAGMENT, 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, 1,
+                               constbuf2);
+   }
 }
 
 
index f70a5146f4e26ff01a3e4cb67d57a7a764ed48aa..bbc3a10f9b5ccf624ab3b114c306e63d666db466 100644 (file)
@@ -2,8 +2,8 @@ FRAG
 
 DCL IN[0], COLOR, LINEAR
 DCL OUT[0], COLOR
-DCL CONST[1][1..2]
+DCL CONST[1][6]
 
-MAD OUT[0], IN[0], CONST[1][2], CONST[1][1]
+MOV OUT[0], CONST[1][6]
 
 END