mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 18:18:06 +02:00
st/nine: Back User Clip Planes to 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
c6ca7c747e
commit
a0a18920c7
3 changed files with 38 additions and 7 deletions
|
|
@ -2193,7 +2193,10 @@ NineDevice9_SetClipPlane( struct NineDevice9 *This,
|
|||
user_assert(Index < PIPE_MAX_CLIP_PLANES, D3DERR_INVALIDCALL);
|
||||
|
||||
memcpy(&state->clip.ucp[Index][0], pPlane, sizeof(state->clip.ucp[0]));
|
||||
state->changed.ucp |= 1 << Index;
|
||||
if (unlikely(This->is_recording))
|
||||
state->changed.ucp |= 1 << Index;
|
||||
else
|
||||
nine_context_set_clip_plane(This, Index, pPlane);
|
||||
|
||||
return D3D_OK;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1026,9 +1026,9 @@ nine_update_state(struct NineDevice9 *device)
|
|||
|
||||
context->commit = 0;
|
||||
|
||||
if (unlikely(state->changed.ucp)) {
|
||||
pipe->set_clip_state(pipe, &state->clip);
|
||||
state->changed.ucp = 0;
|
||||
if (unlikely(context->changed.ucp)) {
|
||||
pipe->set_clip_state(pipe, &context->clip);
|
||||
context->changed.ucp = FALSE;
|
||||
}
|
||||
|
||||
if (unlikely(group & NINE_STATE_RARE)) {
|
||||
|
|
@ -1615,6 +1615,17 @@ nine_context_set_texture_stage_state(struct NineDevice9 *device,
|
|||
context->ff.changed.tex_stage[Stage][Type / 32] |= 1 << (Type % 32);
|
||||
}
|
||||
|
||||
void
|
||||
nine_context_set_clip_plane(struct NineDevice9 *device,
|
||||
DWORD Index,
|
||||
const float *pPlane)
|
||||
{
|
||||
struct nine_context *context = &device->context;
|
||||
|
||||
memcpy(&context->clip.ucp[Index][0], pPlane, sizeof(context->clip.ucp[0]));
|
||||
context->changed.ucp = TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
nine_context_apply_stateblock(struct NineDevice9 *device,
|
||||
const struct nine_state *src)
|
||||
|
|
@ -1777,6 +1788,15 @@ nine_context_apply_stateblock(struct NineDevice9 *device,
|
|||
if (src->changed.group & NINE_STATE_SCISSOR)
|
||||
context->scissor = src->scissor;
|
||||
|
||||
/* User Clip Planes */
|
||||
if (src->changed.ucp) {
|
||||
for (i = 0; i < PIPE_MAX_CLIP_PLANES; ++i)
|
||||
if (src->changed.ucp & (1 << i))
|
||||
memcpy(context->clip.ucp[i],
|
||||
src->clip.ucp[i], sizeof(src->clip.ucp[0]));
|
||||
context->changed.ucp = TRUE;
|
||||
}
|
||||
|
||||
if (!(src->changed.group & NINE_STATE_FF))
|
||||
return;
|
||||
|
||||
|
|
@ -2263,7 +2283,7 @@ void nine_state_restore_non_cso(struct NineDevice9 *device)
|
|||
|
||||
state->changed.group = NINE_STATE_ALL;
|
||||
context->changed.vtxbuf = (1ULL << device->caps.MaxStreams) - 1;
|
||||
state->changed.ucp = (1 << PIPE_MAX_CLIP_PLANES) - 1;
|
||||
context->changed.ucp = TRUE;
|
||||
context->commit |= NINE_STATE_COMMIT_CONST_VS | NINE_STATE_COMMIT_CONST_PS;
|
||||
}
|
||||
|
||||
|
|
@ -2325,7 +2345,7 @@ nine_state_set_defaults(struct NineDevice9 *device, const D3DCAPS9 *caps,
|
|||
*/
|
||||
state->changed.group = NINE_STATE_ALL;
|
||||
context->changed.vtxbuf = (1ULL << device->caps.MaxStreams) - 1;
|
||||
state->changed.ucp = (1 << PIPE_MAX_CLIP_PLANES) - 1;
|
||||
context->changed.ucp = TRUE;
|
||||
|
||||
context->ff.changed.transform[0] = ~0;
|
||||
context->ff.changed.transform[D3DTS_WORLD / 32] |= 1 << (D3DTS_WORLD % 32);
|
||||
|
|
|
|||
|
|
@ -174,7 +174,7 @@ struct nine_state
|
|||
uint16_t ps_const_i; /* NINE_MAX_CONST_I == 16 */
|
||||
struct nine_range *vs_const_b; /* stateblocks only */
|
||||
uint16_t ps_const_b; /* NINE_MAX_CONST_B == 16 */
|
||||
uint8_t ucp;
|
||||
uint8_t ucp; /* stateblocks only */
|
||||
} changed;
|
||||
|
||||
struct NineSurface9 *rt[NINE_MAX_SIMULTANEOUS_RENDERTARGETS];
|
||||
|
|
@ -227,6 +227,7 @@ struct nine_context {
|
|||
BOOL ps_const_f;
|
||||
BOOL ps_const_i;
|
||||
BOOL ps_const_b;
|
||||
BOOL ucp;
|
||||
} changed;
|
||||
|
||||
uint32_t bumpmap_vars[6 * NINE_MAX_TEXTURE_STAGES];
|
||||
|
|
@ -268,6 +269,8 @@ struct nine_context {
|
|||
|
||||
struct pipe_index_buffer idxbuf;
|
||||
|
||||
struct pipe_clip_state clip;
|
||||
|
||||
DWORD rs[NINED3DRS_COUNT];
|
||||
|
||||
struct NineBaseTexture9 *texture[NINE_MAX_SAMPLERS];
|
||||
|
|
@ -438,6 +441,11 @@ void
|
|||
nine_context_set_depth_stencil(struct NineDevice9 *device,
|
||||
struct NineSurface9 *ds);
|
||||
|
||||
void
|
||||
nine_context_set_clip_plane(struct NineDevice9 *device,
|
||||
DWORD Index,
|
||||
const float *pPlane);
|
||||
|
||||
void
|
||||
nine_context_apply_stateblock(struct NineDevice9 *device,
|
||||
const struct nine_state *src);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue