[Mesa-dev] [PATCH 11/12] nvc0: Implement cull_distance as a special form of clip distance

Tobias Klausmann tobias.johannes.klausmann at mni.thm.de
Mon Apr 4 13:23:53 UTC 2016



On 04.04.2016 04:32, Ilia Mirkin wrote:
> On Sun, Apr 3, 2016 at 10:15 PM, Dave Airlie <airlied at gmail.com> wrote:
>> From: Tobias Klausmann <tobias.johannes.klausmann at mni.thm.de>
>>
>> This enables ARB_cull_distance.
> This isn't enough - something needs to lower the CULLDIST into
> CLIPDIST (or some combined thing). Ideally they'd both just come in as
> CLIPDIST and the property would let us know where the split is.

Actually it does come in as CULLDIST for both and it works for 0, 4, 8 
distances, e.g. 4 clip 4 cull, just not for lets say 2 clip 6 cull 
distances. The lowering pass fails to do that properly as of now...

>
>> Signed-off-by: Tobias Klausmann <tobias.johannes.klausmann at mni.thm.de>
>> ---
>>   docs/GL3.txt                                    | 2 +-
>>   src/gallium/drivers/nouveau/nvc0/nvc0_program.c | 2 ++
>>   src/gallium/drivers/nouveau/nvc0/nvc0_program.h | 1 +
>>   src/gallium/drivers/nouveau/nvc0/nvc0_screen.c  | 2 +-
>>   4 files changed, 5 insertions(+), 2 deletions(-)
>>
>> diff --git a/docs/GL3.txt b/docs/GL3.txt
>> index 5b6dc89..f28c8a9 100644
>> --- a/docs/GL3.txt
>> +++ b/docs/GL3.txt
>> @@ -211,7 +211,7 @@ GL 4.5, GLSL 4.50:
>>     GL_ARB_ES3_1_compatibility                            not started
>>     GL_ARB_clip_control                                   DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
>>     GL_ARB_conditional_render_inverted                    DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
>> -  GL_ARB_cull_distance                                  in progress (Tobias)
>> +  GL_ARB_cull_distance                                  DONE (softpipe)
> Presumably this would be nvc0, not softpipe?

Hehe, my local version stated both, as both are "working"

>
>>     GL_ARB_derivative_control                             DONE (i965, nv50, nvc0, r600, radeonsi)
>>     GL_ARB_direct_state_access                            DONE (all drivers)
>>     GL_ARB_get_texture_sub_image                          DONE (all drivers)
>> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_program.c b/src/gallium/drivers/nouveau/nvc0/nvc0_program.c
>> index db02fa2..5ca6faa 100644
>> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_program.c
>> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_program.c
>> @@ -49,6 +49,7 @@ nvc0_shader_input_address(unsigned sn, unsigned si)
>>      case TGSI_SEMANTIC_COLOR:        return 0x280 + si * 0x10;
>>      case TGSI_SEMANTIC_BCOLOR:       return 0x2a0 + si * 0x10;
>>      case TGSI_SEMANTIC_CLIPDIST:     return 0x2c0 + si * 0x10;
>> +   case TGSI_SEMANTIC_CULLDIST:     return 0x2c0 + si * 0x10;
>>      case TGSI_SEMANTIC_CLIPVERTEX:   return 0x270;
>>      case TGSI_SEMANTIC_PCOORD:       return 0x2e0;
>>      case TGSI_SEMANTIC_TESSCOORD:    return 0x2f0;
>> @@ -78,6 +79,7 @@ nvc0_shader_output_address(unsigned sn, unsigned si)
>>      case TGSI_SEMANTIC_COLOR:         return 0x280 + si * 0x10;
>>      case TGSI_SEMANTIC_BCOLOR:        return 0x2a0 + si * 0x10;
>>      case TGSI_SEMANTIC_CLIPDIST:      return 0x2c0 + si * 0x10;
>> +   case TGSI_SEMANTIC_CULLDIST:      return 0x2c0 + si * 0x10;
>>      case TGSI_SEMANTIC_CLIPVERTEX:    return 0x270;
>>      case TGSI_SEMANTIC_TEXCOORD:      return 0x300 + si * 0x10;
>>      case TGSI_SEMANTIC_EDGEFLAG:      return ~0;
>> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_program.h b/src/gallium/drivers/nouveau/nvc0/nvc0_program.h
>> index 8b8d221..d5c0d06 100644
>> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_program.h
>> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_program.h
>> @@ -39,6 +39,7 @@ struct nvc0_program {
>>      struct {
>>         uint32_t clip_mode; /* clip/cull selection */
>>         uint8_t clip_enable; /* mask of defined clip planes */
>> +      uint8_t cull_enable; /* mask of defined cull planes */
>>         uint8_t num_ucps; /* also set to max if ClipDistance is used */
>>         uint8_t edgeflag; /* attribute index of edgeflag input */
>>         bool need_vertex_id;
>> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
>> index 21cb75d..f74c588 100644
>> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
>> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
>> @@ -203,6 +203,7 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>>      case PIPE_CAP_MULTI_DRAW_INDIRECT_PARAMS:
>>      case PIPE_CAP_TGSI_FS_FACE_IS_INTEGER_SYSVAL:
>>      case PIPE_CAP_QUERY_BUFFER_OBJECT:
>> +   case PIPE_CAP_CULL_DISTANCE:
>>         return 1;
>>      case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE:
>>         return (class_3d >= NVE4_3D_CLASS) ? 1 : 0;
>> @@ -238,7 +239,6 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>>      case PIPE_CAP_PCI_BUS:
>>      case PIPE_CAP_PCI_DEVICE:
>>      case PIPE_CAP_PCI_FUNCTION:
>> -   case PIPE_CAP_CULL_DISTANCE:
>>         return 0;
>>
>>      case PIPE_CAP_VENDOR_ID:
>> --
>> 2.5.0
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
> _______________________________________________
> 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