Pat the shrimp dry with paper towels and add to a large bowl. Season with garam masala, garlic powder, ginger, turmeric, chili powder, and salt.
Heat a large, heavy bottom skillet over medium-high heat and add in 1 tbsp olive oil. Cook shrimp in hot oil, until cooked through, and slightly blackened. You may need to cook in batches, as to not overcrowd the pan. Remove shrimp from pan and set aside, keep warm.
For The Sauce:
To the same pan, add the remaining 2 tbsp olive oil and butter. Cook the onion over medium heat, until soft and translucent, about 5 to 7 minutes. Add in the garlic and ginger, along with the garam masala, cumin, turmeric, ground coriander, paprika, salt and cayenne pepper. Cook until fragrant, about 30 to 45 seconds.
Pour in the tomato puree and water and bring the mixture to a simmer for about 3 minutes. Add in the heavy cream and stir until evenly combined, then add in the cooked shrimp and stir to coat.
Serve shrimp and sauce with rice and garnish with cilantro if desired. Enjoy!