<div class="gmail_quote">On Sun, Aug 22, 2010 at 6:58 PM, Corbin Simpson <span dir="ltr">&lt;<a href="mailto:mostawesomedude@gmail.com" target="_blank">mostawesomedude@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">


<div><div></div><div>On Sun, Aug 22, 2010 at 9:24 AM, Benjamin Franzke<br>
&lt;<a href="mailto:benjaminfranzke@googlemail.com" target="_blank">benjaminfranzke@googlemail.com</a>&gt; wrote:<br>
&gt; st/egl/x11/x11_screen.c requests a driver named r300 not radeon<br>
&gt;<br>
&gt; KNOWN ISSUE: breaks st/egl/kms/<br>
&gt;        st/egl/kms requests a pipe named &quot;radeon&quot;<br>
&gt;        that will not be found now<br>
&gt;<br>
&gt;        so why not leaving pipe_radeon there?<br>
&gt;        that was possible as long we have only r300g.<br>
&gt;        now there is also r600g for which st/egl/kms also<br>
&gt;        requests a pipe named &quot;radeon&quot;<br>
&gt;        (possible solution in later commit)<br>
&gt; ---<br>
&gt;  src/gallium/targets/egl/Makefile      |   14 +++++++-------<br>
&gt;  src/gallium/targets/egl/pipe_r300.c   |   27 +++++++++++++++++++++++++++<br>
&gt;  src/gallium/targets/egl/pipe_radeon.c |   27 ---------------------------<br>
&gt;  3 files changed, 34 insertions(+), 34 deletions(-)<br>
&gt;  create mode 100644 src/gallium/targets/egl/pipe_r300.c<br>
&gt;  delete mode 100644 src/gallium/targets/egl/pipe_radeon.c<br>
&gt;<br>
&gt; diff --git a/src/gallium/targets/egl/Makefile b/src/gallium/targets/egl/Makefile<br>
&gt; index 1585e2d..636fceb 100644<br>
&gt; --- a/src/gallium/targets/egl/Makefile<br>
&gt; +++ b/src/gallium/targets/egl/Makefile<br>
&gt; @@ -90,10 +90,10 @@ nouveau_LIBS := \<br>
&gt;        $(TOP)/src/gallium/drivers/nv50/libnv50.a \<br>
&gt;        $(TOP)/src/gallium/drivers/nouveau/libnouveau.a<br>
&gt;<br>
&gt; -# radeon pipe driver<br>
&gt; -radeon_CPPFLAGS :=<br>
&gt; -radeon_SYS := -ldrm -ldrm_radeon<br>
&gt; -radeon_LIBS := \<br>
&gt; +# r300 pipe driver<br>
&gt; +r300_CPPFLAGS :=<br>
&gt; +r300_SYS := -ldrm -ldrm_radeon<br>
&gt; +r300_LIBS := \<br>
&gt;        $(TOP)/src/gallium/winsys/radeon/drm/libradeonwinsys.a \<br>
&gt;        $(TOP)/src/gallium/drivers/r300/libr300.a<br>
&gt;<br>
&gt; @@ -151,7 +151,7 @@ ifneq ($(findstring nouveau/drm,$(GALLIUM_WINSYS_DIRS)),)<br>
&gt;  OUTPUTS += nouveau<br>
&gt;  endif<br>
&gt;  ifneq ($(findstring radeon/drm,$(GALLIUM_WINSYS_DIRS)),)<br>
&gt; -OUTPUTS += radeon<br>
&gt; +OUTPUTS += r300<br>
&gt;  endif<br>
&gt;  ifneq ($(findstring svga/drm,$(GALLIUM_WINSYS_DIRS)),)<br>
&gt;  OUTPUTS += vmwgfx<br>
&gt; @@ -188,8 +188,8 @@ $(OUTPUT_PATH)/$(PIPE_PREFIX)i965.so: pipe_i965.o $(i965_LIBS)<br>
&gt;  $(OUTPUT_PATH)/$(PIPE_PREFIX)nouveau.so: pipe_nouveau.o $(nouveau_LIBS)<br>
&gt;        $(call mklib,nouveau)<br>
&gt;<br>
&gt; -$(OUTPUT_PATH)/$(PIPE_PREFIX)radeon.so: pipe_radeon.o $(radeon_LIBS)<br>
&gt; -       $(call mklib,radeon)<br>
&gt; +$(OUTPUT_PATH)/$(PIPE_PREFIX)r300.so: pipe_r300.o $(r300_LIBS)<br>
&gt; +       $(call mklib,r300)<br>
&gt;<br>
&gt;  $(OUTPUT_PATH)/$(PIPE_PREFIX)vmwgfx.so: pipe_vmwgfx.o $(vmwgfx_LIBS)<br>
&gt;        $(call mklib,vmwgfx)<br>
&gt; diff --git a/src/gallium/targets/egl/pipe_r300.c b/src/gallium/targets/egl/pipe_r300.c<br>
&gt; new file mode 100644<br>
&gt; index 0000000..2fa495e<br>
&gt; --- /dev/null<br>
&gt; +++ b/src/gallium/targets/egl/pipe_r300.c<br>
&gt; @@ -0,0 +1,27 @@<br>
&gt; +<br>
&gt; +#include &quot;target-helpers/inline_debug_helper.h&quot;<br>
&gt; +#include &quot;state_tracker/drm_driver.h&quot;<br>
&gt; +#include &quot;radeon/drm/radeon_drm_public.h&quot;<br>
&gt; +#include &quot;r300/r300_public.h&quot;<br>
&gt; +<br>
&gt; +static struct pipe_screen *<br>
&gt; +create_screen(int fd)<br>
&gt; +{<br>
&gt; +   struct r300_winsys_screen *sws;<br>
&gt; +   struct pipe_screen *screen;<br>
&gt; +<br>
&gt; +   sws = r300_drm_winsys_screen_create(fd);<br>
&gt; +   if (!sws)<br>
&gt; +      return NULL;<br>
&gt; +<br>
&gt; +   screen = r300_screen_create(sws);<br>
&gt; +   if (!screen)<br>
&gt; +      return NULL;<br>
&gt; +<br>
&gt; +   screen = debug_screen_wrap(screen);<br>
&gt; +<br>
&gt; +   return screen;<br>
&gt; +}<br>
&gt; +<br>
&gt; +PUBLIC<br>
&gt; +DRM_DRIVER_DESCRIPTOR(&quot;r300&quot;, &quot;r300&quot;, create_screen)<br>
&gt; diff --git a/src/gallium/targets/egl/pipe_radeon.c b/src/gallium/targets/egl/pipe_radeon.c<br>
&gt; deleted file mode 100644<br>
&gt; index 35550bc..0000000<br>
&gt; --- a/src/gallium/targets/egl/pipe_radeon.c<br>
&gt; +++ /dev/null<br>
&gt; @@ -1,27 +0,0 @@<br>
&gt; -<br>
&gt; -#include &quot;target-helpers/inline_debug_helper.h&quot;<br>
&gt; -#include &quot;state_tracker/drm_driver.h&quot;<br>
&gt; -#include &quot;radeon/drm/radeon_drm_public.h&quot;<br>
&gt; -#include &quot;r300/r300_public.h&quot;<br>
&gt; -<br>
&gt; -static struct pipe_screen *<br>
&gt; -create_screen(int fd)<br>
&gt; -{<br>
&gt; -   struct r300_winsys_screen *sws;<br>
&gt; -   struct pipe_screen *screen;<br>
&gt; -<br>
&gt; -   sws = r300_drm_winsys_screen_create(fd);<br>
&gt; -   if (!sws)<br>
&gt; -      return NULL;<br>
&gt; -<br>
&gt; -   screen = r300_screen_create(sws);<br>
&gt; -   if (!screen)<br>
&gt; -      return NULL;<br>
&gt; -<br>
&gt; -   screen = debug_screen_wrap(screen);<br>
&gt; -<br>
&gt; -   return screen;<br>
&gt; -}<br>
&gt; -<br>
&gt; -PUBLIC<br>
&gt; -DRM_DRIVER_DESCRIPTOR(&quot;radeon&quot;, &quot;radeon&quot;, create_screen)<br>
&gt; --<br>
&gt; 1.7.1<br>
<br>
</div></div>I&#39;m not so sure about this series, because (a) it should be possible<br>
to come up with something that works for both EGL backends (b) we<br>
haven&#39;t decided yet how much code r300g and r600g get to share.<br></blockquote><div><br>(a) I agree.<br><br>(b) So far it seems to me that the strategy is to copy-paste useful pieces of code from r300g to r600g and reinventing the wheel elsewhere, instead of code sharing. My idea is that r300_xxx and r600_xxx structures should inherit yet-non-existent structures radeon_xxx which should be used by common code, and these in turn should inherit pipe_xxx. This way we don&#39;t have to redirect all entrypoints to a driver like in galahad, only the ones we want to override. At least all buffer management and texture transfer code could be shared. Then, the drivers would not need to implement entrypoints like user_buffer_create and transfers and some other resource entrypoints, and an alternate low-level bufmgr interface would be provided the drivers must implement instead.<br>


<br>The idea of sharing winsys is pretty much dead, as you probably already know. I think Jerome wants to move some of the r600g winsys code into kernel.<br></div></div><br>Marek<br>