summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gallium/state_trackers/nine/surface9.c49
-rw-r--r--src/gallium/state_trackers/nine/surface9.h3
2 files changed, 30 insertions, 22 deletions
diff --git a/src/gallium/state_trackers/nine/surface9.c b/src/gallium/state_trackers/nine/surface9.c
index a5c4a9ede8d..4b8e2132abc 100644
--- a/src/gallium/state_trackers/nine/surface9.c
+++ b/src/gallium/state_trackers/nine/surface9.c
@@ -44,6 +44,9 @@
#define DBG_CHANNEL DBG_SURFACE
+static void
+NineSurface9_CreatePipeSurfaces( struct NineSurface9 *This );
+
HRESULT
NineSurface9_ctor( struct NineSurface9 *This,
struct NineUnknownParams *pParams,
@@ -184,10 +187,8 @@ NineSurface9_ctor( struct NineSurface9 *This,
if (This->base.resource && (pDesc->Usage & D3DUSAGE_DYNAMIC))
This->base.resource->flags |= NINE_RESOURCE_FLAG_LOCKABLE;
- if (This->base.resource && (pDesc->Usage & (D3DUSAGE_RENDERTARGET | D3DUSAGE_DEPTHSTENCIL))) {
- (void) NineSurface9_CreatePipeSurface(This, 0);
- (void) NineSurface9_CreatePipeSurface(This, 1);
- }
+ if (This->base.resource && (pDesc->Usage & (D3DUSAGE_RENDERTARGET | D3DUSAGE_DEPTHSTENCIL)))
+ NineSurface9_CreatePipeSurfaces(This);
/* TODO: investigate what else exactly needs to be cleared */
if (This->base.resource && (pDesc->Usage & D3DUSAGE_RENDERTARGET))
@@ -220,8 +221,8 @@ NineSurface9_dtor( struct NineSurface9 *This )
NineResource9_dtor(&This->base);
}
-struct pipe_surface *
-NineSurface9_CreatePipeSurface( struct NineSurface9 *This, const int sRGB )
+static void
+NineSurface9_CreatePipeSurfaces( struct NineSurface9 *This )
{
struct pipe_context *pipe;
struct pipe_screen *screen = NineDevice9_GetScreen(This->base.base.device);
@@ -233,21 +234,33 @@ NineSurface9_CreatePipeSurface( struct NineSurface9 *This, const int sRGB )
assert(resource);
srgb_format = util_format_srgb(resource->format);
- if (sRGB && srgb_format != PIPE_FORMAT_NONE &&
- screen->is_format_supported(screen, srgb_format,
- resource->target, 0, resource->bind))
- templ.format = srgb_format;
- else
- templ.format = resource->format;
+ if (srgb_format == PIPE_FORMAT_NONE ||
+ !screen->is_format_supported(screen, srgb_format,
+ resource->target, 0, resource->bind))
+ srgb_format = resource->format;
+
+ memset(&templ, 0, sizeof(templ));
+ templ.format = resource->format;
templ.u.tex.level = This->level;
templ.u.tex.first_layer = This->layer;
templ.u.tex.last_layer = This->layer;
pipe = nine_context_get_pipe_acquire(This->base.base.device);
- This->surface[sRGB] = pipe->create_surface(pipe, resource, &templ);
+
+ This->surface[0] = pipe->create_surface(pipe, resource, &templ);
+
+ memset(&templ, 0, sizeof(templ));
+ templ.format = srgb_format;
+ templ.u.tex.level = This->level;
+ templ.u.tex.first_layer = This->layer;
+ templ.u.tex.last_layer = This->layer;
+
+ This->surface[1] = pipe->create_surface(pipe, resource, &templ);
+
nine_context_get_pipe_release(This->base.base.device);
- assert(This->surface[sRGB]);
- return This->surface[sRGB];
+
+ assert(This->surface[0]); /* TODO: Handle failure */
+ assert(This->surface[1]);
}
#ifdef DEBUG
@@ -762,10 +775,8 @@ NineSurface9_SetResourceResize( struct NineSurface9 *This,
pipe_surface_reference(&This->surface[0], NULL);
pipe_surface_reference(&This->surface[1], NULL);
- if (resource) {
- (void) NineSurface9_CreatePipeSurface(This, 0);
- (void) NineSurface9_CreatePipeSurface(This, 1);
- }
+ if (resource)
+ NineSurface9_CreatePipeSurfaces(This);
}
diff --git a/src/gallium/state_trackers/nine/surface9.h b/src/gallium/state_trackers/nine/surface9.h
index 8263060cd57..6f416f2de6a 100644
--- a/src/gallium/state_trackers/nine/surface9.h
+++ b/src/gallium/state_trackers/nine/surface9.h
@@ -90,9 +90,6 @@ NineSurface9_dtor( struct NineSurface9 *This );
void
NineSurface9_MarkContainerDirty( struct NineSurface9 *This );
-struct pipe_surface *
-NineSurface9_CreatePipeSurface( struct NineSurface9 *This, const int sRGB );
-
static inline struct pipe_surface *
NineSurface9_GetSurface( struct NineSurface9 *This, int sRGB )
{