From: Jan Zielinski Date: Tue, 23 Jul 2019 08:30:47 +0000 (+0200) Subject: swr/rasterizer: Adding support for unhandled clipEnable state X-Git-Tag: upstream/19.3.0~3826 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ccc6b4f96b012064f2bc74ec7a3465874b24ef8e;p=platform%2Fupstream%2Fmesa.git swr/rasterizer: Adding support for unhandled clipEnable state Clipping is not correctly handled by the rasterizer - fixing this. Reviewed-by: Alok Hota --- diff --git a/src/gallium/drivers/swr/rasterizer/core/api.cpp b/src/gallium/drivers/swr/rasterizer/core/api.cpp index 228e85a..f9b86cf 100644 --- a/src/gallium/drivers/swr/rasterizer/core/api.cpp +++ b/src/gallium/drivers/swr/rasterizer/core/api.cpp @@ -904,8 +904,8 @@ void SetupPipeline(DRAW_CONTEXT* pDC) }; - // Disable clipper if viewport transform is disabled - if (pState->state.frontendState.vpTransformDisable) + // Disable clipper if viewport transform is disabled or if clipper is disabled + if (pState->state.frontendState.vpTransformDisable || !pState->state.rastState.clipEnable) { pState->pfnProcessPrims = pfnBinner; #if USE_SIMD16_FRONTEND diff --git a/src/gallium/drivers/swr/rasterizer/core/state.h b/src/gallium/drivers/swr/rasterizer/core/state.h index 3731c41..e85144c 100644 --- a/src/gallium/drivers/swr/rasterizer/core/state.h +++ b/src/gallium/drivers/swr/rasterizer/core/state.h @@ -1050,6 +1050,7 @@ struct SWR_RASTSTATE uint32_t frontWinding : 1; uint32_t scissorEnable : 1; uint32_t depthClipEnable : 1; + uint32_t clipEnable : 1; uint32_t clipHalfZ : 1; uint32_t pointParam : 1; uint32_t pointSpriteEnable : 1; diff --git a/src/gallium/drivers/swr/swr_state.cpp b/src/gallium/drivers/swr/swr_state.cpp index c21e08b..84c6759 100644 --- a/src/gallium/drivers/swr/swr_state.cpp +++ b/src/gallium/drivers/swr/swr_state.cpp @@ -24,6 +24,8 @@ // llvm redefines DEBUG #pragma push_macro("DEBUG") #undef DEBUG + +#include #include "JitManager.h" #pragma pop_macro("DEBUG") @@ -1198,6 +1200,7 @@ swr_update_derived(struct pipe_context *pipe, rastState->depthFormat = swr_resource(zb->texture)->swr.format; rastState->depthClipEnable = rasterizer->depth_clip_near; + rastState->clipEnable = rasterizer->depth_clip_near | rasterizer->depth_clip_far; rastState->clipHalfZ = rasterizer->clip_halfz; ctx->api.pfnSwrSetRastState(ctx->swrContext, rastState); @@ -1272,8 +1275,8 @@ swr_update_derived(struct pipe_context *pipe, /* vertex buffers */ SWR_VERTEX_BUFFER_STATE swrVertexBuffers[PIPE_MAX_ATTRIBS]; for (UINT i = 0; i < ctx->num_vertex_buffers; i++) { - uint32_t size, pitch, elems, partial_inbounds; - uint32_t min_vertex_index; + uint32_t size = 0, pitch = 0, elems = 0, partial_inbounds = 0; + uint32_t min_vertex_index = 0; const uint8_t *p_data; struct pipe_vertex_buffer *vb = &ctx->vertex_buffer[i];