<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 6, 2015 at 4:23 PM, Marek Olšák <span dir="ltr"><<a href="mailto:maraeo@gmail.com" target="_blank">maraeo@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Having a different view type for writable shader resources sounds good.<br>
<br>
An alternative solution would be to have separate functions for images<br>
and buffers:<br>
<br>
- set_image_views - image views only, pipe_image_view should look<br>
similar to pipe_surface<br>
<br>
- set_shader_buffers - buffers only, untyped, no views, each slot has<br>
only 3 parameters: resource, offset, size<br></blockquote><div><br></div><div>I am not expert on this but, with my experience reading the code.<br>I think using a generic one with flags set in it could be better. Using "union" can also be a better design.<br></div><div>As textures and buffers can be used as resources from shaders, using a generic one and setting flags can be useful.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
That would be even better from the radeonsi design point of view, and<br>
it would avoid creating a useless view for writable buffers, which are<br>
always untyped in GL.<br>
<span class="HOEnZb"><font color="#888888"><br>
Marek<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On Tue, Jan 6, 2015 at 10:09 PM, Roland Scheidegger <<a href="mailto:sroland@vmware.com">sroland@vmware.com</a>> wrote:<br>
> Actually initially pipe_surface really was for "traditional" render<br>
> surface. There were even stand-alone surfaces (i.e. not based on<br>
> resources) for the non-fbo (system window) surfaces - this is why the<br>
> width/height fields are actually still in there in a pipe_surface (yes<br>
> with a XXX comment)...<br>
> So, the functionality was really all restricted to GL2 / d3d9 level,<br>
> hence it didn't really make a difference how you interpreted it, as<br>
> there weren't any different bind points.<br>
> I'm not sure if we really need a different view for uavs or whatever you<br>
> want to call them in gallium. d3d does that but for instance we didn't<br>
> do different views for depth stencil / rt neither as it seemed quite<br>
> redundant (but nonetheless, create_surface was indeed intended to serve<br>
> the role of the create depth stencil and render target views, at least<br>
> once we cleaned it up to really rely on resources). If it can be reused<br>
> for uavs in a reasonably clean way that's ok - as I said the biggest<br>
> problem I see is that when you create the view the driver won't know for<br>
> which bind point this view is and it must be able to bind the same view<br>
> to several different bind points later. It is, however, probably<br>
> suboptimal if you'd have a driver which needs things closer to d3d<br>
> semantics (as we do in the svga driver) - at least if you'd have<br>
> specified different bind points in the resource the driver is going to<br>
> need to generate multiple views on its own internally. In that way it<br>
> may be cleaner if each different bind point would have its own view.<br>
><br>
> Roland<br>
><br>
><br>
><br>
> Am 06.01.2015 um 20:14 schrieb Ilia Mirkin:<br>
>> Ah, OK. I was interpreting sampler view as "all the things you need to<br>
>> be able to sample from a resource", and surface as "all the things you<br>
>> need to know where to write in a resource", including a render target.<br>
>> But you guys have all been playing this game for much much longer than<br>
>> me...<br>
>><br>
>> On Tue, Jan 6, 2015 at 1:37 PM, Marek Olšák <<a href="mailto:maraeo@gmail.com">maraeo@gmail.com</a>> wrote:<br>
>>> I thought pipe_surface was a render target view.<br>
>>><br>
>>> From the r600 point of view, writable resources are pretty much<br>
>>> "colorbuffers", because they share slots with colorbuffers and are set<br>
>>> up exactly like colorbuffers. So pipe_surface maps well to r600, and<br>
>>> using set_framebuffer_state for setting UAVs would be perfect for that<br>
>>> hardware, but it would be ugly.<br>
>>><br>
>>> From the radeonsi point of view, writable resources are no different<br>
>>> from textures and texture buffers. So pipe_sampler_view maps well to<br>
>>> radeonsi.<br>
>>><br>
>>> Marek<br>
>>><br>
>>> On Tue, Jan 6, 2015 at 7:17 PM, Ilia Mirkin <<a href="mailto:imirkin@alum.mit.edu">imirkin@alum.mit.edu</a>> wrote:<br>
>>>> I thought that a surface was basically a writable view into a<br>
>>>> resource. What does sampler view have that surface doesn't (that<br>
>>>> matters)? The only thing I can think of is levels, but does anything<br>
>>>> actually support multi-level stuff? (ARB_shader_image_load_store<br>
>>>> doesn't seem to.)<br>
>>>><br>
>>>> On Tue, Jan 6, 2015 at 12:54 PM, Marek Olšák <<a href="mailto:maraeo@gmail.com">maraeo@gmail.com</a>> wrote:<br>
>>>>> I would just rename pipe_sampler_view to pipe_resource_view. I don't<br>
>>>>> think "pipe_sampler_view" has a lot to do with samplers. It's just a<br>
>>>>> universal view into textures and yes, buffers too. Of course, some<br>
>>>>> fields don't apply to certain types and use cases.<br>
>>>>><br>
>>>>> OMSetRenderTargetsAndUnorderedAccessViews looks like a design fail. It<br>
>>>>> exactly matches Evergreen/Cayman design, which is now deprecated.<br>
>>>>> Evergreen shares UAV slots with colorbuffers. There are 12 slots, the<br>
>>>>> first 8 can be colorbuffers, those that are unused can be UAVs, so you<br>
>>>>> have at least 4. If you bind only one colorbuffer, you can bind 11<br>
>>>>> UAVs, etc. The other problem with this design is that UAVs can only be<br>
>>>>> used in the pixel shader. It would be a bad idea to follow this design<br>
>>>>> precisely in Gallium. We should have something more generic and let<br>
>>>>> drivers describe any limitations with CAPs.<br>
>>>>><br>
>>>>> Marek<br>
>>>>><br>
>>>>><br>
>>>>> On Tue, Jan 6, 2015 at 6:14 PM, Roland Scheidegger <<a href="mailto:sroland@vmware.com">sroland@vmware.com</a>> wrote:<br>
>>>>>> You are quite right using pipe_surface seems like a bit of an abuse.<br>
>>>>>> pipe_sampler_view wouldn't be quite right though neither, no samplers<br>
>>>>>> are involved. Plus, the views here cannot have multiple mip levels<br>
>>>>>> (which is presumably why pipe_surface was used - nevertheless<br>
>>>>>> pipe_surface was intended only for render / depth stencil target).<br>
>>>>>> I guess an alternative would be to use a new view type altogether (like<br>
>>>>>> d3d does).<br>
>>>>>> I admit I don't quite get how the same stuff is done with d3d11 (as we<br>
>>>>>> should have an interface which works for that as well). It looks like<br>
>>>>>> what's called shader resource in gallium (as in set_shader_resources) is<br>
>>>>>> really UAVs in d3d11 (though I'm not quite sure how these are actually<br>
>>>>>> set in d3d11 in the ddi - at the api level these are interestingly<br>
>>>>>> enough set together with render targets<br>
>>>>>> (OMSetRenderTargetsAndUnorderedAccessViews()) though the parameters are<br>
>>>>>> all separate).<br>
>>>>>> These atomics here more look like the structured buffers which are also<br>
>>>>>> set the same way (maybe?), at least there's mention of append/consume<br>
>>>>>> buffers too there.<br>
>>>>>><br>
>>>>>> Roland<br>
>>>>>><br>
>>>>>><br>
>>>>>><br>
>>>>>> Am 06.01.2015 um 16:27 schrieb Marek Olšák:<br>
>>>>>>> Using set_shader_resources is preferable. I'd rather it used<br>
>>>>>>> pipe_sampler_view, not pipe_surface.<br>
>>>>>>><br>
>>>>>>> GL has a lot of shader resource types though:<br>
>>>>>>> - uniform buffers (load only)<br>
>>>>>>> - textures and texture buffers (sample+load only)<br>
>>>>>>> - storage buffers (load+store)<br>
>>>>>>> - atomic counter buffers (atomic only)<br>
>>>>>>> - images (load+store+atomic)<br>
>>>>>>><br>
>>>>>>> Hardware resource categories on r600:<br>
>>>>>>> - textures and read-only buffers (sample+load only)<br>
>>>>>>> - constant buffers (load only)<br>
>>>>>>> - writable buffers and images (load+store+atomic)<br>
>>>>>>><br>
>>>>>>> Hardware resource categories on radeonsi:<br>
>>>>>>> - none, everything is considered a generic shader resource and<br>
>>>>>>> supports load+store+atomic+sample<br>
>>>>>>><br>
>>>>>>> Thus, it is preferable to use set_shader_resources for all writable<br>
>>>>>>> resources and keep the current interfaces for sampler views and<br>
>>>>>>> constant buffers intact.<br>
>>>>>>><br>
>>>>>>> Marek<br>
>>>>>>><br>
>>>>>>><br>
>>>>>>> On Tue, Jan 6, 2015 at 2:54 PM, Jose Fonseca <<a href="mailto:jfonseca@vmware.com">jfonseca@vmware.com</a>> wrote:<br>
>>>>>>>> Do we really need a new pipe_context::set_counter_buffer method? Shouldn't<br>
>>>>>>>> this case be covered by pipe_context::set_shader_resources ?<br>
>>>>>>>><br>
>>>>>>>> If we really need new method, I'd like we have better names for them, so we<br>
>>>>>>>> can clearly distinguish them.<br>
>>>>>>>><br>
>>>>>>>> IIUC GL_ARB_shader_atomic_counters correctly, this roughly matches D3D11s<br>
>>>>>>>> "unordered access views" [1], though D3D11's UAVs can by typed [2], or raw<br>
>>>>>>>> [3].<br>
>>>>>>>><br>
>>>>>>>> Also, are counter buffers in user memory really supported?  I can't spot any<br>
>>>>>>>> mention of that in GL_ARB_shader_atomic_counters.<br>
>>>>>>>><br>
>>>>>>>> I think that rather than mimicking pipe_constant_buffer, this feature should<br>
>>>>>>>> more closely to sampler views.<br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>> I confess I'm not familiar with counter buffers / UAVs, but I think this<br>
>>>>>>>> needs a bit more thought to avoid being completely redone in the medium<br>
>>>>>>>> term.<br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>> Jose<br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>> [1]<br>
>>>>>>>> <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__msdn.microsoft.com_en-2Dgb_library_windows_desktop_ff476335.aspx-23Unordered-5FAccess&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=Vjtt0vs_iqoI31UfJxBl7yv9I2FeiaeAYgMTLKRBc_I&m=UKHfRUDlIPUSvsUpW3toE2gMpzd1CNUNRIK4CjGrCHo&s=qMm6xJyygPBy-qluPFLHmzH_39o-dSlbG87meenKyq8&e=" target="_blank">https://urldefense.proofpoint.com/v2/url?u=http-3A__msdn.microsoft.com_en-2Dgb_library_windows_desktop_ff476335.aspx-23Unordered-5FAccess&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=Vjtt0vs_iqoI31UfJxBl7yv9I2FeiaeAYgMTLKRBc_I&m=UKHfRUDlIPUSvsUpW3toE2gMpzd1CNUNRIK4CjGrCHo&s=qMm6xJyygPBy-qluPFLHmzH_39o-dSlbG87meenKyq8&e=</a><br>
>>>>>>>> [2] <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__msdn.microsoft.com_en-2Dgb_library_windows_desktop_ff476258.aspx&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=Vjtt0vs_iqoI31UfJxBl7yv9I2FeiaeAYgMTLKRBc_I&m=UKHfRUDlIPUSvsUpW3toE2gMpzd1CNUNRIK4CjGrCHo&s=f2PAAZTT1Eu1wCjexvk_Hx7otgD3wAOz_yFMUN583UM&e=" target="_blank">https://urldefense.proofpoint.com/v2/url?u=http-3A__msdn.microsoft.com_en-2Dgb_library_windows_desktop_ff476258.aspx&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=Vjtt0vs_iqoI31UfJxBl7yv9I2FeiaeAYgMTLKRBc_I&m=UKHfRUDlIPUSvsUpW3toE2gMpzd1CNUNRIK4CjGrCHo&s=f2PAAZTT1Eu1wCjexvk_Hx7otgD3wAOz_yFMUN583UM&e=</a><br>
>>>>>>>> [3]<br>
>>>>>>>> <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__msdn.microsoft.com_en-2Dgb_library_windows_desktop_ff476900.aspx-23Raw-5FBuffer-5FViews&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=Vjtt0vs_iqoI31UfJxBl7yv9I2FeiaeAYgMTLKRBc_I&m=UKHfRUDlIPUSvsUpW3toE2gMpzd1CNUNRIK4CjGrCHo&s=CcRwntJiBsA-k0qo9UAxZrLbluEyp3huZlvFtJCJNms&e=" target="_blank">https://urldefense.proofpoint.com/v2/url?u=http-3A__msdn.microsoft.com_en-2Dgb_library_windows_desktop_ff476900.aspx-23Raw-5FBuffer-5FViews&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=Vjtt0vs_iqoI31UfJxBl7yv9I2FeiaeAYgMTLKRBc_I&m=UKHfRUDlIPUSvsUpW3toE2gMpzd1CNUNRIK4CjGrCHo&s=CcRwntJiBsA-k0qo9UAxZrLbluEyp3huZlvFtJCJNms&e=</a><br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>> On 04/01/15 21:44, adityaatluri wrote:<br>
>>>>>>>>><br>
>>>>>>>>> ---<br>
>>>>>>>>>   src/gallium/include/pipe/p_context.h |  5 +++++<br>
>>>>>>>>>   src/gallium/include/pipe/p_defines.h |  7 ++++++-<br>
>>>>>>>>>   src/gallium/include/pipe/p_state.h   | 10 ++++++++++<br>
>>>>>>>>>   3 files changed, 21 insertions(+), 1 deletion(-)<br>
>>>>>>>>><br>
>>>>>>>>> diff --git a/src/gallium/include/pipe/p_context.h<br>
>>>>>>>>> b/src/gallium/include/pipe/p_context.h<br>
>>>>>>>>> index af5674f..bf3be31 100644<br>
>>>>>>>>> --- a/src/gallium/include/pipe/p_context.h<br>
>>>>>>>>> +++ b/src/gallium/include/pipe/p_context.h<br>
>>>>>>>>> @@ -44,6 +44,7 @@ struct pipe_blit_info;<br>
>>>>>>>>>   struct pipe_box;<br>
>>>>>>>>>   struct pipe_clip_state;<br>
>>>>>>>>>   struct pipe_constant_buffer;<br>
>>>>>>>>> +struct pipe_counter_buffer;<br>
>>>>>>>>>   struct pipe_depth_stencil_alpha_state;<br>
>>>>>>>>>   struct pipe_draw_info;<br>
>>>>>>>>>   struct pipe_fence_handle;<br>
>>>>>>>>> @@ -201,6 +202,10 @@ struct pipe_context {<br>
>>>>>>>>>                                   uint shader, uint index,<br>
>>>>>>>>>                                   struct pipe_constant_buffer *buf );<br>
>>>>>>>>><br>
>>>>>>>>> +   void (*set_counter_buffer)( struct pipe_context *,<br>
>>>>>>>>> +                               uint shader, uint index,<br>
>>>>>>>>> +                               struct pipe_counter_buffer *buf );<br>
>>>>>>>>> +<br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>>>      void (*set_framebuffer_state)( struct pipe_context *,<br>
>>>>>>>>>                                     const struct pipe_framebuffer_state *<br>
>>>>>>>>> );<br>
>>>>>>>>><br>
>>>>>>>>> diff --git a/src/gallium/include/pipe/p_defines.h<br>
>>>>>>>>> b/src/gallium/include/pipe/p_defines.h<br>
>>>>>>>>> index 8c4e415..717ab6a 100644<br>
>>>>>>>>> --- a/src/gallium/include/pipe/p_defines.h<br>
>>>>>>>>> +++ b/src/gallium/include/pipe/p_defines.h<br>
>>>>>>>>> @@ -341,6 +341,7 @@ enum pipe_flush_flags {<br>
>>>>>>>>>   #define PIPE_BIND_VERTEX_BUFFER        (1 << 4) /* set_vertex_buffers */<br>
>>>>>>>>>   #define PIPE_BIND_INDEX_BUFFER         (1 << 5) /* draw_elements */<br>
>>>>>>>>>   #define PIPE_BIND_CONSTANT_BUFFER      (1 << 6) /* set_constant_buffer<br>
>>>>>>>>> */<br>
>>>>>>>>> +#define PIPE_BIND_COUNTER_BUFFER       (1 << 7) /* set_counter_buffer */<br>
>>>>>>>>>   #define PIPE_BIND_DISPLAY_TARGET       (1 << 8) /* flush_front_buffer */<br>
>>>>>>>>>   #define PIPE_BIND_TRANSFER_WRITE       (1 << 9) /* transfer_map */<br>
>>>>>>>>>   #define PIPE_BIND_TRANSFER_READ        (1 << 10) /* transfer_map */<br>
>>>>>>>>> @@ -572,6 +573,8 @@ enum pipe_cap {<br>
>>>>>>>>>      PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE = 109,<br>
>>>>>>>>>      PIPE_CAP_SAMPLER_VIEW_TARGET = 110,<br>
>>>>>>>>>      PIPE_CAP_CLIP_HALFZ = 111,<br>
>>>>>>>>> +   PIPE_CAP_USER_COUNTER_BUFFERS = 112,<br>
>>>>>>>>> +   PIPE_CAP_COUNTER_BUFFER_OFFSET_ALIGNMENT = 113,<br>
>>>>>>>>>   };<br>
>>>>>>>>><br>
>>>>>>>>>   #define PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50 (1 << 0)<br>
>>>>>>>>> @@ -631,7 +634,9 @@ enum pipe_shader_cap<br>
>>>>>>>>>      PIPE_SHADER_CAP_PREFERRED_IR,<br>
>>>>>>>>>      PIPE_SHADER_CAP_TGSI_SQRT_SUPPORTED,<br>
>>>>>>>>>      PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS,<br>
>>>>>>>>> -   PIPE_SHADER_CAP_DOUBLES<br>
>>>>>>>>> +   PIPE_SHADER_CAP_DOUBLES,<br>
>>>>>>>>> +   PIPE_SHADER_CAP_MAX_COUNTER_BUFFER_SIZE,<br>
>>>>>>>>> +   PIPE_SHADER_CAP_MAX_COUNTER_BUFFERS<br>
>>>>>>>>>   };<br>
>>>>>>>>><br>
>>>>>>>>>   /**<br>
>>>>>>>>> diff --git a/src/gallium/include/pipe/p_state.h<br>
>>>>>>>>> b/src/gallium/include/pipe/p_state.h<br>
>>>>>>>>> index 43bc48b..49fae5d 100644<br>
>>>>>>>>> --- a/src/gallium/include/pipe/p_state.h<br>
>>>>>>>>> +++ b/src/gallium/include/pipe/p_state.h<br>
>>>>>>>>> @@ -57,6 +57,7 @@ extern "C" {<br>
>>>>>>>>>   #define PIPE_MAX_CLIP_PLANES       8<br>
>>>>>>>>>   #define PIPE_MAX_COLOR_BUFS        8<br>
>>>>>>>>>   #define PIPE_MAX_CONSTANT_BUFFERS 32<br>
>>>>>>>>> +#define PIPE_MAX_COUNTER_BUFFERS  32<br>
>>>>>>>>>   #define PIPE_MAX_SAMPLERS         16<br>
>>>>>>>>>   #define PIPE_MAX_SHADER_INPUTS    32<br>
>>>>>>>>>   #define PIPE_MAX_SHADER_OUTPUTS   48 /* 32 GENERICs + POS, PSIZE, FOG,<br>
>>>>>>>>> etc. */<br>
>>>>>>>>> @@ -462,6 +463,15 @@ struct pipe_constant_buffer {<br>
>>>>>>>>>      const void *user_buffer;  /**< pointer to a user buffer if buffer ==<br>
>>>>>>>>> NULL */<br>
>>>>>>>>>   };<br>
>>>>>>>>><br>
>>>>>>>>> +/**<br>
>>>>>>>>> + * A Counter buffer. A new buffer is set everytime a variable with<br>
>>>>>>>>> + * atomic_uint is defined.<br>
>>>>>>>>> + */<br>
>>>>>>>>> +struct pipe_counter_buffer{<br>
>>>>>>>>> +   struct pipe_resource *buffer; /**< The actual buffer */<br>
>>>>>>>>> +   unsigned buffer_offset; /**< The offset to start of data in buffer in<br>
>>>>>>>>> bytes */<br>
>>>>>>>>> +   const void *user_buffer; /**< The buffer which is created by the<br>
>>>>>>>>> compiler */<br>
>>>>>>>>> +};<br>
>>>>>>>>><br>
>>>>>>>>>   /**<br>
>>>>>>>>>    * A stream output target. The structure specifies the range vertices<br>
>>>>>>>>> can<br>
>>>>>>>>><br>
>>>>>>>><br>
>>>>>>>> _______________________________________________<br>
>>>>>>>> mesa-dev mailing list<br>
>>>>>>>> <a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
>>>>>>>> <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.freedesktop.org_mailman_listinfo_mesa-2Ddev&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=Vjtt0vs_iqoI31UfJxBl7yv9I2FeiaeAYgMTLKRBc_I&m=UKHfRUDlIPUSvsUpW3toE2gMpzd1CNUNRIK4CjGrCHo&s=yeOKjr9Wd2qQqv6PMmrwzZbQJK_BqiA4FnHRgd5FD8E&e=" target="_blank">https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.freedesktop.org_mailman_listinfo_mesa-2Ddev&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=Vjtt0vs_iqoI31UfJxBl7yv9I2FeiaeAYgMTLKRBc_I&m=UKHfRUDlIPUSvsUpW3toE2gMpzd1CNUNRIK4CjGrCHo&s=yeOKjr9Wd2qQqv6PMmrwzZbQJK_BqiA4FnHRgd5FD8E&e=</a><br>
>>>>>>> _______________________________________________<br>
>>>>>>> mesa-dev mailing list<br>
>>>>>>> <a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
>>>>>>> <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.freedesktop.org_mailman_listinfo_mesa-2Ddev&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=Vjtt0vs_iqoI31UfJxBl7yv9I2FeiaeAYgMTLKRBc_I&m=UKHfRUDlIPUSvsUpW3toE2gMpzd1CNUNRIK4CjGrCHo&s=yeOKjr9Wd2qQqv6PMmrwzZbQJK_BqiA4FnHRgd5FD8E&e=" target="_blank">https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.freedesktop.org_mailman_listinfo_mesa-2Ddev&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=Vjtt0vs_iqoI31UfJxBl7yv9I2FeiaeAYgMTLKRBc_I&m=UKHfRUDlIPUSvsUpW3toE2gMpzd1CNUNRIK4CjGrCHo&s=yeOKjr9Wd2qQqv6PMmrwzZbQJK_BqiA4FnHRgd5FD8E&e=</a><br>
>>>>>>><br>
>>>>>><br>
>>>>> _______________________________________________<br>
>>>>> mesa-dev mailing list<br>
>>>>> <a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
>>>>> <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.freedesktop.org_mailman_listinfo_mesa-2Ddev&d=AwIFaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=Vjtt0vs_iqoI31UfJxBl7yv9I2FeiaeAYgMTLKRBc_I&m=hQbv4jSynGDz9IHC35vlhKe264zk5k2-iZtkYaB-sqo&s=txzEnwI5iS1RZd-XAWViYdOP_HjkhgCgqpLgXD4LPYc&e=" target="_blank">https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.freedesktop.org_mailman_listinfo_mesa-2Ddev&d=AwIFaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=Vjtt0vs_iqoI31UfJxBl7yv9I2FeiaeAYgMTLKRBc_I&m=hQbv4jSynGDz9IHC35vlhKe264zk5k2-iZtkYaB-sqo&s=txzEnwI5iS1RZd-XAWViYdOP_HjkhgCgqpLgXD4LPYc&e=</a><br>
><br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature"><div dir="ltr"><div><div><font style="font-family:trebuchet ms,sans-serif">Regards,<br></font></div><font style="font-family:trebuchet ms,sans-serif"><b style="background-color:rgb(255,255,255);color:rgb(0,0,153)">Aditya Atluri,<br></b></font></div><div><font style="font-family:trebuchet ms,sans-serif"><b style="background-color:rgb(255,255,255);color:rgb(0,0,153)">USA.<br></b></font></div><font style="font-family:trebuchet ms,sans-serif"><b style="background-color:rgb(255,255,255);color:rgb(0,0,153)"></b><span style="background-color:rgb(255,255,255);color:rgb(0,0,153)"></span></font><br></div></div>
</div></div>