summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gallium/state_trackers/nine/device9.c5
-rw-r--r--src/gallium/state_trackers/nine/nine_state.c5
-rw-r--r--src/gallium/state_trackers/nine/nine_state.h1
3 files changed, 6 insertions, 5 deletions
diff --git a/src/gallium/state_trackers/nine/device9.c b/src/gallium/state_trackers/nine/device9.c
index dae7bd45767..ef3d2b0be58 100644
--- a/src/gallium/state_trackers/nine/device9.c
+++ b/src/gallium/state_trackers/nine/device9.c
@@ -267,7 +267,9 @@ NineDevice9_ctor( struct NineDevice9 *This,
/* Include space for I,B constants for user constbuf. */
This->state.vs_const_f = CALLOC(This->vs_const_size, 1);
This->state.ps_const_f = CALLOC(This->ps_const_size, 1);
- if (!This->state.vs_const_f || !This->state.ps_const_f)
+ This->state.vs_lconstf_temp = CALLOC(This->vs_const_size,1);
+ if (!This->state.vs_const_f || !This->state.ps_const_f ||
+ !This->state.vs_lconstf_temp)
return E_OUTOFMEMORY;
if (strstr(pScreen->get_name(pScreen), "AMD") ||
@@ -347,6 +349,7 @@ NineDevice9_dtor( struct NineDevice9 *This )
pipe_resource_reference(&This->constbuf_ps, NULL);
FREE(This->state.vs_const_f);
FREE(This->state.ps_const_f);
+ FREE(This->state.vs_lconstf_temp);
if (This->swapchains) {
for (i = 0; i < This->nswapchains; ++i)
diff --git a/src/gallium/state_trackers/nine/nine_state.c b/src/gallium/state_trackers/nine/nine_state.c
index e019dfb0f41..1187a20bdb3 100644
--- a/src/gallium/state_trackers/nine/nine_state.c
+++ b/src/gallium/state_trackers/nine/nine_state.c
@@ -500,7 +500,7 @@ update_vs_constants_userbuf(struct NineDevice9 *device)
const struct nine_lconstf *lconstf = &device->state.vs->lconstf;
const struct nine_range *r = lconstf->ranges;
unsigned n = 0;
- float *dst = (float *)MALLOC(cb.buffer_size);
+ float *dst = device->state.vs_lconstf_temp;
float *src = (float *)cb.user_buffer;
memcpy(dst, src, cb.buffer_size);
while (r) {
@@ -515,9 +515,6 @@ update_vs_constants_userbuf(struct NineDevice9 *device)
pipe->set_constant_buffer(pipe, PIPE_SHADER_VERTEX, 0, &cb);
- if (device->state.vs->lconstf.ranges)
- FREE((void *)cb.user_buffer);
-
if (device->state.changed.vs_const_f) {
struct nine_range *r = device->state.changed.vs_const_f;
struct nine_range *p = r;
diff --git a/src/gallium/state_trackers/nine/nine_state.h b/src/gallium/state_trackers/nine/nine_state.h
index 742c6f67425..58ca8c9f635 100644
--- a/src/gallium/state_trackers/nine/nine_state.h
+++ b/src/gallium/state_trackers/nine/nine_state.h
@@ -144,6 +144,7 @@ struct nine_state
float *vs_const_f;
int vs_const_i[NINE_MAX_CONST_I][4];
BOOL vs_const_b[NINE_MAX_CONST_B];
+ float *vs_lconstf_temp;
uint32_t vs_key;
struct NinePixelShader9 *ps;