[Mesa-dev] [PATCH 48/53] st/nine: Add variables containing the size of the constant buffers
Axel Davy
axel.davy at ens.fr
Thu Jan 8 13:26:55 PST 2015
On 08/01/2015 05:08, Ilia Mirkin wrote :
> On Wed, Jan 7, 2015 at 11:36 AM, Axel Davy <axel.davy at ens.fr> wrote:
>> Signed-off-by: Axel Davy <axel.davy at ens.fr>
>> Cc: "10.4" <mesa-stable at lists.freedesktop.org>
>> ---
>> src/gallium/state_trackers/nine/device9.c | 10 ++++++----
>> src/gallium/state_trackers/nine/device9.h | 2 ++
>> src/gallium/state_trackers/nine/stateblock9.c | 4 ++--
>> 3 files changed, 10 insertions(+), 6 deletions(-)
>>
>> diff --git a/src/gallium/state_trackers/nine/device9.c b/src/gallium/state_trackers/nine/device9.c
>> index 5d1a507..cae9239 100644
>> --- a/src/gallium/state_trackers/nine/device9.c
>> +++ b/src/gallium/state_trackers/nine/device9.c
>> @@ -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)
>> diff --git a/src/gallium/state_trackers/nine/device9.h b/src/gallium/state_trackers/nine/device9.h
>> index cf2138a..65e39f0 100644
>> --- a/src/gallium/state_trackers/nine/device9.h
>> +++ b/src/gallium/state_trackers/nine/device9.h
>> @@ -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;
> Does something limit these? nv50/nvc0 will report a 64K buffer which
> will cause this to wrap.
We cap to 256 float constant slots, so it's going to be much below 64K.
>
>> uint16_t max_vs_const_f;
>> uint16_t max_ps_const_f;;
>>
>> diff --git a/src/gallium/state_trackers/nine/stateblock9.c b/src/gallium/state_trackers/nine/stateblock9.c
>> index 36b5e77..220b196 100644
>> --- a/src/gallium/state_trackers/nine/stateblock9.c
>> +++ b/src/gallium/state_trackers/nine/stateblock9.c
>> @@ -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;
>>
>> --
>> 2.1.3
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list