From 3bc42a09e2d13c42e15423a17b5c571049a11224 Mon Sep 17 00:00:00 2001 From: Ilia Mirkin Date: Thu, 23 Oct 2014 00:43:45 -0400 Subject: [PATCH] nv50,nvc0: use clip_halfz setting when creating rasterizer state This enables the ARB_clip_control extension. Signed-off-by: Ilia Mirkin Cc: "10.4" --- docs/GL3.txt | 2 +- docs/relnotes/10.4.html | 2 +- src/gallium/drivers/nouveau/nv50/nv50_3d.xml.h | 2 +- src/gallium/drivers/nouveau/nv50/nv50_screen.c | 2 +- src/gallium/drivers/nouveau/nv50/nv50_state.c | 3 +++ src/gallium/drivers/nouveau/nvc0/nvc0_3d.xml.h | 2 ++ src/gallium/drivers/nouveau/nvc0/nvc0_screen.c | 2 +- src/gallium/drivers/nouveau/nvc0/nvc0_state.c | 2 ++ 8 files changed, 12 insertions(+), 5 deletions(-) diff --git a/docs/GL3.txt b/docs/GL3.txt index 2854431..cfbce92 100644 --- a/docs/GL3.txt +++ b/docs/GL3.txt @@ -187,7 +187,7 @@ GL 4.4, GLSL 4.40: GL 4.5, GLSL 4.50: GL_ARB_ES3_1_compatibility not started - GL_ARB_clip_control DONE (llvmpipe, softpipe, r300, r600, radeonsi) + GL_ARB_clip_control DONE (nv50, nvc0, r300, r600, radeonsi, llvmpipe, softpipe) GL_ARB_conditional_render_inverted DONE (i965, nv50, nvc0, llvmpipe, softpipe) GL_ARB_cull_distance not started GL_ARB_derivative_control DONE (i965, nv50, nvc0, r600) diff --git a/docs/relnotes/10.4.html b/docs/relnotes/10.4.html index d0fbd3b..8682d71 100644 --- a/docs/relnotes/10.4.html +++ b/docs/relnotes/10.4.html @@ -47,7 +47,7 @@ Note: some of the new features are only available with certain drivers.
  • GL_ARB_conditional_render_inverted on nv50
  • GL_ARB_sample_shading on r600
  • GL_ARB_texture_view on nv50, nvc0
  • -
  • GL_ARB_clip_control on llvmpipe, softpipe, r300, r600, radeonsi
  • +
  • GL_ARB_clip_control on nv50, nvc0, r300, r600, radeonsi, llvmpipe, softpipe
  • GL_KHR_context_flush_control on all drivers
  • diff --git a/src/gallium/drivers/nouveau/nv50/nv50_3d.xml.h b/src/gallium/drivers/nouveau/nv50/nv50_3d.xml.h index 7523fdc..a2c22c5 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_3d.xml.h +++ b/src/gallium/drivers/nouveau/nv50/nv50_3d.xml.h @@ -415,7 +415,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #define NV50_3D_VERTEX_BUFFER_COUNT 0x00000d78 -#define NV50_3D_UNK0D7C 0x00000d7c +#define NV50_3D_DEPTH_CLIP_NEGATIVE_Z 0x00000d7c #define NV50_3D_CLEAR_COLOR(i0) (0x00000d80 + 0x4*(i0)) #define NV50_3D_CLEAR_COLOR__ESIZE 0x00000004 diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c b/src/gallium/drivers/nouveau/nv50/nv50_screen.c index 825e0ba..fcf0098 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c @@ -173,6 +173,7 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_TGSI_FS_FINE_DERIVATIVE: case PIPE_CAP_SAMPLER_VIEW_TARGET: case PIPE_CAP_CONDITIONAL_RENDER_INVERTED: + case PIPE_CAP_CLIP_HALFZ: return 1; case PIPE_CAP_SEAMLESS_CUBE_MAP: return 1; /* class_3d >= NVA0_3D_CLASS; */ @@ -204,7 +205,6 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_TGSI_VS_WINDOW_SPACE_POSITION: case PIPE_CAP_COMPUTE: case PIPE_CAP_DRAW_INDIRECT: - case PIPE_CAP_CLIP_HALFZ: return 0; case PIPE_CAP_VENDOR_ID: diff --git a/src/gallium/drivers/nouveau/nv50/nv50_state.c b/src/gallium/drivers/nouveau/nv50/nv50_state.c index cf84f88..155cddd 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_state.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_state.c @@ -333,6 +333,9 @@ nv50_rasterizer_state_create(struct pipe_context *pipe, SB_BEGIN_3D(so, VIEW_VOLUME_CLIP_CTRL, 1); SB_DATA (so, reg); + SB_BEGIN_3D(so, DEPTH_CLIP_NEGATIVE_Z, 1); + SB_DATA (so, cso->clip_halfz); + assert(so->size <= (sizeof(so->state) / sizeof(so->state[0]))); return (void *)so; } diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_3d.xml.h b/src/gallium/drivers/nouveau/nvc0/nvc0_3d.xml.h index 94b447b..5bd5e95 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_3d.xml.h +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_3d.xml.h @@ -318,6 +318,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #define NVC0_3D_VERTEX_BUFFER_COUNT 0x00000d78 +#define NVC0_3D_DEPTH_CLIP_NEGATIVE_Z 0x00000d7c + #define NVC0_3D_CLEAR_COLOR(i0) (0x00000d80 + 0x4*(i0)) #define NVC0_3D_CLEAR_COLOR__ESIZE 0x00000004 #define NVC0_3D_CLEAR_COLOR__LEN 0x00000004 diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c index 4d4d5eb..2a75931 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c @@ -171,6 +171,7 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_TGSI_FS_FINE_DERIVATIVE: case PIPE_CAP_CONDITIONAL_RENDER_INVERTED: case PIPE_CAP_SAMPLER_VIEW_TARGET: + case PIPE_CAP_CLIP_HALFZ: return 1; case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE: return (class_3d >= NVE4_3D_CLASS) ? 1 : 0; @@ -188,7 +189,6 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_TGSI_VS_LAYER_VIEWPORT: case PIPE_CAP_FAKE_SW_MSAA: case PIPE_CAP_TGSI_VS_WINDOW_SPACE_POSITION: - case PIPE_CAP_CLIP_HALFZ: return 0; case PIPE_CAP_VENDOR_ID: diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_state.c b/src/gallium/drivers/nouveau/nvc0/nvc0_state.c index d1a7cf5..54deb20 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_state.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_state.c @@ -313,6 +313,8 @@ nvc0_rasterizer_state_create(struct pipe_context *pipe, SB_BEGIN_3D(so, VIEW_VOLUME_CLIP_CTRL, 1); SB_DATA (so, reg); + SB_IMMED_3D(so, DEPTH_CLIP_NEGATIVE_Z, cso->clip_halfz); + assert(so->size <= (sizeof(so->state) / sizeof(so->state[0]))); return (void *)so; } -- 2.7.4