[Mesa-dev] [PATCH 01/11] st/nine: Encapsulate variables for MANAGED resource
Axel Davy
axel.davy at ens.fr
Fri Apr 24 13:11:16 PDT 2015
Signed-off-by: Axel Davy <axel.davy at ens.fr>
---
src/gallium/state_trackers/nine/basetexture9.c | 82 ++++++++++++------------
src/gallium/state_trackers/nine/basetexture9.h | 19 +++---
src/gallium/state_trackers/nine/cubetexture9.c | 2 +-
src/gallium/state_trackers/nine/device9.c | 2 +-
src/gallium/state_trackers/nine/nine_state.c | 2 +-
src/gallium/state_trackers/nine/stateblock9.c | 2 +-
src/gallium/state_trackers/nine/surface9.c | 2 +-
src/gallium/state_trackers/nine/texture9.c | 2 +-
src/gallium/state_trackers/nine/volume9.c | 2 +-
src/gallium/state_trackers/nine/volumetexture9.c | 2 +-
10 files changed, 60 insertions(+), 57 deletions(-)
diff --git a/src/gallium/state_trackers/nine/basetexture9.c b/src/gallium/state_trackers/nine/basetexture9.c
index f2ca35b..75a305f 100644
--- a/src/gallium/state_trackers/nine/basetexture9.c
+++ b/src/gallium/state_trackers/nine/basetexture9.c
@@ -67,8 +67,8 @@ NineBaseTexture9_ctor( struct NineBaseTexture9 *This,
This->pipe = pParams->device->pipe;
This->mipfilter = (Usage & D3DUSAGE_AUTOGENMIPMAP) ?
D3DTEXF_LINEAR : D3DTEXF_NONE;
- This->lod = 0;
- This->lod_resident = -1;
+ This->managed.lod = 0;
+ This->managed.lod_resident = -1;
/* When a depth buffer is sampled, it is for shadow mapping, except for
* D3DFMT_INTZ, D3DFMT_DF16 and D3DFMT_DF24.
* In addition D3DFMT_INTZ can be used for both texturing and depth buffering
@@ -103,15 +103,15 @@ DWORD WINAPI
NineBaseTexture9_SetLOD( struct NineBaseTexture9 *This,
DWORD LODNew )
{
- DWORD old = This->lod;
+ DWORD old = This->managed.lod;
DBG("This=%p LODNew=%d\n", This, LODNew);
user_assert(This->base.pool == D3DPOOL_MANAGED, 0);
- This->lod = MIN2(LODNew, This->base.info.last_level);
+ This->managed.lod = MIN2(LODNew, This->base.info.last_level);
- if (This->lod != old && This->bind_count && LIST_IS_EMPTY(&This->list))
+ if (This->managed.lod != old && This->bind_count && LIST_IS_EMPTY(&This->list))
list_add(&This->list, &This->base.base.device->update_textures);
return old;
@@ -122,7 +122,7 @@ NineBaseTexture9_GetLOD( struct NineBaseTexture9 *This )
{
DBG("This=%p\n", This);
- return This->lod;
+ return This->managed.lod;
}
DWORD WINAPI
@@ -165,7 +165,7 @@ NineBaseTexture9_UploadSelf( struct NineBaseTexture9 *This )
unsigned last_level = This->base.info.last_level;
unsigned l;
- DBG("This=%p dirty=%i type=%s\n", This, This->dirty,
+ DBG("This=%p dirty=%i type=%s\n", This, This->managed.dirty,
nine_D3DRTYPE_to_str(This->base.type));
assert(This->base.pool == D3DPOOL_MANAGED);
@@ -173,10 +173,10 @@ NineBaseTexture9_UploadSelf( struct NineBaseTexture9 *This )
if (This->base.usage & D3DUSAGE_AUTOGENMIPMAP)
last_level = 0; /* TODO: What if level 0 is not resident ? */
- if (This->lod_resident != This->lod) {
+ if (This->managed.lod_resident != This->managed.lod) {
struct pipe_resource *res;
- DBG("updating LOD from %u to %u ...\n", This->lod_resident, This->lod);
+ DBG("updating LOD from %u to %u ...\n", This->managed.lod_resident, This->managed.lod);
pipe_sampler_view_reference(&This->view[0], NULL);
pipe_sampler_view_reference(&This->view[1], NULL);
@@ -192,13 +192,13 @@ NineBaseTexture9_UploadSelf( struct NineBaseTexture9 *This )
state->changed.group |= NINE_STATE_TEXTURE;
}
- hr = NineBaseTexture9_CreatePipeResource(This, This->lod_resident != -1);
+ hr = NineBaseTexture9_CreatePipeResource(This, This->managed.lod_resident != -1);
if (FAILED(hr))
return hr;
res = This->base.resource;
- if (This->lod_resident == -1) /* no levels were resident */
- This->lod_resident = This->base.info.last_level + 1;
+ if (This->managed.lod_resident == -1) /* no levels were resident */
+ This->managed.lod_resident = This->base.info.last_level + 1;
if (This->base.type == D3DRTYPE_TEXTURE) {
struct NineTexture9 *tex = NineTexture9(This);
@@ -207,15 +207,15 @@ NineBaseTexture9_UploadSelf( struct NineBaseTexture9 *This )
/* Mark uninitialized levels as dirty. */
box.x = box.y = box.z = 0;
box.depth = 1;
- for (l = This->lod; l < This->lod_resident; ++l) {
+ for (l = This->managed.lod; l < This->managed.lod_resident; ++l) {
box.width = u_minify(This->base.info.width0, l);
box.height = u_minify(This->base.info.height0, l);
NineSurface9_AddDirtyRect(tex->surfaces[l], &box);
}
- for (l = 0; l < This->lod; ++l)
+ for (l = 0; l < This->managed.lod; ++l)
NineSurface9_SetResource(tex->surfaces[l], NULL, -1);
for (; l <= This->base.info.last_level; ++l)
- NineSurface9_SetResource(tex->surfaces[l], res, l - This->lod);
+ NineSurface9_SetResource(tex->surfaces[l], res, l - This->managed.lod);
} else
if (This->base.type == D3DRTYPE_CUBETEXTURE) {
struct NineCubeTexture9 *tex = NineCubeTexture9(This);
@@ -225,13 +225,13 @@ NineBaseTexture9_UploadSelf( struct NineBaseTexture9 *This )
/* Mark uninitialized levels as dirty. */
box.x = box.y = box.z = 0;
box.depth = 1;
- for (l = This->lod; l < This->lod_resident; ++l) {
+ for (l = This->managed.lod; l < This->managed.lod_resident; ++l) {
box.width = u_minify(This->base.info.width0, l);
box.height = u_minify(This->base.info.height0, l);
for (z = 0; z < 6; ++z)
NineSurface9_AddDirtyRect(tex->surfaces[l * 6 + z], &box);
}
- for (l = 0; l < This->lod; ++l) {
+ for (l = 0; l < This->managed.lod; ++l) {
for (z = 0; z < 6; ++z)
NineSurface9_SetResource(tex->surfaces[l * 6 + z],
NULL, -1);
@@ -239,7 +239,7 @@ NineBaseTexture9_UploadSelf( struct NineBaseTexture9 *This )
for (; l <= This->base.info.last_level; ++l) {
for (z = 0; z < 6; ++z)
NineSurface9_SetResource(tex->surfaces[l * 6 + z],
- res, l - This->lod);
+ res, l - This->managed.lod);
}
} else
if (This->base.type == D3DRTYPE_VOLUMETEXTURE) {
@@ -248,25 +248,25 @@ NineBaseTexture9_UploadSelf( struct NineBaseTexture9 *This )
/* Mark uninitialized levels as dirty. */
box.x = box.y = box.z = 0;
- for (l = This->lod; l < This->lod_resident; ++l) {
+ for (l = This->managed.lod; l < This->managed.lod_resident; ++l) {
box.width = u_minify(This->base.info.width0, l);
box.height = u_minify(This->base.info.height0, l);
box.depth = u_minify(This->base.info.depth0, l);
NineVolume9_AddDirtyRegion(tex->volumes[l], &box);
}
- for (l = 0; l < This->lod; ++l)
+ for (l = 0; l < This->managed.lod; ++l)
NineVolume9_SetResource(tex->volumes[l], NULL, -1);
for (; l <= This->base.info.last_level; ++l)
- NineVolume9_SetResource(tex->volumes[l], res, l - This->lod);
+ NineVolume9_SetResource(tex->volumes[l], res, l - This->managed.lod);
} else {
assert(!"invalid texture type");
}
- if (This->lod < This->lod_resident)
- This->dirty = TRUE;
- This->lod_resident = This->lod;
+ if (This->managed.lod < This->managed.lod_resident)
+ This->managed.dirty = TRUE;
+ This->managed.lod_resident = This->managed.lod;
}
- if (!This->dirty)
+ if (!This->managed.dirty)
return D3D_OK;
if (This->base.type == D3DRTYPE_TEXTURE) {
@@ -287,7 +287,7 @@ NineBaseTexture9_UploadSelf( struct NineBaseTexture9 *This )
memset(&tex->dirty_rect, 0, sizeof(tex->dirty_rect));
tex->dirty_rect.depth = 1;
}
- for (l = This->lod; l <= last_level; ++l)
+ for (l = This->managed.lod; l <= last_level; ++l)
NineSurface9_UploadSelf(tex->surfaces[l]);
} else
if (This->base.type == D3DRTYPE_CUBETEXTURE) {
@@ -310,7 +310,7 @@ NineBaseTexture9_UploadSelf( struct NineBaseTexture9 *This )
memset(&tex->dirty_rect[z], 0, sizeof(tex->dirty_rect[z]));
tex->dirty_rect[z].depth = 1;
}
- for (l = This->lod; l <= last_level; ++l)
+ for (l = This->managed.lod; l <= last_level; ++l)
NineSurface9_UploadSelf(tex->surfaces[l * 6 + z]);
}
} else
@@ -329,12 +329,12 @@ NineBaseTexture9_UploadSelf( struct NineBaseTexture9 *This )
}
memset(&tex->dirty_box, 0, sizeof(tex->dirty_box));
}
- for (l = This->lod; l <= last_level; ++l)
+ for (l = This->managed.lod; l <= last_level; ++l)
NineVolume9_UploadSelf(tex->volumes[l]);
} else {
assert(!"invalid texture type");
}
- This->dirty = FALSE;
+ This->managed.dirty = FALSE;
if (This->base.usage & D3DUSAGE_AUTOGENMIPMAP)
This->dirty_mip = TRUE;
@@ -350,7 +350,7 @@ NineBaseTexture9_GenerateMipSubLevels( struct NineBaseTexture9 *This )
struct pipe_resource *resource = This->base.resource;
unsigned base_level = 0;
- unsigned last_level = This->base.info.last_level - This->lod;
+ unsigned last_level = This->base.info.last_level - This->managed.lod;
unsigned first_layer = 0;
unsigned last_layer;
unsigned filter = This->mipfilter == D3DTEXF_POINT ? PIPE_TEX_FILTER_NEAREST
@@ -361,7 +361,7 @@ NineBaseTexture9_GenerateMipSubLevels( struct NineBaseTexture9 *This )
NineBaseTexture9_UploadSelf(This);
if (!This->dirty_mip)
return;
- if (This->lod) {
+ if (This->managed.lod) {
ERR("AUTOGENMIPMAP if level 0 is not resident not supported yet !\n");
return;
}
@@ -392,18 +392,18 @@ NineBaseTexture9_CreatePipeResource( struct NineBaseTexture9 *This,
struct pipe_resource *old = This->base.resource;
DBG("This=%p lod=%u last_level=%u\n", This,
- This->lod, This->base.info.last_level);
+ This->managed.lod, This->base.info.last_level);
assert(This->base.pool == D3DPOOL_MANAGED);
templ = This->base.info;
- if (This->lod) {
- templ.width0 = u_minify(templ.width0, This->lod);
- templ.height0 = u_minify(templ.height0, This->lod);
- templ.depth0 = u_minify(templ.depth0, This->lod);
+ if (This->managed.lod) {
+ templ.width0 = u_minify(templ.width0, This->managed.lod);
+ templ.height0 = u_minify(templ.height0, This->managed.lod);
+ templ.depth0 = u_minify(templ.depth0, This->managed.lod);
}
- templ.last_level = This->base.info.last_level - This->lod;
+ templ.last_level = This->base.info.last_level - This->managed.lod;
if (old) {
/* LOD might have changed. */
@@ -424,8 +424,8 @@ NineBaseTexture9_CreatePipeResource( struct NineBaseTexture9 *This,
box.y = 0;
box.z = 0;
- l = (This->lod < This->lod_resident) ? This->lod_resident - This->lod : 0;
- m = (This->lod < This->lod_resident) ? 0 : This->lod - This->lod_resident;
+ l = (This->managed.lod < This->managed.lod_resident) ? This->managed.lod_resident - This->managed.lod : 0;
+ m = (This->managed.lod < This->managed.lod_resident) ? 0 : This->managed.lod - This->managed.lod_resident;
box.width = u_minify(templ.width0, l);
box.height = u_minify(templ.height0, l);
@@ -545,7 +545,7 @@ NineBaseTexture9_PreLoad( struct NineBaseTexture9 *This )
{
DBG("This=%p\n", This);
- if (This->dirty && This->base.pool == D3DPOOL_MANAGED)
+ if (This->managed.dirty && This->base.pool == D3DPOOL_MANAGED)
NineBaseTexture9_UploadSelf(This);
}
@@ -562,6 +562,6 @@ NineBaseTexture9_Dump( struct NineBaseTexture9 *This )
d3dformat_to_string(This->format),
This->base.info.width0, This->base.info.height0, This->base.info.depth0,
This->base.info.array_size, This->base.info.last_level,
- This->lod, This->lod_resident);
+ This->managed.lod, This->managed.lod_resident);
}
#endif /* DEBUG */
diff --git a/src/gallium/state_trackers/nine/basetexture9.h b/src/gallium/state_trackers/nine/basetexture9.h
index 0062771..7a091bf 100644
--- a/src/gallium/state_trackers/nine/basetexture9.h
+++ b/src/gallium/state_trackers/nine/basetexture9.h
@@ -38,17 +38,20 @@ struct NineBaseTexture9
D3DFORMAT format;
- D3DTEXTUREFILTERTYPE mipfilter;
- DWORD lod;
- DWORD lod_resident;
-
int16_t bind_count; /* to Device9->state.texture */
boolean shadow;
uint8_t pstype; /* 0: 2D, 1: 1D, 2: CUBE, 3: 3D */
- boolean dirty;
boolean dirty_mip;
+ D3DTEXTUREFILTERTYPE mipfilter;
+
+ /* Specific to managed textures */
+ struct {
+ boolean dirty;
+ DWORD lod;
+ DWORD lod_resident;
+ } managed;
};
static INLINE struct NineBaseTexture9 *
NineBaseTexture9( void *data )
@@ -108,9 +111,9 @@ static INLINE void
NineBaseTexture9_Validate( struct NineBaseTexture9 *This )
{
DBG_FLAG(DBG_BASETEXTURE, "This=%p dirty=%i dirty_mip=%i lod=%u/%u\n",
- This, This->dirty, This->dirty_mip, This->lod, This->lod_resident);
+ This, This->managed.dirty, This->dirty_mip, This->managed.lod, This->managed.lod_resident);
if ((This->base.pool == D3DPOOL_MANAGED) &&
- (This->dirty || This->lod != This->lod_resident))
+ (This->managed.dirty || This->managed.lod != This->managed.lod_resident))
NineBaseTexture9_UploadSelf(This);
if (This->dirty_mip)
NineBaseTexture9_GenerateMipSubLevels(This);
@@ -133,7 +136,7 @@ NineBaseTexture9_Dump( struct NineBaseTexture9 *This ) { }
#endif
#define BASETEX_REGISTER_UPDATE(t) do { \
- if (((t)->dirty | ((t)->dirty_mip)) && (t)->base.base.bind) \
+ if (((t)->managed.dirty | ((t)->dirty_mip)) && (t)->base.base.bind) \
if (LIST_IS_EMPTY(&(t)->list)) \
list_add(&(t)->list, &(t)->base.base.device->update_textures); \
} while(0)
diff --git a/src/gallium/state_trackers/nine/cubetexture9.c b/src/gallium/state_trackers/nine/cubetexture9.c
index 34ef4ec..d501d29 100644
--- a/src/gallium/state_trackers/nine/cubetexture9.c
+++ b/src/gallium/state_trackers/nine/cubetexture9.c
@@ -259,7 +259,7 @@ NineCubeTexture9_AddDirtyRect( struct NineCubeTexture9 *This,
This->base.dirty_mip = TRUE;
return D3D_OK;
}
- This->base.dirty = TRUE;
+ This->base.managed.dirty = TRUE;
BASETEX_REGISTER_UPDATE(&This->base);
diff --git a/src/gallium/state_trackers/nine/device9.c b/src/gallium/state_trackers/nine/device9.c
index 924f755..698c4e3 100644
--- a/src/gallium/state_trackers/nine/device9.c
+++ b/src/gallium/state_trackers/nine/device9.c
@@ -2441,7 +2441,7 @@ NineDevice9_SetTexture( struct NineDevice9 *This,
if (tex) {
state->samplers_shadow |= tex->shadow << Stage;
- if ((tex->dirty | tex->dirty_mip) && LIST_IS_EMPTY(&tex->list))
+ if ((tex->managed.dirty | tex->dirty_mip) && LIST_IS_EMPTY(&tex->list))
list_add(&tex->list, &This->update_textures);
tex->bind_count++;
diff --git a/src/gallium/state_trackers/nine/nine_state.c b/src/gallium/state_trackers/nine/nine_state.c
index 034e666..435118b 100644
--- a/src/gallium/state_trackers/nine/nine_state.c
+++ b/src/gallium/state_trackers/nine/nine_state.c
@@ -688,7 +688,7 @@ update_sampler_derived(struct nine_state *state, unsigned s)
}
if (state->samp[s][D3DSAMP_MIPFILTER] != D3DTEXF_NONE) {
- int lod = state->samp[s][D3DSAMP_MAXMIPLEVEL] - state->texture[s]->lod;
+ int lod = state->samp[s][D3DSAMP_MAXMIPLEVEL] - state->texture[s]->managed.lod;
if (lod < 0)
lod = 0;
if (state->samp[s][NINED3DSAMP_MINLOD] != lod) {
diff --git a/src/gallium/state_trackers/nine/stateblock9.c b/src/gallium/state_trackers/nine/stateblock9.c
index 13217ae..032b9ff 100644
--- a/src/gallium/state_trackers/nine/stateblock9.c
+++ b/src/gallium/state_trackers/nine/stateblock9.c
@@ -501,7 +501,7 @@ NineStateBlock9_Apply( struct NineStateBlock9 *This )
continue;
if (tex) {
tex->bind_count++;
- if ((tex->dirty | tex->dirty_mip) && LIST_IS_EMPTY(&tex->list))
+ if ((tex->managed.dirty | tex->dirty_mip) && LIST_IS_EMPTY(&tex->list))
list_add(&tex->list, &This->base.device->update_textures);
dst->samplers_shadow |= tex->shadow << s;
}
diff --git a/src/gallium/state_trackers/nine/surface9.c b/src/gallium/state_trackers/nine/surface9.c
index b584189..ec3719e 100644
--- a/src/gallium/state_trackers/nine/surface9.c
+++ b/src/gallium/state_trackers/nine/surface9.c
@@ -239,7 +239,7 @@ NineSurface9_MarkContainerDirty( struct NineSurface9 *This )
assert(This->texture == D3DRTYPE_TEXTURE ||
This->texture == D3DRTYPE_CUBETEXTURE);
if (This->base.pool == D3DPOOL_MANAGED)
- tex->dirty = TRUE;
+ tex->managed.dirty = TRUE;
else
if (This->base.usage & D3DUSAGE_AUTOGENMIPMAP)
tex->dirty_mip = TRUE;
diff --git a/src/gallium/state_trackers/nine/texture9.c b/src/gallium/state_trackers/nine/texture9.c
index a1758fd..bee8095 100644
--- a/src/gallium/state_trackers/nine/texture9.c
+++ b/src/gallium/state_trackers/nine/texture9.c
@@ -290,7 +290,7 @@ NineTexture9_AddDirtyRect( struct NineTexture9 *This,
This->base.dirty_mip = TRUE;
return D3D_OK;
}
- This->base.dirty = TRUE;
+ This->base.managed.dirty = TRUE;
BASETEX_REGISTER_UPDATE(&This->base);
diff --git a/src/gallium/state_trackers/nine/volume9.c b/src/gallium/state_trackers/nine/volume9.c
index fce8939..24d5d53 100644
--- a/src/gallium/state_trackers/nine/volume9.c
+++ b/src/gallium/state_trackers/nine/volume9.c
@@ -168,7 +168,7 @@ NineVolume9_MarkContainerDirty( struct NineVolume9 *This )
tex = NineBaseTexture9(This->base.container);
assert(tex);
if (This->desc.Pool == D3DPOOL_MANAGED)
- tex->dirty = TRUE;
+ tex->managed.dirty = TRUE;
else
if (This->desc.Usage & D3DUSAGE_AUTOGENMIPMAP)
tex->dirty_mip = TRUE;
diff --git a/src/gallium/state_trackers/nine/volumetexture9.c b/src/gallium/state_trackers/nine/volumetexture9.c
index 08fdd3d..b566173 100644
--- a/src/gallium/state_trackers/nine/volumetexture9.c
+++ b/src/gallium/state_trackers/nine/volumetexture9.c
@@ -208,7 +208,7 @@ NineVolumeTexture9_AddDirtyBox( struct NineVolumeTexture9 *This,
This->base.dirty_mip = TRUE;
return D3D_OK;
}
- This->base.dirty = TRUE;
+ This->base.managed.dirty = TRUE;
BASETEX_REGISTER_UPDATE(&This->base);
--
2.1.0
More information about the mesa-dev
mailing list