Wednesday, February 1, 2017

Stingray Renderer Walkthrough #2: Resources & Resource Contexts

Stingray Renderer Walkthrough #2: Resources & Resource Contexts

Render Resources

Before any rendering can happen we need a way to reason about GPU resources. Since we want all graphics API specific code to stay isolated we need some kind of abstraction on the engine side, for that we have an interface called RenderDevice. All calls to graphics APIs like D3D, OGL, GNM, Metal, etc. stays behind this interface. We will be covering the RenderDevice in a later post so for now just know that it is there.

We want to have a graphics API agnostic representation for a bunch of different types of resources and we need to link these representations to their counterparts on the RenderDevice side. This linking is handled through a POD-struct called RenderResource:

struct RenderResource
{
    enum {
        TEXTURE, RENDER_TARGET, DEPENDENT_RENDER_TARGET, BACK_BUFFER_WRAPPER,
        CONSTANT_BUFFER, VERTEX_STREAM, INDEX_STREAM, RAW_BUFFER,
        BATCH_INFO, VERTEX_DECLARATION, SHADER,
        NOT_INITIALIZED = 0xFFFFFFFF
    };

    uint32_t render_resource_handle;
};

Any engine resource that also needs a representation on the RenderDevice side inherits from this struct. It contains a single member render_resource_handle which is used to lookup the correct graphics API specific representation in the RenderDevice.

The most significant 8 bits of render_resource_handle holds the type enum, the lower 24 bits is simply an index into an array for that specific resource type inside the RenderDevice.

Various Render Resources

Let’s take a look at the different render resource that can be found in Stingray:

  • Texture - A regular texture, this object wraps all various types of different texture layouts such as 2D, Cube, 3D.
  • RenderTarget - Basically the same as Texture but writable from the GPU.
  • DependentRenderTarget - Similar to RenderTarget but with logics for inheriting properties from another RenderTarget. This is used for creating render targets that needs to be reallocated when the output window (swap chain) is being resized.
  • BackBufferWrapper - Special type of RenderTarget created inside the RenderDevice as part of the swap chain creation. Almost all render targets are explicitly created by the user, this is the only exception as the back buffer associated with the swap chain is typically created together with the swap chain.
  • ShaderConstantBuffer - Shader constant buffers designed for explicit update and sharing between multiple shaders, mainly used for “view-global” state.
  • VertexStream - A regular Vertex Buffer.
  • VertexDeclaration - Describes the contents of one or many VertexStreams.
  • IndexStream - A regular Index Buffer.
  • RawBuffer - A linear memory buffer, can be setup for GPU writing through an UAV (Unordered Access View).
  • Shader - For now just think of this as something containing everything needed to build a full pipeline state object (PSO). Basically a wrapper over a number of shaders, render states, sampler states etc. I will cover the shader system in a later post.

Most of the above resources have a few things in common:

  • They describe a buffer either populated by the CPU or by the GPU
  • CPU populated buffers has a validity field describing its update frequency:
    • STATIC - The buffer is immutable and won’t change after creation, typically most buffers coming from DCC assets are STATIC.
    • UPDATABLE - The buffer can be updated but changes less than once per frame, e.g: UI elements, post processing geometry and similar.
    • DYNAMIC - The buffer frequently changes, at least once per frame but potentially many times in a single frame e.g: particle systems.
  • They have enough data for creating a graphics API specific representation inside the RenderDevice, i.e they know about strides, sizes, view requirements (e.g should an UAV be created or not), etc.

Render Resource Context

With the RenderResource concept sorted, we’ll go through the interface for creating and destroying the RenderDevice representation of the resources. That interface is called RenderResourceContext (RRC).

We want resource creation to be thread safe and while the RenderResourceContext in itself isn’t, we can achieve free threading by allowing the user to create any number of RRC’s they want, and as long as they don’t touch the same RRC from multiple threads everything will be fine.

Similar to many other rendering systems in Stingray the RRC is basically just a small helper class wrapping an abstract “command buffer”. On this command buffer we put what we call “packages” describing everything that is needed for creating/destroying RenderResource objects. These packages have variable length depending on what kind of object they represent. In addition to that the RRC can also hold platform specific allocators that allow allocating/deallocating GPU mapped memory directly, avoiding any additional memory shuffling in the RenderDevice. This kind of mechanism allows for streaming e.g textures and other immutable buffers directly into GPU memory on platforms that provides that kind of low-level control.

Typically the only two functions the user need to care about are:

class RenderResourceContext
{
public:
  void alloc(RenderResource *resource);
  void dealloc(RenderResource *resource);
};

When the user is done allocating/deallocating resources they hand over the RRC either directly to the RenderDevice or to the RenderInterface.

