diff --git a/include/neural-graphics-primitives/openxr_hmd.h b/include/neural-graphics-primitives/openxr_hmd.h
index fd2fc197f39c671417becd20c4fa2dcf7330987b..f31cecaaa0f8084c48a976ea70a47e9545b69dd1 100644
--- a/include/neural-graphics-primitives/openxr_hmd.h
+++ b/include/neural-graphics-primitives/openxr_hmd.h
@@ -47,24 +47,24 @@
 
 NGP_NAMESPACE_BEGIN
 
-enum class EnvironmentBlendMode {
+enum class EEnvironmentBlendMode {
 	Opaque = XR_ENVIRONMENT_BLEND_MODE_OPAQUE,
 	Additive = XR_ENVIRONMENT_BLEND_MODE_ADDITIVE,
 	AlphaBlend = XR_ENVIRONMENT_BLEND_MODE_ALPHA_BLEND,
 };
 
-inline std::string to_string(EnvironmentBlendMode mode) {
+inline std::string to_string(EEnvironmentBlendMode mode) {
 	switch (mode) {
-		case EnvironmentBlendMode::Opaque: return "Opaque";
-		case EnvironmentBlendMode::Additive: return "Additive";
-		case EnvironmentBlendMode::AlphaBlend: return "Blend";
+		case EEnvironmentBlendMode::Opaque: return "Opaque";
+		case EEnvironmentBlendMode::Additive: return "Additive";
+		case EEnvironmentBlendMode::AlphaBlend: return "Blend";
 		default: throw std::runtime_error{"Invalid blend mode."};
 	}
 }
 
 class OpenXRHMD {
 public:
-	enum class ControlFlow {
+	enum class EControlFlow {
 		Continue,
 		Restart,
 		Quit,
@@ -116,22 +116,22 @@ public:
 	void clear();
 
 	// poll events, handle state changes, return control flow information
-	ControlFlow poll_events();
+	EControlFlow poll_events();
 
 	// begin OpenXR frame, return views to render
 	FrameInfoPtr begin_frame();
 	// must be called for each begin_frame
 	void end_frame(FrameInfoPtr frame_info, float znear, float zfar);
 
-	void set_environment_blend_mode(EnvironmentBlendMode mode) {
+	void set_environment_blend_mode(EEnvironmentBlendMode mode) {
 		m_environment_blend_mode = mode;
 	}
 
-	EnvironmentBlendMode environment_blend_mode() const {
+	EEnvironmentBlendMode environment_blend_mode() const {
 		return m_environment_blend_mode;
 	}
 
-	const std::vector<EnvironmentBlendMode>& supported_environment_blend_modes() const {
+	const std::vector<EEnvironmentBlendMode>& supported_environment_blend_modes() const {
 		return m_supported_environment_blend_modes;
 	}
 
@@ -177,7 +177,7 @@ private:
 	void init_open_gl_shaders();
 
 	// session state change
-	void session_state_change(XrSessionState state, ControlFlow& flow);
+	void session_state_change(XrSessionState state, EControlFlow& flow);
 
 	std::shared_ptr<Buffer2D<uint8_t>> rasterize_hidden_area_mask(uint32_t view_index, const XrCompositionLayerProjectionView& view);
 	// system/instance
@@ -192,9 +192,9 @@ private:
 	XrViewConfigurationType m_view_configuration_type = {};
 	XrViewConfigurationProperties m_view_configuration_properties = {XR_TYPE_VIEW_CONFIGURATION_PROPERTIES};
 	std::vector<XrViewConfigurationView> m_view_configuration_views;
-	std::vector<EnvironmentBlendMode> m_supported_environment_blend_modes;
+	std::vector<EEnvironmentBlendMode> m_supported_environment_blend_modes;
 	std::vector<char> m_supported_environment_blend_modes_imgui_string;
-	EnvironmentBlendMode m_environment_blend_mode = EnvironmentBlendMode::Opaque;
+	EEnvironmentBlendMode m_environment_blend_mode = EEnvironmentBlendMode::Opaque;
 
 	// actions
 	std::array<XrPath, 2> m_hand_paths;
diff --git a/src/openxr_hmd.cu b/src/openxr_hmd.cu
index b8f64bbe6921f9d5e2925256483f70c01b064b6c..77b98cf99c2fcc3a95617e0a852920f4cae5bb8b 100644
--- a/src/openxr_hmd.cu
+++ b/src/openxr_hmd.cu
@@ -451,7 +451,7 @@ void OpenXRHMD::init_check_for_xr_blend_mode() {
 			tlog::info() << fmt::format("\t{}", XrEnumStr(supported_blend_modes[i]));
 		}
 
-		auto b = (EnvironmentBlendMode)supported_blend_modes[i];
+		auto b = (EEnvironmentBlendMode)supported_blend_modes[i];
 		m_supported_environment_blend_modes[i] = b;
 
 		auto b_str = to_string(b);
@@ -802,7 +802,7 @@ void OpenXRHMD::init_open_gl_shaders() {
 	}
 }
 
-void OpenXRHMD::session_state_change(XrSessionState state, ControlFlow& flow) {
+void OpenXRHMD::session_state_change(XrSessionState state, EControlFlow& flow) {
 	//tlog::info() << fmt::format("New session state {}", XrEnumStr(state));
 	switch (state) {
 		case XR_SESSION_STATE_READY: {
@@ -816,11 +816,11 @@ void OpenXRHMD::session_state_change(XrSessionState state, ControlFlow& flow) {
 			break;
 		}
 		case XR_SESSION_STATE_EXITING: {
-			flow = ControlFlow::Quit;
+			flow = EControlFlow::Quit;
 			break;
 		}
 		case XR_SESSION_STATE_LOSS_PENDING: {
-			flow = ControlFlow::Restart;
+			flow = EControlFlow::Restart;
 			break;
 		}
 		default: {
@@ -829,9 +829,9 @@ void OpenXRHMD::session_state_change(XrSessionState state, ControlFlow& flow) {
 	}
 }
 
-OpenXRHMD::ControlFlow OpenXRHMD::poll_events() {
+OpenXRHMD::EControlFlow OpenXRHMD::poll_events() {
 	bool more = true;
-	ControlFlow flow = ControlFlow::Continue;
+	EControlFlow flow = EControlFlow::Continue;
 	while (more) {
 		// poll events
 		XrEventDataBuffer event {XR_TYPE_EVENT_DATA_BUFFER, nullptr};
@@ -852,7 +852,7 @@ OpenXRHMD::ControlFlow OpenXRHMD::poll_events() {
 				}
 
 				case XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING: {
-					flow = ControlFlow::Restart;
+					flow = EControlFlow::Restart;
 					break;
 				}
 
@@ -1234,6 +1234,10 @@ void OpenXRHMD::end_frame(FrameInfoPtr frame_info, float znear, float zfar) {
 
 	XrCompositionLayerProjection layer{XR_TYPE_COMPOSITION_LAYER_PROJECTION};
 	layer.space = m_space;
+	if (m_environment_blend_mode != EEnvironmentBlendMode::Opaque) {
+		layer.layerFlags = XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT;
+	}
+
 	layer.viewCount = uint32_t(layer_projection_views.size());
 	layer.views = layer_projection_views.data();
 
diff --git a/src/testbed.cu b/src/testbed.cu
index 34c0ccd90c1446283616fd3d2db32e92d40849e1..b39de3185772ffa59742c0d3c743505409c498d7 100644
--- a/src/testbed.cu
+++ b/src/testbed.cu
@@ -2872,7 +2872,7 @@ void Testbed::update_vr_performance_settings() {
 		// If the environment is blended in (such as in XR/AR applications),
 		// DLSS causes jittering at object sillhouettes (doesn't deal well with alpha),
 		// and hence stays disabled.
-		m_dlss = (blend_mode == EnvironmentBlendMode::Opaque) && m_dlss_provider;
+		m_dlss = (blend_mode == EEnvironmentBlendMode::Opaque) && m_dlss_provider;
 
 		// Foveated rendering is similarly vital in getting high performance without losing
 		// resolution in the middle of the view.
@@ -2887,7 +2887,7 @@ void Testbed::update_vr_performance_settings() {
 		// set background color to transparent and, in spherical_checkerboard_kernel(...),
 		// blend a checkerboard. If the user desires a solid background nonetheless, they can
 		// set the background color to have an alpha value of 1.0 manually via the GUI or via Python.
-		m_render_transparency_as_checkerboard = (blend_mode == EnvironmentBlendMode::Opaque);
+		m_render_transparency_as_checkerboard = (blend_mode == EEnvironmentBlendMode::Opaque);
 	} else {
 		m_dlss = (m_testbed_mode == ETestbedMode::Nerf) && m_dlss_provider;
 		m_foveated_rendering = false;