diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/state_trackers/nine/device9.c | 5 | ||||
-rw-r--r-- | src/gallium/state_trackers/nine/nine_state.c | 5 | ||||
-rw-r--r-- | src/gallium/state_trackers/nine/nine_state.h | 1 |
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; |