class RenderDevice
{
public:
    virtual void dispatch(uint32_t n_contexts, RenderResourceContext **rrc, uint32_t gpu_affinity_mask = RenderContext::GPU_DEFAULT) = 0;
};

Handing it over directly to the RenderDevice requires the caller to be on the controller thread for rendering as RenderDevice::dispatch() isn’t thread safe. If the caller is on any other thread (like e.g. one of the worker threads or the resource streaming thread) RenderInterface::dispatch() should be used instead. We will cover the RenderInterface in a later post so for now just think of it as a way of piping data into the renderer from an arbitrary thread.

Wrap up

The main reason of having the RenderResourceContext concept instead of exposing allocate()/deallocate() functions directly in the RenderDevice/RenderInterface interfaces is for efficiency. We have a need for allocating and deallocating lots of resources, sometimes in parallel from multiple threads. Decoupling the interface for doing so makes it easy to schedule when in the frame the actual RenderDevice representations gets created, it also makes the code easier to maintain as we don’t have to worry about thread-safety of the RenderResourceContext.

In the next post we will discuss the RenderJobs and RenderContexts which are the two main building blocks for creating and scheduling draw calls and state changes.

Stay tuned.

128 comments:

  1. I am reading your series with great interest Tobias. Thanks for the write-up!

    ReplyDelete
  2. This comment has been removed by the author.

    ReplyDelete
  3. One "detail" I am curious about, is how you give RenderResource::render_resource_handle a correct value. One option I see, is that it only receives the correct index/value while the RenderResourceContext is being dispatched. But that would mean the RenderResource cannot be used to build commands on a RenderContext before the RenderResourceContext's dispatch is finished, which would hinder parallelism. Alternatively, each RenderResourceContext gets ranges of indices it can use for each type of resource. But that also seems inconvenient. Maybe there is an elegant solution I am missing here? Any thoughts would be greatly appreciated!

    ReplyDelete
    Replies
    1. I know it's a bit late, but I've been thinking about this quite a bit myself. One of my personal solutions to the problem you state would be to return "local" handles per render resource; that is, each RenderResourceContext would hold its own handles per resource type, starting from zero. Each resource of the same type that you allocate from that particular context would increment the handle for that type, and then when the context gets dispatched each of the local handles (the ones starting from zero) get converted into the "actual" handles inside the render device. For example, if you allocated 3 textures from within a single context, the first texture would be render_resource_handle 0, the 2nd one would be 1, and the 3rd one 2, respectively. Then say the render device already has 10 textures in memory: when the context gets dispatched, the 0, 1, and 2 get converted into 11, 12, and 13. This lets you share render resources between objects so long as they are created with the same context; because after dispatch, the local handles are meaningless. Again, I understand that was probably worded pretty poorly, but I hope I got the gist across. The design still isn't perfect; though; there are a couple of pressing issues that need to be addressed before it's perfect.

      Delete
  4. Microsoft office setup is the software setup file with this setup file you can install on your computer and some of the supported device to use Microsoft office.
    www.office.com/setup
    office.com/setup
    office com setup

    ReplyDelete
  5. Get Python Training in , Gurgaon with constant specialists at APTRON, . We accept that learning Python in blend of useful and hypothetical will be the most effortless approach to comprehend the technology in snappy way. We planned this Python Training from essential level to the most recent propelled level. We do manage our members for individual Certifications which is an additional favorable position to the present market.

    For More Info:- Python Training Course in Gurgaon

    ReplyDelete
  6. Very nice blog post, it is informative and i subscribed for all its future post. there are some useful links, i think i must share here:
    www.mcafee.com/activate
    mcafee.com/activate

    ReplyDelete
  7. How to Get help in windows 10 We have answered all your questions in this article. Feel free to ask more in the comment section

    ReplyDelete
  8. top essay writing services In an individual account exposition, you may expound on an encounter that showed you something, an encounter that made you fully aware of something new, or an especially essential time or event.Even on the off chance that you are given an article brief, her response take that subject and discover something identifying with it that is critical to youin uk

    ReplyDelete
  9. Greetings! Very helpful advice within this article! It is the little changes that produce the largest changes. Many thanks for sharing! gogoanime

    ReplyDelete
  10. I needed to thank you for this great read!! I certainly enjoyed every bit of it. I have you book-marked to look at new stuff you post…movieswood

    ReplyDelete
  11. I couldn’t refrain from commenting. Exceptionally well written!.kissanime

    ReplyDelete
  12. Very good information. Lucky me I came across your blog by chance (stumbleupon). I have saved it for later!.mastihot

    ReplyDelete
  13. I'm very pleased to find this page. I want to to thank you for your time for this fantastic read!! I definitely enjoyed every bit of it and i also have you saved to fav to look at new things on your web site.o2cinemas

    ReplyDelete
  14. Top Rated Plasma Cutter When I originally commented I appear to have clicked the -Notify me when new comments are added- checkbox and from now on whenever a comment is added I get 4 emails with the exact same comment. Is there a way you are able to remove me from that service? Cheers!

    ReplyDelete
  15. Nice post, you give the clear idea of the topic and I subscribed your blog, I have some links to share here

    Mcafee.com/activate
    www.Mcafee.com/activate

    ReplyDelete
  16. It is a very helpful and informative blog post. I would like to thank to you for providing such information I have also have a website providing very good information.

    norton.com/setup

    ReplyDelete
  17. Good Work, i like the way you describe this topic, keep going. i would like to share some useful security links here please go through.

    mcafee.com/activate
    www.mcafee.com/activate

    ReplyDelete
  18. It’s hard to find well-informed people about this topic, but you seem like you know what you’re talking about! Thanks.Cheap Plasama Cutter

    ReplyDelete
  19. The very next time I read a blog, Hopefully it won't fail me just as much as this one. After all, I know it was my choice to read, but I actually believed you would probably have something interesting to say. All I hear is a bunch of whining about something you can fix if you weren't too busy searching for attention.
    Best Plasma Cutter Under 1000

    ReplyDelete
  20. The very next time I read a blog, Hopefully it won't fail me just as much as this one. After all, I know it was my choice to read, but I actually believed you would probably have something interesting to say. All I hear is a bunch of whining about something you can fix if you weren't too busy searching for attention.
    Best Plasma Cutter Under 1000

    ReplyDelete
  21. I blog frequently and I truly thank you for your content. The article has truly peaked my interest. I am going to take a note of your website and keep checking for new information about once per week. I subscribed to your RSS feed as well.
    Best Sublimation Printers 2020

    ReplyDelete

  22. Right here is the right blog for anyone who really wants to understand this topic. You know so much its almost hard to argue with you (not that I actually would want to…HaHa). You certainly put a brand new spin on a subject that's been discussed for many years. Wonderful stuff, just excellent!
    Best Mens Backpacks for work

    ReplyDelete
  23. This comment has been removed by the author.

    ReplyDelete
  24. I appreciate your hard work. Keep posting new updates with us. This is really a wonderful post. Nice Blog Very interesting and useful information on your website. Thanks for sharing the blog and this great information which is definitely going to help us.

    office.com/setup
    office.com/setup

    ReplyDelete
  25. After looking over a number of the blog posts on your web site, I really like your technique of writing a blog. I book-marked it to my bookmark webpage list and will be checking back soon. Please check out my website too and let me know what you think.disinfecting san antonio

    ReplyDelete
  26. Having read this I believed it was extremely enlightening. I appreciate you finding the time and energy to put this content together. I once again find myself personally spending way too much time both reading and posting comments. But so what, it was still worthwhile!coronavirus disinfecting san antonio

    ReplyDelete
  27. After I originally commented I seem to have clicked on the -Notify me when new comments are added- checkbox and now whenever a comment is added I receive four emails with the same comment. There has to be an easy method you can remove me from that service? Many thanks!
    pres control san antonio coronavirus

    ReplyDelete
  28. Nice post. I learn something new and challenging on sites I stumbleupon on a daily basis. It will always be exciting to read through articles from other writers and use something from their web sites.
    cryptocurrency Trading Signals

    ReplyDelete
  29. I must thank you for the efforts you've put in penning this blog. I am hoping to check out the same high-grade content from you in the future as well. In fact, your creative writing abilities has motivated me to get my own website now ;)
    I'm more than happy to find this page. I wanted to thank you for your time for this wonderful read!! I definitely enjoyed every bit of it and I have you bookmarked to check out new things in your web site.
    gaymapper

    ReplyDelete
  30. Mcafee is a popular antivirus protection product which secures your computers and laptops from malware attacks. You can download this antivirus from mcafee official website mcafee.com and login with a few steps. I personally used it and it has secured my system for 6 years . you can login by using mobile through mcafee my account login. For more information visit our website

    https://mcafeepro.com/

    ReplyDelete
  31. Hi there! This blog post could not be written much better! Going through this post reminds me of my previous roommate! He constantly kept preaching about this. I am going to forward this article to him. Fairly certain he's going to have a great read. Thanks for sharing!
    Roofing

    ReplyDelete
  32. Übersetzung für Wirtschaft, Recht & Finanzen, Qualifizierte Übersetzer für Jura und Recht. Übersetzungsbüro. Übersetzungsbüro für Rechtsübersetzung in Oberstdorf-Immenstadt-KemptenÜbersetzung aller Sprachen, Juristischer Übersetzungsdienst, Industrie & Technik, Professionelle Übersetzungen

    ReplyDelete
  33. McAfee is one of the most popular antiviruses among internet users all across the globe. However, some of the internet users misjudge it for a mid-range price and call it an average antivirus. A lot has changed over the last couple of years. McAfee antivirus was once part of Intel, but it redesigned its user interface and became the most prominent and effective antiviruses. In the market, McAfee login competes with industry giants such as Norton and Kaspersky.
    https://mcafeepro.com/

    ReplyDelete
  34. Alle Sprachen, express Service. Technik, Recht, Werbung Marketing, Wirtschaft, juristische Übersetzung. Muttersprachler. DTP & Fremdsprachensatz. 4-Augen-Prinzip, Professionelles Übersetzungsbüro für Übersetzungen und Dolmetschen ✓ mehr als 35 Jahre Erfahrung ✓ Profi Fachübersetzung Deutsch Englisch Emden-Wilhelmshaven-Oldenburgalle Sprachen ✓ ISO-zertifiziert ✓ Express-Service, juristische,technische und medizinische Übersetzung, vereidigte Übersetzer, Patentübersetzung, Dolmetscher

    ReplyDelete
  35. Swimming Pool Installers
    When it comes to the question of whether a pool adds value, there is no definitive answer. It largely comes down to individual buyers. A pool can be a make or break feature; for some buyers, the cost and time necessary to maintain it will be a complete turn-off. However, for others, the lifestyle factor will be all-important. Those who want a swimming pool will be prepared to pay for it.

    ReplyDelete
  36. kratom is an herbal extract that comes from the leaves of an evergreen tree (Mitragyna speciosa) grown in Southeast Asia. Kratom leaves can be chewed, and dry kratom can be swallowed or brewed. Kratom extract can be used to make a liquid product. The liquid form is often marketed as a treatment for muscle pain, or to suppress appetite and stop cramps and diarrhea. Kratom is also sold as a treatment for panic attacks.

    ReplyDelete
  37. We feature incredibly luxurious Alpaca fur rug of unrivaled quality. We produce an exquisite selection of fur rugs, fur throws and fur comforters in many colors, styles, and sizes. We have put together a selection of Alpaca products that the discerning customer will appreciate. Designed and produced with maximum comfort and luxury in mind. An exclusive and unique luxury brand tailored for the unique individual. We offer an all inclusive purchase with concierge options for our clients.

    ReplyDelete
  38. Zuluf Souvenir Store & Factory is a community store located in Bethlehem, The Birthplace of Our Lord Jesus Christ

    ReplyDelete
  39. Lawn mower
    A mower does more than cut the grass. That's true whether you opt for the power of a gas engine walk behind mower or one equipped with a quiet electric motor and lithium-ion battery. The right mower will save you money by allowing you to handle the job yourself. It should make the job as pleasant as possible and provide the satisfaction of a well-cut lawn. When there are buds, seeds, and leaves on the lawn, a mower is also a cleanup tool.

    ReplyDelete
  40. nature video
    From soaring over majestic mountaintops in Patagonia to swimming underwater with dolphins in Tahiti, Nature Relaxation™ On-Demand is your ticket for experiencing the world's most beautiful natural paradises in 4K UHD.

    ReplyDelete
  41. best online business in pakistan
    If you have great writing skills, you can always write content for different magazines, publishers etc.

    ReplyDelete
  42. Mcafee is an antivirus that provides protection to your device from various online threats. McAfee account login will help you to use various features. You first have to start with the Mcafee login process for getting access to all the information regarding your Mcafee account. The login is simple as well as an easy process.
    https://mcafeepro.com/

    ReplyDelete
  43. Best Orthopedic Doctor In Kolkata
    From back pain and arthritis to fractures and sports injuries, get treated for all your issues. As the best orthopedic doctor in Kolkata, Dr. Manoj Kumar Khemani specializes in a wide range of bone and joint-related problems.

    ReplyDelete
  44. NYC Financial Advisor
    Payne Capital Management is a fee only financial advisor and wealth management planner located in New York City.

    ReplyDelete
  45. measure diversity
    measure diversity with five concrete tips. It's practical and you can immediately take steps to start measuring your diversity efforts after reading it.

    ReplyDelete
  46. European hair extension
    We got in touch with the hair extension experts to get the lowdown on everything you need to know before you take the plunge. Consider your hair extension questions answered.

    ReplyDelete
  47. Black and white portrait
    Suzi Nassif's black and white art is classic with black and white portraits that are unique. Each portrait reveals her talent and acute observation of the human form. Buy her paintings via her website today.

    ReplyDelete
  48. This is very informative post, good work, i like this content and wish to read more from you. Thanks for such a informative post. I also like to share
    McAfee Login
    McAfee Total Protection Login
    McAfee Antivirus Login
    McAfee Login Mobile

    ReplyDelete
  49. mobilselskaber i Danmark
    Med denne oversigt over mobilselskaber i Danmark, kan du læse dig frem til informationer om de forskellige danske mobilselskaber. Hvis du er på søgen efter et nyt mobilselskab, eller det bedste mobilselskab, så håber vi, at denne side er dig behjælpelig og tilstrækkelig oplysende. Afslutningsvis dækker listen ikke over alle mobilselskaber i Danmark, men derimod de selskaber, som kan findes i vores sammenligningsportal lige her. Hos Samlino.dk kan du finde alt fra billige mobilselskaber til dyre, og vi har sørget for, at der er noget til ethvert behov.

    ReplyDelete
  50. Plenty Of Fish is a leading social network for dating. It offers the opportunity to meet people of dating age from different countries. This platform not only in a location close to you, but specifically somebody who specializes POF in marriages. Explore fast solutions in
    POF Login
    Plenty Of Fish Login
    Plenty Of Fish Login Page
    Pof Login Inbox

    ReplyDelete
  51. Residential Locksmith Services
    You’ve made some good points there. I looked on the internet for additional information about the issue and found most people will go along with your views on this website.
    Nice post. I learn something totally new and challenging on websites I stumbleupon every day. It’s always useful to read through articles from other authors and practice something from other sites.

    ReplyDelete
  52. Eco living life team is passionate about making it easier for you to shop online. We care about your time so we try our best to make your shopping experience pleasant, seamless and hassle-free.

    ReplyDelete
  53. Aw, this was a very nice post. Taking the time and actual effort to produce a superb article… but what can I say… I procrastinate a whole lot and never manage to get anything done.

    At BrokeScholar we work around the clock to update this page with active promo codes, coupons and discounts for Total Wine . Our editors monitor newsletters, social media posts, deal forums, and third party sellers to find the best Total Wine deals. For students, we also track totalwine student discounts for exclusive savings. We've done the research so you don't have to. Bookmark this page and never miss a Total Wine promotion again.

    ReplyDelete

  54. To solve some problems with the Roadrunner email, you have to give your precious time. For that, you just need the roadrunner email contact number to fix all the technical problems. You will get quick support and the best possible solutions.
    https://xperria.com/email-support/roadrunner-email-phone-number/

    ReplyDelete
  55. Stretch your dollar even further at harbor freight coupons with our 25% off coupons. These coupons will help you save 20% (or more!) on qualifying items throughout the store. We also have discounts just for members of our Inside Track Club.

    ReplyDelete
  56. Suggest good information in this message, click here.
    be2gambler.info
    betservice.info

    ReplyDelete
  57. You've made some good points there. I looked on the internet for additional information about the issue and found most people will go along with your views on this website.
    best-cheap-robot-vacuum-cleaner

    ReplyDelete
  58. Right here is the perfect blog for anybody who hopes to understand this topic. You understand a whole lot its almost hard to argue with you (not that I personally would want to…HaHa). You definitely put a fresh spin on a subject that's been discussed for a long time. Excellent stuff, just excellent!
    best-cheap-robot-vacuum-cleaners

    ReplyDelete
  59. An impressive share! I have just forwarded this onto a coworker who had been conducting a little homework on this. And he in fact bought me dinner due to the fact that I found it for him... lol. So allow me to reword this.... Thank YOU for the meal!! But yeah, thanx for spending time to discuss this topic here on your website.
    best-cheap-robot-vacuum-cleaner

    ReplyDelete
  60. Way cool! Some very valid points! I appreciate you penning this post plus the rest of the site is really good.
    best-cheap-24-inch-monitors

    ReplyDelete
  61. I truly love your blog.. Great colors & theme. Did you develop this amazing site yourself? Please reply back as I’m attempting to create my own personal website and would like to know where you got this from or what the theme is called. Appreciate it!
    best-cheap-microwaves-2

    ReplyDelete
  62. Having read this I believed it was rather enlightening. I appreciate you taking the time and effort to put this short article together. I once again find myself personally spending a lot of time both reading and leaving comments. But so what, it was still worthwhile! best-cheap-microwaves-2

    ReplyDelete
  63. I really happy found this website eventually. Really informative and inoperative, Thanks for the post and effort! Please keep sharing more such blog.


    office.com/setup
    www.office.com/setup
    office setup
    mcafee.com/activate
    www.mcafee.com/activate
    bitcoin login

    ReplyDelete
  64. Right here is the perfect site for anyone who hopes to understand this topic. You understand so much its almost hard to argue with you (not that I actually will need to…HaHa). You definitely put a new spin on a subject which has been discussed for many years. Wonderful stuff, just excellent!
    best-cheap-microwaves-oven

    ReplyDelete
  65. Hi there! This post couldn’t be written any better! Reading through this post reminds me of my previous roommate! He continually kept preaching about this. I most certainly will send this information to him. Fairly certain he'll have a great read. Many thanks for sharing!
    best-straightening-brushes

    ReplyDelete
  66. An impressive share! I have just forwarded this onto a co-worker who has been conducting a little homework on this. And he actually ordered me breakfast simply because I discovered it for him... lol. So let me reword this.... Thank YOU for the meal!! But yeah, thanx for spending the time to talk about this matter here on your blog.
    best-cheap-microwaves-oven

    ReplyDelete

  67. Professionelles Übersetzungsbüro ✓ Übersetzungen ✓ Dolmetschen ✓ mehr als 35 Jahre Erfahrung ✓ alle Sprachen ✓ Qualitätsstandard ISO 17100 ✓ Rechtssichere Übersetzung ✓ Juristische Fachübersetzung ✓ Übersetzungsbüro ✓ Übersetzungsdienst ✓Übersetzungsagentur ✓Übersetzungsservice ✓ Übersetzungen ✓ beglaubigte ✓ Übersetzung, Übersetzen ✓individuelle Beratung.✓✓ Alle Sprachen. Alle Fachrichtungen,✓ 35 Jahre Erfahrung ✓ Express Übersetzungsbüro ✓ juristische und technische Übersetzung ✓ Profi Fachübersetzungen ✓ Deutsch Englisch
    Juristische Übersetzungen Patent Fachübersetzung Berlin


    ReplyDelete
  68. On this website, You’ll get over 200+ real working dark web links and If you’re a regular dark web user so you can start using these dark web links and If you’re a new user or If you don’t know anything about the dark web So you can read the content below and you’ll understand everything about the dark web.

    ReplyDelete
  69. Taxi kuwait City has no shortage of transportation options whether for tourists or corporate travelers. Kuwait has a well-developed road system, but, public transport is mostly limited to buses and taxis. Plans are on to build a railway system in future, but, buses, cars or taxis are the only means of common public transport available in Kuwait at present.

    ReplyDelete
  70. nulidad tarjetas wizink
    En el momento en el que el Tribunal Supremo estableció la comparación, el Banco de España no distinguía entre diversas categorías de tipos de crédito. A partir de la entrada en vigor de la Circular 1/2010, con posterioridad a la suscripción del contrato que nos ocupa, se establecen índices de TAE diversos que distinguen entre crédito al consumo y tarjetas de pago aplazado. No obstante, esta circunstancia no desvirtúa las características del contrato revolving de litis.

    ReplyDelete
  71. bancario y foral aragonés
    Los derechos reales. Esto es, los derechos de propiedad, posesión y goce de bienes, el derecho hipotecario y otras formas de relación entre los individuos y las cosas, así como los modos de tenencia y adquisición de los mismos.

    ReplyDelete
  72. نقل عفش الكويت
    هذه الشركة تتميز بالكفاءة في أداء خدمة النقل حيث أنها تمتلك العديد من سيارات النقل الحديثة المجهزة لتنفيذ عملية النقل بكفاءة عالية كما أنها تمتلك أوناش حديثة لتنزيل ورفع المنقولات بسهولة ويسر لتجنب حدوث خسائر أو أضرار بالعفش.

    توفر الشركة فريق فني مميز على درجة عالية من الكفاءة والخبرة في عمليات النقل مكونه من (مهندسين ونجارين وكهربائيين) وذلك لزوم الفك والتركيب والتغليف وأداء الخدمة على أكمل وجه.

    ReplyDelete
  73. نقل عفش رخيص

    نقل عفش – نقل عفش الكويت – نقل عفش رخيص – المتخصص 55293060 – نقل عفش هندى – نقل عفش هنود – نقل اثاث – نقل عفش بالكويت – رقم نقل عفش – شركة نقل عفش

    ReplyDelete
  74. ΥΔΡΑΥΛΙΚΟΙ ΠΕΙΡΑΙΑΣ
    • Τοποθέτηση μπαταρίας νεροχύτη Πειραιάς
    • Τοποθέτηση μπαταρίας νεροχύτη με σπιράλ τηλεφώνου Πειραιάς

    ReplyDelete
  75. شركة تنظيف
    شراء اثاث – شراء اثاث مستعمل – شراء مستعمل -بالكويت 60003945 – يشترون اثاث مستعمل – رقم اثاث مستعمل – نشترى اثاث مستعمل – نشترى الاثاث

    ReplyDelete
  76. "General Chit Chat is a trusted global news source bringing to you all of the latest news in family, entertainment, sports, technology, lifestyle and news

    ReplyDelete
  77. Thanks for sharing a tip on this software. I have been looking for a place to download it for a long time, since I am professionally engaged in video editing, and I really need it for work, but it so happened that I am experiencing financial difficulties and cannot afford to purchase the official version, so I tried to find a free one for a long time ... PowerDirector - the latest version of the simplest home video editing software. With it you can make a professional movie with high quality sound, video, professional effects and transitions. By the way, on YouTube you can find excellent video tutorials on working with PowerDirector, in which the authors explain step by step the nuances of working with this program. I managed to find there about 25 thousand videos on this topic and I noticed that under such videos there are always comments with about 14 thousand likes! I am sure this is because the authors of such comments resort to using the services https://soclikes.com/ in order to wind up likes on YouTube comments.

    ReplyDelete
  78. نقل عفش الكويت
    نقل عفش الكويت – نقل عفش حولى – مصطفى 99003870 – نقل عفش – شركة نقل عفش – رقم نقل عفش – نقل عفش رخيص – نقل اثاث
    الاتصال 99003870

    ReplyDelete
  79. ΕΠΙΣΚΕΥΗ ΤΗΛΕΟΡΑΣΗΣ
    Είτε τη χρησιμοποιείς ελάχιστα, είτε είσαι από εκείνους που παρακολουθούν τηλεόραση κάθε μέρα, είναι πολύ πιθανό κάποια στιγμή να χρειαστεί να αντιμετωπίσεις μια βλάβη τηλεόρασης. Τη στιγμή εκείνη, πολλοί άνθρωποι προσπαθούν να διορθώσουν το πρόβλημα μόνοι τους. Και εκεί είναι το σημείο που μπορούν να πάνε όλα στραβά.

    ReplyDelete
  80. شركة نقل عفش
    نقل عفش رخيص – نقل عفش بالكويت – مصطفى 99003870 – نقل عفش حولي – نقل اثاث ايكيا – نقل عفش السالمية – شركة نقل اثاث – نقل عفش الاحمدي – نقل عفش

    ReplyDelete
  81. There are numerous approaches to watch Netflix on your TV – all you require is a gadget with the Netflix application! The Netflix application is accessible on many Smart TVs, game consoles, streaming media players, set-top boxes, and Blu-beam players. You can discover more data about viable gadgets and brands at netflix.com/activate, and to enroll visit www.netflix.com/activate or read on to check whether your TV is now Netflix-prepared.

    www.netflix.com register
    www.netflix.com/redeem
    netflix activation code
    netflix.com.au/redeem
    netflix.com/tv8

    ReplyDelete
  82. thank you for publish great content.
    vizajobs Get the full Vizajobs experience. Basic Package. $70. Post 1 Job. Post 1 Job; Jobs last for 30 days; 24/7 Premium Support. Post Now. Corporate Package. 200 $.

    ReplyDelete
  83. thank you for publish great content.
    vizajobs Get the full Vizajobs experience. Basic Package. $70. Post 1 Job. Post 1 Job; Jobs last for 30 days; 24/7 Premium Support. Post Now. Corporate Package. 200 $.

    ReplyDelete
  84. thank you for publish great content.
    vizajobs Get the full Vizajobs experience. Basic Package. $70. Post 1 Job. Post 1 Job; Jobs last for 30 days; 24/7 Premium Support. Post Now. Corporate Package. 200 $.

    ReplyDelete
  85. SYNDESMOLOGIA KSILOU

    Η Nova Tecnica δραστηριοποιείται 20 και πλέον χρόνια στο χώρο των συστημάτων συνδεσμολογίας ξύλου με τα συστήματα σύνδεσης της ΚΝΑΡΡ ® προσφέροντας πρωτοποριακές λύσεις για τις δικές σας δημιουργικές εμπνεύσεις. Η παλέτα των προϊόντων μας περιλαμβάνει μη ορατά, αποσυναρμολογούμενα καθώς και αυτοτανυόμενα εξαρτήματα σύνδεσης για ευρύτατο φάσμα εφαρμογών, από τη επιπλοποιία και την κατασκευή υαλοστασίων και προσόψεων έως και την ξύλινη δόμηση.

    ReplyDelete
  86. digital marketing agency london
    Before indulging into any project, we always investigate the business as well as its competitors to get a better idea of where it stands and how it will grow better. We believe that the success of every business lies in knowing about its market competition in depth. It’s our task to do research work and pick out your challengers. This is to form a firm base for your business’s long term growth and prosperity.

    ReplyDelete
  87. Moonrock cannabis
    When you shop with us, you can be absolutely confident that every single product we offer is of the highest quality. We’re believers in the importance of quality, so we offer products only from the best sources. What you put into your body determines the state of your health, so we’ve ensured that every product you can find on our store has been produced with careful hands, bred using the best practices, and has gone through various levels of review to confirm its quality. Our customers can have complete confidence that they’re getting the very best in USA weed. The quality from our online weed dispensary is what separates us from other vendors.

    ReplyDelete
  88. Berkeley Assets Reviews
    Attitude is everything as far as I’m concerned. Having the right mind-set is so important,” he tells CEO Middle East. “Mind-set develops the right culture. You can learn facts and train skills, but with the right mind-set from the beginning, a great working culture is the end product.

    ReplyDelete
  89. Very Interesting Post, thanks for sharing, you can also check some other post related to cash app contact number.

    ReplyDelete
  90. McAfee antivirus on any device. Once you visit the retail store like Walmart and Best buy, they issue you a retail card that holds McAfee 25 digit activation code in its backside mcafe.com/activate , macfee.com/activate

    Microsoft 365 or Office on your computer. If you are using any other Microsoft service such as OneDrive, Outlook, Skype, or Xbox Live, it means you already have an account that you can use for any Microsoft activity.
    Microsoft365.com/setup
    Microsoft365.com/setup
    Microsoft365.com/setup
    Microsoft365.com/setup

    ReplyDelete
  91. Microsoft is the software pack for students and families. It offers a group of apps, including Microsoft office 2019 word, Excel and PowerPoint.
    Office.com/setup Home & Student 2019
    Office.com/setup Home Student 2019

    ReplyDelete
  92. Le serrurier Châtenay-Malabry dispose d’un service d’urgence de 7 jours / 7 et assure des interventions rapides pour tout dépannage, tôt le matin et tard le soir. Nos équipes de professionnels de l’urgence sont toujours prêts à se rendre sur place pour débloquer la serrure de votre porte ou extraire la clé cassée de votre serrure. Lorsque vos clés sont coincées dans la serrure ou que vous ne trouvez pas la clé de votre maison, serrurier 92290 se charge de vous faire entrer rapidement chez vous. Pour les maisons, la plupart des serrures sont les plus fréquentes et nous pouvons facilement, en quelques minutes seulement, vous les remplacer si celles-ci sont endommagées suite à un cambriolage
    Serrurier Bourg-la-Reine

    ReplyDelete
  93. krzesła do jadalni

    Nie istnieje uniwersalna recepta na piękno, również w obrębie designu. Prawdziwa sztuka tkwi w detalach, dlatego warto mieć na nie oko. Usiądź wygodnie i rozejrzyj się po naszych projektach. Relaks, wygoda, swoboda, poczucie estetyki – w nodedeco łatwiej zrozumieć te pojęcia.

    biuro@nodedeco.pl
    tel.: +48 731 278 888

    ReplyDelete
  94. Motorkleding
    MotorkledingStore.nl is dé plaats waar u alle merken, kleuren, soorten en maten motor­kleding vindt. Bent u op zoek naar een all-weather motorpak, een race-overall of juist een stoer motorpak? Bij ons bent u aan het juiste adres voor alles op het gebied van motorcross- en enduro-kleding, evenals de laatste mode op motorgebied.

    ReplyDelete
  95. Go through the canon.com/ijsetup webpage, click Set Up and start the Canon ij printer setup process. If you have a Canon inkjet printer (wireless or wired), setting up the complete printer is easy. To download canon printer drivers and install them on your pc, visit canon.con/ijsetup and follow instructions.

    ReplyDelete
  96. Going through 123.hp.com/laserjet provides wired and wireless, both Hp printer software download options, hence if you have hp wireless printer, connect it with below steps;
    Turn on the hp printer and connect to home WiFi also, see the available WiFi networks on display.
    Choose one network to manage Wireless LAN Settings, then locate the SSID from the router.
    Enter the password, open printer settings, and add your printer from the window setting.
    Once done, visit 123.hp.com/laserjet to download and install the HP printer drivers.

    ReplyDelete
  97. Thanks for uploading this article. Techno mobile is best mobile with best specifications. Now you can get new mobiles update with Vivo mobile price in Bangladesh

    ReplyDelete
  98. Go for multiple actions including lasejet installation, registration, and wireless connect, cartridge installation or more.123.hp.com/laserjet , 123.hp.com/laserjet , camps.intuit.com .

    ReplyDelete
  99. Norton is already on the list of best antivirus security that helps you manage your digital life anywhere norton.com/setup , norton.con/setup ,
    camps.intuit.com

    ReplyDelete