[Mesa-dev] [PATCH 1/2] swr: switch to using SwrGetInterface api table

Cherniak, Bruce bruce.cherniak at intel.com
Mon Jul 10 19:43:33 UTC 2017


Reviewed-by: Bruce Cherniak <bruce.cherniak at intel.com> 

> On Jul 7, 2017, at 4:25 PM, Tim Rowley <timothy.o.rowley at intel.com> wrote:
> 
> Use the SWR rasterizer API through the table returned from
> SwrGetInterface rather than referencing the functions directly.
> This will allow us to move to a model of having the driver dynamically
> load the appropriate swr architecture library.
> ---
> src/gallium/drivers/swr/swr_clear.cpp   |  6 ++---
> src/gallium/drivers/swr/swr_context.cpp | 19 ++++++++------
> src/gallium/drivers/swr/swr_context.h   |  5 +++-
> src/gallium/drivers/swr/swr_draw.cpp    | 46 ++++++++++++++++-----------------
> src/gallium/drivers/swr/swr_fence.cpp   |  2 +-
> src/gallium/drivers/swr/swr_memory.h    |  6 ++---
> src/gallium/drivers/swr/swr_query.cpp   |  8 +++---
> src/gallium/drivers/swr/swr_scratch.cpp |  2 +-
> src/gallium/drivers/swr/swr_screen.cpp  |  3 ++-
> src/gallium/drivers/swr/swr_state.cpp   | 40 ++++++++++++++--------------
> 10 files changed, 72 insertions(+), 65 deletions(-)
> 
> diff --git a/src/gallium/drivers/swr/swr_clear.cpp b/src/gallium/drivers/swr/swr_clear.cpp
> index 3a35805..233432e 100644
> --- a/src/gallium/drivers/swr/swr_clear.cpp
> +++ b/src/gallium/drivers/swr/swr_clear.cpp
> @@ -78,9 +78,9 @@ swr_clear(struct pipe_context *pipe,
> 
>    for (unsigned i = 0; i < layers; ++i) {
>       swr_update_draw_context(ctx);
> -      SwrClearRenderTarget(ctx->swrContext, clearMask, i,
> -                           color->f, depth, stencil,
> -                           clear_rect);
> +      ctx->api.pfnSwrClearRenderTarget(ctx->swrContext, clearMask, i,
> +                                       color->f, depth, stencil,
> +                                       clear_rect);
> 
>       // Mask out the attachments that are out of layers.
>       if (fb->zsbuf &&
> diff --git a/src/gallium/drivers/swr/swr_context.cpp b/src/gallium/drivers/swr/swr_context.cpp
> index f2d971a..9648278 100644
> --- a/src/gallium/drivers/swr/swr_context.cpp
> +++ b/src/gallium/drivers/swr/swr_context.cpp
> @@ -311,8 +311,8 @@ swr_blit(struct pipe_context *pipe, const struct pipe_blit_info *blit_info)
>    }
> 
>    if (ctx->active_queries) {
> -      SwrEnableStatsFE(ctx->swrContext, FALSE);
> -      SwrEnableStatsBE(ctx->swrContext, FALSE);
> +      ctx->api.pfnSwrEnableStatsFE(ctx->swrContext, FALSE);
> +      ctx->api.pfnSwrEnableStatsBE(ctx->swrContext, FALSE);
>    }
> 
>    util_blitter_save_vertex_buffer_slot(ctx->blitter, ctx->vertex_buffer);
> @@ -349,8 +349,8 @@ swr_blit(struct pipe_context *pipe, const struct pipe_blit_info *blit_info)
>    util_blitter_blit(ctx->blitter, &info);
> 
>    if (ctx->active_queries) {
> -      SwrEnableStatsFE(ctx->swrContext, TRUE);
> -      SwrEnableStatsBE(ctx->swrContext, TRUE);
> +      ctx->api.pfnSwrEnableStatsFE(ctx->swrContext, TRUE);
> +      ctx->api.pfnSwrEnableStatsBE(ctx->swrContext, TRUE);
>    }
> }
> 
> @@ -383,10 +383,10 @@ swr_destroy(struct pipe_context *pipe)
> 
>    /* Idle core after destroying buffer resources, but before deleting
>     * context.  Destroying resources has potentially called StoreTiles.*/
> -   SwrWaitForIdle(ctx->swrContext);
> +   ctx->api.pfnSwrWaitForIdle(ctx->swrContext);
> 
>    if (ctx->swrContext)
> -      SwrDestroyContext(ctx->swrContext);
> +      ctx->api.pfnSwrDestroyContext(ctx->swrContext);
> 
>    delete ctx->blendJIT;
> 
> @@ -467,6 +467,9 @@ swr_create_context(struct pipe_screen *p_screen, void *priv, unsigned flags)
>       AlignedMalloc(sizeof(struct swr_context), KNOB_SIMD_BYTES);
>    memset(ctx, 0, sizeof(struct swr_context));
> 
> +   SwrGetInterface(ctx->api);
> +   ctx->swrDC.pAPI = &ctx->api;
> +
>    ctx->blendJIT =
>       new std::unordered_map<BLEND_COMPILE_STATE, PFN_BLEND_JIT_FUNC>;
> 
> @@ -478,9 +481,9 @@ swr_create_context(struct pipe_screen *p_screen, void *priv, unsigned flags)
>    createInfo.pfnClearTile = swr_StoreHotTileClear;
>    createInfo.pfnUpdateStats = swr_UpdateStats;
>    createInfo.pfnUpdateStatsFE = swr_UpdateStatsFE;
> -   ctx->swrContext = SwrCreateContext(&createInfo);
> +   ctx->swrContext = ctx->api.pfnSwrCreateContext(&createInfo);
> 
> -   SwrInit();
> +   ctx->api.pfnSwrInit();
> 
>    if (ctx->swrContext == NULL)
>       goto fail;
> diff --git a/src/gallium/drivers/swr/swr_context.h b/src/gallium/drivers/swr/swr_context.h
> index 3ff4bf3..753cbf3 100644
> --- a/src/gallium/drivers/swr/swr_context.h
> +++ b/src/gallium/drivers/swr/swr_context.h
> @@ -102,6 +102,7 @@ struct swr_draw_context {
> 
>    SWR_SURFACE_STATE renderTargets[SWR_NUM_ATTACHMENTS];
>    struct swr_query_result *pStats; // @llvm_struct
> +   SWR_INTERFACE *pAPI; // @llvm_struct - Needed for the swr_memory callbacks
> };
> 
> /* gen_llvm_types FINI */
> @@ -169,6 +170,8 @@ struct swr_context {
>    struct swr_draw_context swrDC;
> 
>    unsigned dirty; /**< Mask of SWR_NEW_x flags */
> +
> +   SWR_INTERFACE api;
> };
> 
> static INLINE struct swr_context *
> @@ -182,7 +185,7 @@ swr_update_draw_context(struct swr_context *ctx,
>       struct swr_query_result *pqr = nullptr)
> {
>    swr_draw_context *pDC =
> -      (swr_draw_context *)SwrGetPrivateContextState(ctx->swrContext);
> +      (swr_draw_context *)ctx->api.pfnSwrGetPrivateContextState(ctx->swrContext);
>    if (pqr)
>       ctx->swrDC.pStats = pqr;
>    memcpy(pDC, &ctx->swrDC, sizeof(swr_draw_context));
> diff --git a/src/gallium/drivers/swr/swr_draw.cpp b/src/gallium/drivers/swr/swr_draw.cpp
> index f26b8e8..eae4b57 100644
> --- a/src/gallium/drivers/swr/swr_draw.cpp
> +++ b/src/gallium/drivers/swr/swr_draw.cpp
> @@ -100,7 +100,7 @@ swr_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
>          assert(ctx->vs->soFunc[info->mode] && "Error: SoShader = NULL");
>       }
> 
> -      SwrSetSoFunc(ctx->swrContext, ctx->vs->soFunc[info->mode], 0);
> +      ctx->api.pfnSwrSetSoFunc(ctx->swrContext, ctx->vs->soFunc[info->mode], 0);
>    }
> 
>    struct swr_vertex_element_state *velems = ctx->velems;
> @@ -123,7 +123,7 @@ swr_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
>       velems->map.insert(std::make_pair(key, velems->fsFunc));
>    }
> 
> -   SwrSetFetchFunc(ctx->swrContext, velems->fsFunc);
> +   ctx->api.pfnSwrSetFetchFunc(ctx->swrContext, velems->fsFunc);
> 
>    /* Set up frontend state
>     * XXX setup provokingVertex & topologyProvokingVertex */
> @@ -171,23 +171,23 @@ swr_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
>    }
> 
>    feState.bEnableCutIndex = info->primitive_restart;
> -   SwrSetFrontendState(ctx->swrContext, &feState);
> +   ctx->api.pfnSwrSetFrontendState(ctx->swrContext, &feState);
> 
>    if (info->index_size)
> -      SwrDrawIndexedInstanced(ctx->swrContext,
> -                              swr_convert_prim_topology(info->mode),
> -                              info->count,
> -                              info->instance_count,
> -                              info->start,
> -                              info->index_bias,
> -                              info->start_instance);
> +      ctx->api.pfnSwrDrawIndexedInstanced(ctx->swrContext,
> +                                          swr_convert_prim_topology(info->mode),
> +                                          info->count,
> +                                          info->instance_count,
> +                                          info->start,
> +                                          info->index_bias,
> +                                          info->start_instance);
>    else
> -      SwrDrawInstanced(ctx->swrContext,
> -                       swr_convert_prim_topology(info->mode),
> -                       info->count,
> -                       info->instance_count,
> -                       info->start,
> -                       info->start_instance);
> +      ctx->api.pfnSwrDrawInstanced(ctx->swrContext,
> +                                   swr_convert_prim_topology(info->mode),
> +                                   info->count,
> +                                   info->instance_count,
> +                                   info->start,
> +                                   info->start_instance);
> }
> 
> 
> @@ -235,9 +235,9 @@ swr_invalidate_render_target(struct pipe_context *pipe,
>    swr_update_draw_context(ctx);
>    SWR_RECT full_rect =
>       {0, 0, (int32_t)width, (int32_t)height};
> -   SwrInvalidateTiles(ctx->swrContext,
> -                      1 << attachment,
> -                      full_rect);
> +   ctx->api.pfnSwrInvalidateTiles(ctx->swrContext,
> +                                  1 << attachment,
> +                                  full_rect);
> }
> 
> 
> @@ -260,10 +260,10 @@ swr_store_render_target(struct pipe_context *pipe,
>          {0, 0,
>           (int32_t)u_minify(renderTarget->width, renderTarget->lod),
>           (int32_t)u_minify(renderTarget->height, renderTarget->lod)};
> -      SwrStoreTiles(ctx->swrContext,
> -                    1 << attachment,
> -                    post_tile_state,
> -                    full_rect);
> +      ctx->api.pfnSwrStoreTiles(ctx->swrContext,
> +                                1 << attachment,
> +                                post_tile_state,
> +                                full_rect);
>    }
> }
> 
> diff --git a/src/gallium/drivers/swr/swr_fence.cpp b/src/gallium/drivers/swr/swr_fence.cpp
> index c73bbbf..abf1d0c 100644
> --- a/src/gallium/drivers/swr/swr_fence.cpp
> +++ b/src/gallium/drivers/swr/swr_fence.cpp
> @@ -59,7 +59,7 @@ swr_fence_submit(struct swr_context *ctx, struct pipe_fence_handle *fh)
> 
>    fence->write++;
>    fence->pending = TRUE;
> -   SwrSync(ctx->swrContext, swr_fence_cb, (uint64_t)fence, fence->write, 0);
> +   ctx->api.pfnSwrSync(ctx->swrContext, swr_fence_cb, (uint64_t)fence, fence->write, 0);
> }
> 
> /*
> diff --git a/src/gallium/drivers/swr/swr_memory.h b/src/gallium/drivers/swr/swr_memory.h
> index ec68df3..fc55616 100644
> --- a/src/gallium/drivers/swr/swr_memory.h
> +++ b/src/gallium/drivers/swr/swr_memory.h
> @@ -34,7 +34,7 @@ swr_LoadHotTile(HANDLE hPrivateContext,
>    swr_draw_context *pDC = (swr_draw_context*)hPrivateContext;
>    SWR_SURFACE_STATE *pSrcSurface = &pDC->renderTargets[renderTargetIndex];
> 
> -   SwrLoadHotTile(pSrcSurface, dstFormat, renderTargetIndex, x, y, renderTargetArrayIndex, pDstHotTile);
> +   pDC->pAPI->pfnSwrLoadHotTile(pSrcSurface, dstFormat, renderTargetIndex, x, y, renderTargetArrayIndex, pDstHotTile);
> }
> 
> INLINE void
> @@ -48,7 +48,7 @@ swr_StoreHotTile(HANDLE hPrivateContext,
>    swr_draw_context *pDC = (swr_draw_context*)hPrivateContext;
>    SWR_SURFACE_STATE *pDstSurface = &pDC->renderTargets[renderTargetIndex];
> 
> -   SwrStoreHotTileToSurface(pDstSurface, srcFormat, renderTargetIndex, x, y, renderTargetArrayIndex, pSrcHotTile);
> +   pDC->pAPI->pfnSwrStoreHotTileToSurface(pDstSurface, srcFormat, renderTargetIndex, x, y, renderTargetArrayIndex, pSrcHotTile);
> }
> 
> INLINE void
> @@ -63,5 +63,5 @@ swr_StoreHotTileClear(HANDLE hPrivateContext,
>    swr_draw_context *pDC = (swr_draw_context*)hPrivateContext;
>    SWR_SURFACE_STATE *pDstSurface = &pDC->renderTargets[renderTargetIndex];
> 
> -   SwrStoreHotTileClear(pDstSurface, renderTargetIndex, x, y, renderTargetArrayIndex, pClearColor);
> +   pDC->pAPI->pfnSwrStoreHotTileClear(pDstSurface, renderTargetIndex, x, y, renderTargetArrayIndex, pClearColor);
> }
> diff --git a/src/gallium/drivers/swr/swr_query.cpp b/src/gallium/drivers/swr/swr_query.cpp
> index e097790..4c14c52 100644
> --- a/src/gallium/drivers/swr/swr_query.cpp
> +++ b/src/gallium/drivers/swr/swr_query.cpp
> @@ -180,8 +180,8 @@ swr_begin_query(struct pipe_context *pipe, struct pipe_query *q)
> 
>       /* Only change stat collection if there are no active queries */
>       if (ctx->active_queries == 0) {
> -         SwrEnableStatsFE(ctx->swrContext, TRUE);
> -         SwrEnableStatsBE(ctx->swrContext, TRUE);
> +         ctx->api.pfnSwrEnableStatsFE(ctx->swrContext, TRUE);
> +         ctx->api.pfnSwrEnableStatsBE(ctx->swrContext, TRUE);
>       }
>       ctx->active_queries++;
>       break;
> @@ -217,8 +217,8 @@ swr_end_query(struct pipe_context *pipe, struct pipe_query *q)
>       /* Only change stat collection if there are no active queries */
>       ctx->active_queries--;
>       if (ctx->active_queries == 0) {
> -         SwrEnableStatsFE(ctx->swrContext, FALSE);
> -         SwrEnableStatsBE(ctx->swrContext, FALSE);
> +         ctx->api.pfnSwrEnableStatsFE(ctx->swrContext, FALSE);
> +         ctx->api.pfnSwrEnableStatsBE(ctx->swrContext, FALSE);
>       }
> 
>       break;
> diff --git a/src/gallium/drivers/swr/swr_scratch.cpp b/src/gallium/drivers/swr/swr_scratch.cpp
> index db095de..6a9ab10 100644
> --- a/src/gallium/drivers/swr/swr_scratch.cpp
> +++ b/src/gallium/drivers/swr/swr_scratch.cpp
> @@ -41,7 +41,7 @@ swr_copy_to_scratch_space(struct swr_context *ctx,
> 
>    if (size >= 2048) { /* XXX TODO create KNOB_ for this */
>       /* Use per draw SwrAllocDrawContextMemory for larger copies */
> -      ptr = SwrAllocDrawContextMemory(ctx->swrContext, size, 4);
> +      ptr = ctx->api.pfnSwrAllocDrawContextMemory(ctx->swrContext, size, 4);
>    } else {
>       /* Allocate enough so that MAX_DRAWS_IN_FLIGHT sets fit. */
>       unsigned int max_size_in_flight = size * KNOB_MAX_DRAWS_IN_FLIGHT;
> diff --git a/src/gallium/drivers/swr/swr_screen.cpp b/src/gallium/drivers/swr/swr_screen.cpp
> index 53b5dad..ccaba26 100644
> --- a/src/gallium/drivers/swr/swr_screen.cpp
> +++ b/src/gallium/drivers/swr/swr_screen.cpp
> @@ -1016,11 +1016,12 @@ swr_flush_frontbuffer(struct pipe_screen *p_screen,
>    struct sw_winsys *winsys = screen->winsys;
>    struct swr_resource *spr = swr_resource(resource);
>    struct pipe_context *pipe = screen->pipe;
> +   struct swr_context *ctx = swr_context(pipe);
> 
>    if (pipe) {
>       swr_fence_finish(p_screen, NULL, screen->flush_fence, 0);
>       swr_resource_unused(resource);
> -      SwrEndFrame(swr_context(pipe)->swrContext);
> +      ctx->api.pfnSwrEndFrame(ctx->swrContext);
>    }
> 
>    /* Multisample resolved into resolve_target at flush with store_resource */
> diff --git a/src/gallium/drivers/swr/swr_state.cpp b/src/gallium/drivers/swr/swr_state.cpp
> index 45c9c21..4eef606 100644
> --- a/src/gallium/drivers/swr/swr_state.cpp
> +++ b/src/gallium/drivers/swr/swr_state.cpp
> @@ -1165,12 +1165,12 @@ swr_update_derived(struct pipe_context *pipe,
>       rastState->cullDistanceMask =
>          ctx->vs->info.base.culldist_writemask << ctx->vs->info.base.num_written_clipdistance;
> 
> -      SwrSetRastState(ctx->swrContext, rastState);
> +      ctx->api.pfnSwrSetRastState(ctx->swrContext, rastState);
>    }
> 
>    /* Scissor */
>    if (ctx->dirty & SWR_NEW_SCISSOR) {
> -      SwrSetScissorRects(ctx->swrContext, 1, &ctx->swr_scissor);
> +      ctx->api.pfnSwrSetScissorRects(ctx->swrContext, 1, &ctx->swr_scissor);
>    }
> 
>    /* Viewport */
> @@ -1210,7 +1210,7 @@ swr_update_derived(struct pipe_context *pipe,
>       vp->width = std::min(vp->width, (float)fb->width - vp->x);
>       vp->height = std::min(vp->height, (float)fb->height - vp->y);
> 
> -      SwrSetViewports(ctx->swrContext, 1, vp, vpm);
> +      ctx->api.pfnSwrSetViewports(ctx->swrContext, 1, vp, vpm);
>    }
> 
>    /* Set vertex & index buffers
> @@ -1285,7 +1285,7 @@ swr_update_derived(struct pipe_context *pipe,
>          swrVertexBuffers[i].partialInboundsSize = partial_inbounds;
>       }
> 
> -      SwrSetVertexBuffers(
> +      ctx->api.pfnSwrSetVertexBuffers(
>          ctx->swrContext, ctx->num_vertex_buffers, swrVertexBuffers);
> 
>       /* index buffer, if required (info passed in by swr_draw_vbo) */
> @@ -1324,7 +1324,7 @@ swr_update_derived(struct pipe_context *pipe,
>          swrIndexBuffer.pIndices = p_data;
>          swrIndexBuffer.size = size;
> 
> -         SwrSetIndexBuffer(ctx->swrContext, &swrIndexBuffer);
> +         ctx->api.pfnSwrSetIndexBuffer(ctx->swrContext, &swrIndexBuffer);
>       }
> 
>       struct swr_vertex_element_state *velems = ctx->velems;
> @@ -1349,7 +1349,7 @@ swr_update_derived(struct pipe_context *pipe,
>          } else {
>             func = swr_compile_gs(ctx, key);
>          }
> -         SwrSetGsFunc(ctx->swrContext, func);
> +         ctx->api.pfnSwrSetGsFunc(ctx->swrContext, func);
> 
>          /* JIT sampler state */
>          if (ctx->dirty & SWR_NEW_SAMPLER) {
> @@ -1367,11 +1367,11 @@ swr_update_derived(struct pipe_context *pipe,
>                                      ctx->swrDC.texturesGS);
>          }
> 
> -         SwrSetGsState(ctx->swrContext, &ctx->gs->gsState);
> +         ctx->api.pfnSwrSetGsState(ctx->swrContext, &ctx->gs->gsState);
>       } else {
>          SWR_GS_STATE state = { 0 };
> -         SwrSetGsState(ctx->swrContext, &state);
> -         SwrSetGsFunc(ctx->swrContext, NULL);
> +         ctx->api.pfnSwrSetGsState(ctx->swrContext, &state);
> +         ctx->api.pfnSwrSetGsFunc(ctx->swrContext, NULL);
>       }
>    }
> 
> @@ -1390,7 +1390,7 @@ swr_update_derived(struct pipe_context *pipe,
>       } else {
>          func = swr_compile_vs(ctx, key);
>       }
> -      SwrSetVertexFunc(ctx->swrContext, func);
> +      ctx->api.pfnSwrSetVertexFunc(ctx->swrContext, func);
> 
>       /* JIT sampler state */
>       if (ctx->dirty & SWR_NEW_SAMPLER) {
> @@ -1478,7 +1478,7 @@ swr_update_derived(struct pipe_context *pipe,
>       psState.barycentricsMask = barycentricsMask;
>       psState.usesUAV = false; // XXX
>       psState.forceEarlyZ = false;
> -      SwrSetPixelShaderState(ctx->swrContext, &psState);
> +      ctx->api.pfnSwrSetPixelShaderState(ctx->swrContext, &psState);
> 
>       /* JIT sampler state */
>       if (ctx->dirty & (SWR_NEW_SAMPLER |
> @@ -1567,12 +1567,12 @@ swr_update_derived(struct pipe_context *pipe,
>       depthStencilState.depthTestEnable = depth->enabled;
>       depthStencilState.depthTestFunc = swr_convert_depth_func(depth->func);
>       depthStencilState.depthWriteEnable = depth->writemask;
> -      SwrSetDepthStencilState(ctx->swrContext, &depthStencilState);
> +      ctx->api.pfnSwrSetDepthStencilState(ctx->swrContext, &depthStencilState);
> 
>       depthBoundsState.depthBoundsTestEnable = depth->bounds_test;
>       depthBoundsState.depthBoundsTestMinValue = depth->bounds_min;
>       depthBoundsState.depthBoundsTestMaxValue = depth->bounds_max;
> -      SwrSetDepthBoundsState(ctx->swrContext, &depthBoundsState);
> +      ctx->api.pfnSwrSetDepthBoundsState(ctx->swrContext, &depthBoundsState);
>    }
> 
>    /* Blend State */
> @@ -1601,7 +1601,7 @@ swr_update_derived(struct pipe_context *pipe,
>          blendState.renderTarget[0].writeDisableGreen = 1;
>          blendState.renderTarget[0].writeDisableBlue = 1;
>          blendState.renderTarget[0].writeDisableAlpha = 1;
> -         SwrSetBlendFunc(ctx->swrContext, 0, NULL);
> +         ctx->api.pfnSwrSetBlendFunc(ctx->swrContext, 0, NULL);
>       }
>       else
>          for (int target = 0;
> @@ -1633,7 +1633,7 @@ swr_update_derived(struct pipe_context *pipe,
>             if (compileState.blendState.blendEnable == false &&
>                 compileState.blendState.logicOpEnable == false &&
>                 ctx->depth_stencil->alpha.enabled == 0) {
> -               SwrSetBlendFunc(ctx->swrContext, target, NULL);
> +               ctx->api.pfnSwrSetBlendFunc(ctx->swrContext, target, NULL);
>                continue;
>             }
> 
> @@ -1669,10 +1669,10 @@ swr_update_derived(struct pipe_context *pipe,
> 
>                ctx->blendJIT->insert(std::make_pair(compileState, func));
>             }
> -            SwrSetBlendFunc(ctx->swrContext, target, func);
> +            ctx->api.pfnSwrSetBlendFunc(ctx->swrContext, target, func);
>          }
> 
> -      SwrSetBlendState(ctx->swrContext, &blendState);
> +      ctx->api.pfnSwrSetBlendState(ctx->swrContext, &blendState);
>    }
> 
>    if (ctx->dirty & SWR_NEW_STIPPLE) {
> @@ -1682,7 +1682,7 @@ swr_update_derived(struct pipe_context *pipe,
>    if (ctx->dirty & (SWR_NEW_VS | SWR_NEW_SO | SWR_NEW_RASTERIZER)) {
>       ctx->vs->soState.rasterizerDisable =
>          ctx->rasterizer->rasterizer_discard;
> -      SwrSetSoState(ctx->swrContext, &ctx->vs->soState);
> +      ctx->api.pfnSwrSetSoState(ctx->swrContext, &ctx->vs->soState);
> 
>       pipe_stream_output_info *stream_output = &ctx->vs->pipe.stream_output;
> 
> @@ -1698,7 +1698,7 @@ swr_update_derived(struct pipe_context *pipe,
>          buffer.pitch = stream_output->stride[i];
>          buffer.streamOffset = 0;
> 
> -         SwrSetSoBuffers(ctx->swrContext, &buffer, i);
> +         ctx->api.pfnSwrSetSoBuffers(ctx->swrContext, &buffer, i);
>       }
>    }
> 
> @@ -1750,7 +1750,7 @@ swr_update_derived(struct pipe_context *pipe,
>    backendState.readViewportArrayIndex = pLastFE->writes_viewport_index;
>    backendState.vertexAttribOffset = VERTEX_ATTRIB_START_SLOT; // TODO: optimize
> 
> -   SwrSetBackendState(ctx->swrContext, &backendState);
> +   ctx->api.pfnSwrSetBackendState(ctx->swrContext, &backendState);
> 
>    /* Ensure that any in-progress attachment change StoreTiles finish */
>    if (swr_is_fence_pending(screen->flush_fence))
> -- 
> 2.7.4
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev



More information about the mesa-dev mailing list