st/nine: Move Managed Pool handling out of nine_context
Part of the refactor to move all gallium calls to nine_state.c, and have all internal states required for those calls in nine_context. Signed-off-by: Axel Davy <axel.davy@ens.fr>
This commit is contained in:
parent
eb884a4ac2
commit
152d007769
|
@ -2706,6 +2706,55 @@ NineDevice9_GetNPatchMode( struct NineDevice9 *This )
|
||||||
STUB(0);
|
STUB(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* TODO: only go through dirty textures */
|
||||||
|
static void
|
||||||
|
validate_textures(struct NineDevice9 *device)
|
||||||
|
{
|
||||||
|
struct NineBaseTexture9 *tex, *ptr;
|
||||||
|
LIST_FOR_EACH_ENTRY_SAFE(tex, ptr, &device->update_textures, list) {
|
||||||
|
list_delinit(&tex->list);
|
||||||
|
NineBaseTexture9_Validate(tex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
update_managed_buffers(struct NineDevice9 *device)
|
||||||
|
{
|
||||||
|
struct NineBuffer9 *buf, *ptr;
|
||||||
|
LIST_FOR_EACH_ENTRY_SAFE(buf, ptr, &device->update_buffers, managed.list) {
|
||||||
|
list_delinit(&buf->managed.list);
|
||||||
|
NineBuffer9_Upload(buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
NineBeforeDraw( struct NineDevice9 *This )
|
||||||
|
{
|
||||||
|
/* Upload Managed dirty content */
|
||||||
|
validate_textures(This); /* may clobber state */
|
||||||
|
update_managed_buffers(This);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
NineAfterDraw( struct NineDevice9 *This )
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
struct nine_state *state = &This->state;
|
||||||
|
unsigned ps_mask = state->ps ? state->ps->rt_mask : 1;
|
||||||
|
|
||||||
|
/* Flag render-targets with autogenmipmap for mipmap regeneration */
|
||||||
|
for (i = 0; i < This->caps.NumSimultaneousRTs; ++i) {
|
||||||
|
struct NineSurface9 *rt = state->rt[i];
|
||||||
|
|
||||||
|
if (rt && rt->desc.Format != D3DFMT_NULL && (ps_mask & (1 << i)) &&
|
||||||
|
rt->desc.Usage & D3DUSAGE_AUTOGENMIPMAP) {
|
||||||
|
assert(rt->texture == D3DRTYPE_TEXTURE ||
|
||||||
|
rt->texture == D3DRTYPE_CUBETEXTURE);
|
||||||
|
NineBaseTexture9(rt->base.base.container)->dirty_mip = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
HRESULT NINE_WINAPI
|
HRESULT NINE_WINAPI
|
||||||
NineDevice9_DrawPrimitive( struct NineDevice9 *This,
|
NineDevice9_DrawPrimitive( struct NineDevice9 *This,
|
||||||
D3DPRIMITIVETYPE PrimitiveType,
|
D3DPRIMITIVETYPE PrimitiveType,
|
||||||
|
@ -2715,7 +2764,9 @@ NineDevice9_DrawPrimitive( struct NineDevice9 *This,
|
||||||
DBG("iface %p, PrimitiveType %u, StartVertex %u, PrimitiveCount %u\n",
|
DBG("iface %p, PrimitiveType %u, StartVertex %u, PrimitiveCount %u\n",
|
||||||
This, PrimitiveType, StartVertex, PrimitiveCount);
|
This, PrimitiveType, StartVertex, PrimitiveCount);
|
||||||
|
|
||||||
|
NineBeforeDraw(This);
|
||||||
nine_context_draw_primitive(This, PrimitiveType, StartVertex, PrimitiveCount);
|
nine_context_draw_primitive(This, PrimitiveType, StartVertex, PrimitiveCount);
|
||||||
|
NineAfterDraw(This);
|
||||||
|
|
||||||
return D3D_OK;
|
return D3D_OK;
|
||||||
}
|
}
|
||||||
|
@ -2737,9 +2788,11 @@ NineDevice9_DrawIndexedPrimitive( struct NineDevice9 *This,
|
||||||
user_assert(This->state.idxbuf, D3DERR_INVALIDCALL);
|
user_assert(This->state.idxbuf, D3DERR_INVALIDCALL);
|
||||||
user_assert(This->state.vdecl, D3DERR_INVALIDCALL);
|
user_assert(This->state.vdecl, D3DERR_INVALIDCALL);
|
||||||
|
|
||||||
|
NineBeforeDraw(This);
|
||||||
nine_context_draw_indexed_primitive(This, PrimitiveType, BaseVertexIndex,
|
nine_context_draw_indexed_primitive(This, PrimitiveType, BaseVertexIndex,
|
||||||
MinVertexIndex, NumVertices, StartIndex,
|
MinVertexIndex, NumVertices, StartIndex,
|
||||||
PrimitiveCount);
|
PrimitiveCount);
|
||||||
|
NineAfterDraw(This);
|
||||||
|
|
||||||
return D3D_OK;
|
return D3D_OK;
|
||||||
}
|
}
|
||||||
|
@ -2778,7 +2831,9 @@ NineDevice9_DrawPrimitiveUP( struct NineDevice9 *This,
|
||||||
vtxbuf.user_buffer = NULL;
|
vtxbuf.user_buffer = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NineBeforeDraw(This);
|
||||||
nine_context_draw_primitive_from_vtxbuf(This, PrimitiveType, PrimitiveCount, &vtxbuf);
|
nine_context_draw_primitive_from_vtxbuf(This, PrimitiveType, PrimitiveCount, &vtxbuf);
|
||||||
|
NineAfterDraw(This);
|
||||||
|
|
||||||
pipe_resource_reference(&vtxbuf.buffer, NULL);
|
pipe_resource_reference(&vtxbuf.buffer, NULL);
|
||||||
|
|
||||||
|
@ -2852,12 +2907,14 @@ NineDevice9_DrawIndexedPrimitiveUP( struct NineDevice9 *This,
|
||||||
ibuf.user_buffer = NULL;
|
ibuf.user_buffer = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NineBeforeDraw(This);
|
||||||
nine_context_draw_indexed_primitive_from_vtxbuf_idxbuf(This, PrimitiveType,
|
nine_context_draw_indexed_primitive_from_vtxbuf_idxbuf(This, PrimitiveType,
|
||||||
MinVertexIndex,
|
MinVertexIndex,
|
||||||
NumVertices,
|
NumVertices,
|
||||||
PrimitiveCount,
|
PrimitiveCount,
|
||||||
&vbuf,
|
&vbuf,
|
||||||
&ibuf);
|
&ibuf);
|
||||||
|
NineAfterDraw(This);
|
||||||
|
|
||||||
pipe_resource_reference(&vbuf.buffer, NULL);
|
pipe_resource_reference(&vbuf.buffer, NULL);
|
||||||
pipe_resource_reference(&ibuf.buffer, NULL);
|
pipe_resource_reference(&ibuf.buffer, NULL);
|
||||||
|
|
|
@ -455,12 +455,6 @@ update_framebuffer(struct NineDevice9 *device, bool is_clear)
|
||||||
fb->cbufs[i] = NineSurface9_GetSurface(rt, sRGB);
|
fb->cbufs[i] = NineSurface9_GetSurface(rt, sRGB);
|
||||||
context->rt_mask |= 1 << i;
|
context->rt_mask |= 1 << i;
|
||||||
fb->nr_cbufs = i + 1;
|
fb->nr_cbufs = i + 1;
|
||||||
|
|
||||||
if (unlikely(rt->desc.Usage & D3DUSAGE_AUTOGENMIPMAP)) {
|
|
||||||
assert(rt->texture == D3DRTYPE_TEXTURE ||
|
|
||||||
rt->texture == D3DRTYPE_CUBETEXTURE);
|
|
||||||
NineBaseTexture9(rt->base.base.container)->dirty_mip = TRUE;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
/* Color outputs must match RT slot,
|
/* Color outputs must match RT slot,
|
||||||
* drivers will have to handle NULL entries for GL, too.
|
* drivers will have to handle NULL entries for GL, too.
|
||||||
|
@ -931,28 +925,6 @@ commit_ps(struct NineDevice9 *device)
|
||||||
NINE_STATE_STENCIL_REF | \
|
NINE_STATE_STENCIL_REF | \
|
||||||
NINE_STATE_SAMPLE_MASK)
|
NINE_STATE_SAMPLE_MASK)
|
||||||
|
|
||||||
|
|
||||||
/* TODO: only go through dirty textures */
|
|
||||||
static void
|
|
||||||
validate_textures(struct NineDevice9 *device)
|
|
||||||
{
|
|
||||||
struct NineBaseTexture9 *tex, *ptr;
|
|
||||||
LIST_FOR_EACH_ENTRY_SAFE(tex, ptr, &device->update_textures, list) {
|
|
||||||
list_delinit(&tex->list);
|
|
||||||
NineBaseTexture9_Validate(tex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
update_managed_buffers(struct NineDevice9 *device)
|
|
||||||
{
|
|
||||||
struct NineBuffer9 *buf, *ptr;
|
|
||||||
LIST_FOR_EACH_ENTRY_SAFE(buf, ptr, &device->update_buffers, managed.list) {
|
|
||||||
list_delinit(&buf->managed.list);
|
|
||||||
NineBuffer9_Upload(buf);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
nine_update_state(struct NineDevice9 *device)
|
nine_update_state(struct NineDevice9 *device)
|
||||||
{
|
{
|
||||||
|
@ -968,8 +940,6 @@ nine_update_state(struct NineDevice9 *device)
|
||||||
* into update_textures. Except, we also need to re-validate textures that
|
* into update_textures. Except, we also need to re-validate textures that
|
||||||
* may be dirty anyway, even if no texture bindings changed.
|
* may be dirty anyway, even if no texture bindings changed.
|
||||||
*/
|
*/
|
||||||
validate_textures(device); /* may clobber state */
|
|
||||||
update_managed_buffers(device);
|
|
||||||
|
|
||||||
/* ff_update may change VS/PS dirty bits */
|
/* ff_update may change VS/PS dirty bits */
|
||||||
if (unlikely(!context->programmable_vs || !context->ps))
|
if (unlikely(!context->programmable_vs || !context->ps))
|
||||||
|
@ -1842,8 +1812,6 @@ nine_update_state_framebuffer_clear(struct NineDevice9 *device)
|
||||||
{
|
{
|
||||||
struct nine_context *context = &device->context;
|
struct nine_context *context = &device->context;
|
||||||
|
|
||||||
validate_textures(device);
|
|
||||||
|
|
||||||
if (context->changed.group & NINE_STATE_FB)
|
if (context->changed.group & NINE_STATE_FB)
|
||||||
update_framebuffer(device, TRUE);
|
update_framebuffer(device, TRUE);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue