From ccc6b4f96b012064f2bc74ec7a3465874b24ef8e Mon Sep 17 00:00:00 2001 From: Jan Zielinski Date: Tue, 23 Jul 2019 10:30:47 +0200 Subject: [PATCH] swr/rasterizer: Adding support for unhandled clipEnable state Clipping is not correctly handled by the rasterizer - fixing this. Reviewed-by: Alok Hota --- src/gallium/drivers/swr/rasterizer/core/api.cpp | 4 ++-- src/gallium/drivers/swr/rasterizer/core/state.h | 1 + src/gallium/drivers/swr/swr_state.cpp | 7 +++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/swr/rasterizer/core/api.cpp b/src/gallium/drivers/swr/rasterizer/core/api.cpp index 228e85a25c9..f9b86cfbb8d 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 3731c41c4e4..e85144c2582 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 c21e08b4a5a..84c67597c46 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]; -- 2.30.2