On Fri, Jun 15, 2012 at 11:16 AM, Miguel Ramos <m...@miguel.ramos.name> wrote: > 2012/6/15 Marek Olšák <mar...@gmail.com>: >> On Fri, Jun 15, 2012 at 3:15 PM, Miguel Lopes Santos Ramos >> <org.mes...@miguel.ramos.name> wrote: >>> Hi all, >>> >>> I'm trying to learn to program radeons in assembly in Linux and >>> already got help once in this mailing list. >>> >>> I'm programming in C++ using the kernel DRM ioctls directly because >>> libdrm appears to be a thin wrapper around these (for my purpose, >>> which is using the GPU for computing), but in doing so, I need to >>> understand what libdrm is doing. >>> >>> Now, the cs_gem_write_reloc function, emits two dwords which encode a >>> relocation and adds information on that relocation to an array which >>> is passed to the kernel. >>> The function goes to some length to make sure a single >>> drm_radeon_cs_reloc structure is passed to the kernel for each buffer >>> object. >>> >>> Now, I'm trying to understand what are the constraints, I don't know >>> what is the desired behaviour. >>> >>> This function begins with: >>> >>> if ((read_domain && write_domain) || (!read_domain && !write_domain)) { >>> /* in one CS a bo can only be in read or write domain but not >>> * in read & write domain at the same sime >>> */ >>> >>> Now, the comment seems to say one thing whereas the if-condition seems >>> to say the opposite. Am I mistaken? Which is the desired behaviour, >>> that of the comment or that of the code? >>> >>> Then, the code block within if (reloc->handle == bo->handle) { ... } >>> is even more confusing to me. >>> For instance, the following line: >>> >>> reloc->flags |= (flags & reloc->flags); >>> >>> This seems to be a no-op. Anyway, I'm not so worried about these flags >>> which appear never to be used... >>> But what are really the constraints for this read_domains and write_domain? >> >> I no longer remember how exactly the libdrm CS code works. Radeon >> gallium drivers don't use it, because it's inefficient and awful. >> >> To answer your question: the kernel uses write_domain if it's >> non-zero, otherwise it uses read_domains. That's it. > > Thanks, that is clear. > >> The Mesa code that replaces libdrm resides in the Mesa repository in: >> src/gallium/winsys/radeon/drm/ > > Hum, yes, it looks better, good formating and I see you are also using > a hash table. > I think this is all I need from DRM, now I only need to dig into the > registers. > > BTW, not that anyone cares, it's not useful, but since I'm reading so > much code from the people related to this list, for the sake of > attribution, I'm working here: > https://github.com/migle/trials/tree/master/radeon
If you just want to play with simple shaders and setting up the 3D pipeline, radeondemo is an easy place to start: http://cgit.freedesktop.org/~airlied/radeondemo Alex > > -- > Miguel Ramos <m...@miguel.ramos.name> > PGP A006A14C > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev