st/nine: Add variables containing the size of the constant buffers
authorAxel Davy <axel.davy@ens.fr>
Fri, 2 Jan 2015 13:22:17 +0000 (14:22 +0100)
committerEmil Velikov <emil.l.velikov@gmail.com>
Thu, 22 Jan 2015 22:16:24 +0000 (22:16 +0000)
Reviewed-by: Tiziano Bacocco <tizbac2@gmail.com>
Signed-off-by: Axel Davy <axel.davy@ens.fr>
Cc: "10.4" <mesa-stable@lists.freedesktop.org>
src/gallium/state_trackers/nine/device9.c
src/gallium/state_trackers/nine/device9.h
src/gallium/state_trackers/nine/stateblock9.c

index 4d6ae60..2d5a7f6 100644 (file)
@@ -109,7 +109,7 @@ NineDevice9_RestoreNonCSOState( struct NineDevice9 *This, unsigned mask )
             cb.buffer = This->constbuf_vs;
             cb.user_buffer = NULL;
         }
-        cb.buffer_size = This->constbuf_vs->width0;
+        cb.buffer_size = This->vs_const_size;
         pipe->set_constant_buffer(pipe, PIPE_SHADER_VERTEX, 0, &cb);
 
         if (This->prefer_user_constbuf) {
@@ -117,7 +117,7 @@ NineDevice9_RestoreNonCSOState( struct NineDevice9 *This, unsigned mask )
         } else {
             cb.buffer = This->constbuf_ps;
         }
-        cb.buffer_size = This->constbuf_ps->width0;
+        cb.buffer_size = This->ps_const_size;
         pipe->set_constant_buffer(pipe, PIPE_SHADER_FRAGMENT, 0, &cb);
     }
 
@@ -262,6 +262,8 @@ NineDevice9_ctor( struct NineDevice9 *This,
         This->max_ps_const_f = max_const_ps -
                                (NINE_MAX_CONST_I + NINE_MAX_CONST_B / 4);
 
+        This->vs_const_size = max_const_vs * sizeof(float[4]);
+        This->ps_const_size = max_const_ps * sizeof(float[4]);
         /* Include space for I,B constants for user constbuf. */
         This->state.vs_const_f = CALLOC(NINE_MAX_CONST_ALL, sizeof(float[4]));
         This->state.ps_const_f = CALLOC(NINE_MAX_CONST_ALL, sizeof(float[4]));
@@ -283,10 +285,10 @@ NineDevice9_ctor( struct NineDevice9 *This,
         tmpl.bind = PIPE_BIND_CONSTANT_BUFFER;
         tmpl.flags = 0;
 
-        tmpl.width0 = max_const_vs * sizeof(float[4]);
+        tmpl.width0 = This->vs_const_size;
         This->constbuf_vs = pScreen->resource_create(pScreen, &tmpl);
 
-        tmpl.width0 = max_const_ps * sizeof(float[4]);
+        tmpl.width0 = This->ps_const_size;
         This->constbuf_ps = pScreen->resource_create(pScreen, &tmpl);
 
         if (!This->constbuf_vs || !This->constbuf_ps)
index 9deea2c..dc97ae7 100644 (file)
@@ -77,6 +77,8 @@ struct NineDevice9
 
     struct pipe_resource *constbuf_vs;
     struct pipe_resource *constbuf_ps;
+    uint16_t vs_const_size;
+    uint16_t ps_const_size;
     uint16_t max_vs_const_f;
     uint16_t max_ps_const_f;
 
index 36b5e77..220b196 100644 (file)
@@ -43,8 +43,8 @@ NineStateBlock9_ctor( struct NineStateBlock9 *This,
 
     This->type = type;
 
-    This->state.vs_const_f = MALLOC(pParams->device->constbuf_vs->width0);
-    This->state.ps_const_f = MALLOC(pParams->device->constbuf_ps->width0);
+    This->state.vs_const_f = MALLOC(This->base.device->vs_const_size);
+    This->state.ps_const_f = MALLOC(This->base.device->ps_const_size);
     if (!This->state.vs_const_f || !This->state.ps_const_f)
         return E_OUTOFMEMORY;