diff --git a/cmake/externals/serverless-content/CMakeLists.txt b/cmake/externals/serverless-content/CMakeLists.txt
index 782e50dc27..b4cacd8f90 100644
--- a/cmake/externals/serverless-content/CMakeLists.txt
+++ b/cmake/externals/serverless-content/CMakeLists.txt
@@ -4,8 +4,8 @@ set(EXTERNAL_NAME serverless-content)
 
 ExternalProject_Add(
   ${EXTERNAL_NAME}
-  URL http://cdn.highfidelity.com/content-sets/serverless-tutorial-RC70v2.zip
-  URL_MD5 35fcc8e635e71d0b00a08455a2582448
+  URL http://cdn.highfidelity.com/content-sets/serverless-tutorial-RC72.zip
+  URL_MD5 b1d8faf9266bfbff88274a484911eb99
   CONFIGURE_COMMAND ""
   BUILD_COMMAND ""
   INSTALL_COMMAND ""
diff --git a/cmake/macros/AutoScribeShader.cmake b/cmake/macros/AutoScribeShader.cmake
index fec51fefc7..1d1e5970d9 100755
--- a/cmake/macros/AutoScribeShader.cmake
+++ b/cmake/macros/AutoScribeShader.cmake
@@ -8,290 +8,224 @@
 #  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
 #
 
-function(global_append varName varValue) 
-    get_property(LOCAL_LIST GLOBAL PROPERTY ${varName})
-    list(APPEND LOCAL_LIST ${varValue})
-    set_property(GLOBAL PROPERTY ${varName} ${LOCAL_LIST})
-endfunction()
-
-function(AUTOSCRIBE_SHADER SHADER_FILE)
-  # Grab include files
-  foreach(includeFile  ${ARGN})
-    list(APPEND SHADER_INCLUDE_FILES ${includeFile})
-  endforeach()
-
-  foreach(SHADER_INCLUDE ${SHADER_INCLUDE_FILES})
-    get_filename_component(INCLUDE_DIR ${SHADER_INCLUDE} PATH)
-    list(APPEND SHADER_INCLUDES_PATHS ${INCLUDE_DIR})
-  endforeach()
-
-  #Extract the unique include shader paths
-  set(INCLUDES ${HIFI_LIBRARIES_SHADER_INCLUDE_FILES})
-  #message(${TARGET_NAME} Hifi for includes ${INCLUDES})
-  foreach(EXTRA_SHADER_INCLUDE ${INCLUDES})
-    list(APPEND SHADER_INCLUDES_PATHS ${EXTRA_SHADER_INCLUDE})
-  endforeach()
-
-  list(REMOVE_DUPLICATES SHADER_INCLUDES_PATHS)
-  #message(ready for includes ${SHADER_INCLUDES_PATHS})
-
-  # make the scribe include arguments
-  set(SCRIBE_INCLUDES)
-  foreach(INCLUDE_PATH ${SHADER_INCLUDES_PATHS})
-    set(SCRIBE_INCLUDES ${SCRIBE_INCLUDES} -I ${INCLUDE_PATH}/)
-  endforeach()
-
-  # Define the final name of the generated shader file
-  get_filename_component(SHADER_TARGET ${SHADER_FILE} NAME_WE)
-  get_filename_component(SHADER_EXT ${SHADER_FILE} EXT)
-  if(SHADER_EXT STREQUAL .slv)
-    set(SHADER_TYPE vert)
-  elseif(${SHADER_EXT} STREQUAL .slf)
-    set(SHADER_TYPE frag)
-  elseif(${SHADER_EXT} STREQUAL .slg)
-    set(SHADER_TYPE geom)
-  endif()
-  file(MAKE_DIRECTORY "${SHADERS_DIR}/${SHADER_LIB}")
-  set(SHADER_TARGET "${SHADERS_DIR}/${SHADER_LIB}/${SHADER_TARGET}.${SHADER_TYPE}")
-  set(SCRIBE_COMMAND scribe)
-
-  # Target dependant Custom rule on the SHADER_FILE
-  if (APPLE)
-    set(GLPROFILE MAC_GL)
-  elseif (ANDROID)
-    set(GLPROFILE LINUX_GL)
-    set(SCRIBE_COMMAND ${NATIVE_SCRIBE})
-  elseif (UNIX)
-    set(GLPROFILE LINUX_GL)
-  else ()
-    set(GLPROFILE PC_GL)
-  endif()
-  set(SCRIBE_ARGS -T ${SHADER_TYPE} -D GLPROFILE ${GLPROFILE} ${SCRIBE_INCLUDES} -o ${SHADER_TARGET} ${SHADER_FILE})
-  add_custom_command(
-    OUTPUT ${SHADER_TARGET}
-    COMMAND ${SCRIBE_COMMAND} ${SCRIBE_ARGS} 
-    DEPENDS ${SHADER_FILE} ${SCRIBE_COMMAND} ${SHADER_INCLUDE_FILES}
-  )
-
-  #output the generated file name
-  set(AUTOSCRIBE_SHADER_RETURN ${SHADER_TARGET} PARENT_SCOPE)
-endfunction()
-
-macro(AUTOSCRIBE_APPEND_SHADER_SOURCES)
-    if (NOT("${ARGN}" STREQUAL "")) 
-        set_property(GLOBAL PROPERTY ${TARGET_NAME}_SHADER_SOURCES "${ARGN}")
-        global_append(GLOBAL_SHADER_LIBS ${TARGET_NAME})
-        global_append(GLOBAL_SHADER_SOURCES "${ARGN}")
-    endif()
-endmacro()
-
-macro(AUTOSCRIBE_SHADER_LIB)
-  unset(HIFI_LIBRARIES_SHADER_INCLUDE_FILES)
-  set(SRC_FOLDER "${CMAKE_SOURCE_DIR}/libraries/${TARGET_NAME}/src")
- 
-  file(GLOB_RECURSE SHADER_INCLUDE_FILES ${SRC_FOLDER}/*.slh)
-  file(GLOB_RECURSE SHADER_VERTEX_FILES ${SRC_FOLDER}/*.slv)
-  file(GLOB_RECURSE SHADER_FRAGMENT_FILES ${SRC_FOLDER}/*.slf)
-  file(GLOB_RECURSE SHADER_GEOMETRY_FILES ${SRC_FOLDER}/*.slg)
-  file(GLOB_RECURSE SHADER_COMPUTE_FILES ${SRC_FOLDER}/*.slc)
-  
-  unset(SHADER_SOURCE_FILES)
-  list(APPEND SHADER_SOURCE_FILES ${SHADER_VERTEX_FILES})
-  list(APPEND SHADER_SOURCE_FILES ${SHADER_FRAGMENT_FILES})
-  list(APPEND SHADER_SOURCE_FILES ${SHADER_GEOMETRY_FILES})
-  list(APPEND SHADER_SOURCE_FILES ${SHADER_COMPUTE_FILES})
-  
-  unset(LOCAL_SHADER_SOURCES)
-  list(APPEND LOCAL_SHADER_SOURCES ${SHADER_SOURCE_FILES})
-  list(APPEND LOCAL_SHADER_SOURCES ${SHADER_INCLUDE_FILES})
-
-  AUTOSCRIBE_APPEND_SHADER_SOURCES(${LOCAL_SHADER_SOURCES})
-  
-  file(RELATIVE_PATH RELATIVE_LIBRARY_DIR_PATH ${CMAKE_CURRENT_SOURCE_DIR} "${HIFI_LIBRARY_DIR}")
-  foreach(HIFI_LIBRARY ${ARGN})
-    list(APPEND HIFI_LIBRARIES_SHADER_INCLUDE_FILES ${HIFI_LIBRARY_DIR}/${HIFI_LIBRARY}/src)
-  endforeach()
-endmacro()
-
-macro(AUTOSCRIBE_PROGRAM)
-    set(oneValueArgs NAME VERTEX FRAGMENT GEOMETRY COMPUTE)
-    cmake_parse_arguments(AUTOSCRIBE_PROGRAM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
-    if (NOT (DEFINED AUTOSCRIBE_PROGRAM_NAME))
-        message(FATAL_ERROR "Programs must have a name and both a vertex and fragment shader")
-    endif()
-    if (NOT (DEFINED AUTOSCRIBE_PROGRAM_VERTEX))
-        set(AUTOSCRIBE_PROGRAM_VERTEX ${AUTOSCRIBE_PROGRAM_NAME})
-    endif()
-    if (NOT (DEFINED AUTOSCRIBE_PROGRAM_FRAGMENT))
-        set(AUTOSCRIBE_PROGRAM_FRAGMENT ${AUTOSCRIBE_PROGRAM_NAME})
-    endif()
-
-    if (NOT (${AUTOSCRIBE_PROGRAM_VERTEX} MATCHES ".*::.*"))
-        set(AUTOSCRIBE_PROGRAM_VERTEX "vertex::${AUTOSCRIBE_PROGRAM_VERTEX}")
-    endif()
-    if (NOT (${AUTOSCRIBE_PROGRAM_FRAGMENT} MATCHES ".*::.*"))
-        set(AUTOSCRIBE_PROGRAM_FRAGMENT "fragment::${AUTOSCRIBE_PROGRAM_FRAGMENT}")
-    endif()
-
-    unset(AUTOSCRIBE_PROGRAM_MAP)
-    list(APPEND AUTOSCRIBE_PROGRAM_MAP AUTOSCRIBE_PROGRAM_VERTEX)
-    list(APPEND AUTOSCRIBE_PROGRAM_MAP ${AUTOSCRIBE_PROGRAM_VERTEX})
-    list(APPEND AUTOSCRIBE_PROGRAM_MAP AUTOSCRIBE_PROGRAM_FRAGMENT)
-    list(APPEND AUTOSCRIBE_PROGRAM_MAP ${AUTOSCRIBE_PROGRAM_FRAGMENT})
-    global_append(${TARGET_NAME}_PROGRAMS ${AUTOSCRIBE_PROGRAM_NAME})
-    set_property(GLOBAL PROPERTY ${AUTOSCRIBE_PROGRAM_NAME} "${AUTOSCRIBE_PROGRAM_MAP}")
-endmacro()
-
-macro(unpack_map)
-    set(MAP_VAR "${ARGN}")
-    list(LENGTH MAP_VAR MAP_SIZE)
-    MATH(EXPR MAP_ENTRY_RANGE "(${MAP_SIZE} / 2) - 1")
-    foreach(INDEX RANGE ${MAP_ENTRY_RANGE})
-        MATH(EXPR INDEX_NAME "${INDEX} * 2")
-        MATH(EXPR INDEX_VAL "${INDEX_NAME} + 1")
-        list(GET MAP_VAR ${INDEX_NAME} VAR_NAME)
-        list(GET MAP_VAR ${INDEX_VAL} VAR_VAL)
-        set(${VAR_NAME} ${VAR_VAL})
+macro(AUTOSCRIBE_SHADER)
+    message(STATUS "Processing shader ${SHADER_FILE}")
+    unset(SHADER_INCLUDE_FILES)
+    # Grab include files
+    foreach(includeFile  ${ARGN})
+        list(APPEND SHADER_INCLUDE_FILES ${includeFile})
     endforeach()
-endmacro()
 
-macro(PROCESS_SHADER_FILE)
-    AUTOSCRIBE_SHADER(${SHADER} ${ALL_SHADER_HEADERS} ${HIFI_LIBRARIES_SHADER_INCLUDE_FILES})
-    file(TO_CMAKE_PATH "${AUTOSCRIBE_SHADER_RETURN}" AUTOSCRIBE_GENERATED_FILE)
-    set_property(SOURCE ${AUTOSCRIBE_GENERATED_FILE} PROPERTY SKIP_AUTOMOC ON)
-    source_group("Compiled/${SHADER_LIB}" FILES ${AUTOSCRIBE_GENERATED_FILE})
-    set(REFLECTED_SHADER "${AUTOSCRIBE_GENERATED_FILE}.json")
+    foreach(SHADER_INCLUDE ${SHADER_INCLUDE_FILES})
+        get_filename_component(INCLUDE_DIR ${SHADER_INCLUDE} PATH)
+        list(APPEND SHADER_INCLUDES_PATHS ${INCLUDE_DIR})
+    endforeach()
+
+    list(REMOVE_DUPLICATES SHADER_INCLUDES_PATHS)
+    #Extract the unique include shader paths
+    set(INCLUDES ${HIFI_LIBRARIES_SHADER_INCLUDE_FILES})
+    foreach(EXTRA_SHADER_INCLUDE ${INCLUDES})
+        list(APPEND SHADER_INCLUDES_PATHS ${EXTRA_SHADER_INCLUDE})
+    endforeach()
+
+    list(REMOVE_DUPLICATES SHADER_INCLUDES_PATHS)
+    #message(ready for includes ${SHADER_INCLUDES_PATHS})
+
+    # make the scribe include arguments
+    set(SCRIBE_INCLUDES)
+    foreach(INCLUDE_PATH ${SHADER_INCLUDES_PATHS})
+        set(SCRIBE_INCLUDES ${SCRIBE_INCLUDES} -I ${INCLUDE_PATH}/)
+    endforeach()
+
+    # Define the final name of the generated shader file
+    get_filename_component(SHADER_NAME ${SHADER_FILE} NAME_WE)
+    get_filename_component(SHADER_EXT ${SHADER_FILE} EXT)
+    if(SHADER_EXT STREQUAL .slv)
+        set(SHADER_TYPE vert)
+    elseif(${SHADER_EXT} STREQUAL .slf)
+        set(SHADER_TYPE frag)
+    elseif(${SHADER_EXT} STREQUAL .slg)
+        set(SHADER_TYPE geom)
+    endif()
+    file(MAKE_DIRECTORY "${SHADERS_DIR}/${SHADER_LIB}")
+    set(SHADER_TARGET "${SHADERS_DIR}/${SHADER_LIB}/${SHADER_NAME}.${SHADER_TYPE}")
+    file(TO_CMAKE_PATH "${SHADER_TARGET}" COMPILED_SHADER)
+    set(REFLECTED_SHADER "${COMPILED_SHADER}.json") 
+
+    set(SCRIBE_ARGS -T ${SHADER_TYPE} -D GLPROFILE ${GLPROFILE} ${SCRIBE_INCLUDES} -o ${SHADER_TARGET} ${SHADER_FILE})
+
+    # Generate the frag/vert file
+    add_custom_command(
+        OUTPUT ${SHADER_TARGET}
+        COMMAND ${SCRIBE_COMMAND} ${SCRIBE_ARGS} 
+        DEPENDS ${SHADER_FILE} ${SCRIBE_COMMAND} ${SHADER_INCLUDE_FILES})
+
+    # Generate the json reflection
+    # FIXME move to spirv-cross for this task after we have spirv compatible shaders
+    add_custom_command(
+        OUTPUT ${REFLECTED_SHADER}
+        COMMAND ${SHREFLECT_COMMAND} ${COMPILED_SHADER}
+        DEPENDS ${SHREFLECT_DEPENDENCY} ${COMPILED_SHADER})
+
+    #output the generated file name
+    source_group("Compiled/${SHADER_LIB}" FILES ${COMPILED_SHADER})
+    set_property(SOURCE ${COMPILED_SHADER} PROPERTY SKIP_AUTOMOC ON)
+    list(APPEND COMPILED_SHADERS ${COMPILED_SHADER})
+
     source_group("Reflected/${SHADER_LIB}" FILES ${REFLECTED_SHADER})
-    list(APPEND COMPILED_SHADERS ${AUTOSCRIBE_GENERATED_FILE})
-    get_filename_component(ENUM_NAME ${SHADER} NAME_WE)
-    string(CONCAT SHADER_ENUMS "${SHADER_ENUMS}" "${ENUM_NAME} = ${SHADER_COUNT},\n")
+    list(APPEND REFLECTED_SHADERS ${REFLECTED_SHADER})
+
+    string(CONCAT SHADER_QRC "${SHADER_QRC}" "<file alias=\"${SHADER_COUNT}\">${COMPILED_SHADER}</file>\n")
+    string(CONCAT SHADER_QRC "${SHADER_QRC}" "<file alias=\"${SHADER_COUNT}_reflection\">${REFLECTED_SHADER}</file>\n")
+    string(CONCAT SHADER_ENUMS "${SHADER_ENUMS}" "${SHADER_NAME} = ${SHADER_COUNT},\n")
+
     MATH(EXPR SHADER_COUNT "${SHADER_COUNT}+1")
 endmacro()
 
-macro(AUTOSCRIBE_SHADER_FINISH)
-    get_property(GLOBAL_SHADER_LIBS GLOBAL PROPERTY GLOBAL_SHADER_LIBS)
-    list(REMOVE_DUPLICATES GLOBAL_SHADER_LIBS)
-    set(SHADER_COUNT 0)
-    set(PROGRAM_COUNT 0)
+macro(AUTOSCRIBE_SHADER_LIB)
+    if (NOT ("${TARGET_NAME}" STREQUAL "shaders"))
+        message(FATAL_ERROR "AUTOSCRIBE_SHADER_LIB can only be used by the shaders library")
+    endif()
+
+    list(APPEND HIFI_LIBRARIES_SHADER_INCLUDE_FILES "${CMAKE_SOURCE_DIR}/libraries/${SHADER_LIB}/src") 
+    string(REGEX REPLACE "[-]" "_" SHADER_NAMESPACE ${SHADER_LIB})
+    string(CONCAT SHADER_ENUMS "${SHADER_ENUMS}" "namespace ${SHADER_NAMESPACE} {\n")
+    set(SRC_FOLDER "${CMAKE_SOURCE_DIR}/libraries/${ARGN}/src")
+
+    # Process the scribe headers
+    file(GLOB_RECURSE SHADER_INCLUDE_FILES ${SRC_FOLDER}/*.slh)
+    if(SHADER_INCLUDE_FILES)
+        source_group("${SHADER_LIB}/Headers" FILES ${SHADER_INCLUDE_FILES})
+        list(APPEND ALL_SHADER_HEADERS ${SHADER_INCLUDE_FILES})
+        list(APPEND ALL_SCRIBE_SHADERS ${SHADER_INCLUDE_FILES})
+    endif()
+
+    file(GLOB_RECURSE SHADER_VERTEX_FILES ${SRC_FOLDER}/*.slv)
+    if (SHADER_VERTEX_FILES)
+        source_group("${SHADER_LIB}/Vertex" FILES ${SHADER_VERTEX_FILES})
+        list(APPEND ALL_SCRIBE_SHADERS ${SHADER_VERTEX_FILES})
+        string(CONCAT SHADER_ENUMS "${SHADER_ENUMS}" "namespace vertex { enum {\n")
+        foreach(SHADER_FILE ${SHADER_VERTEX_FILES}) 
+            AUTOSCRIBE_SHADER(${ALL_SHADER_HEADERS})
+        endforeach()
+        string(CONCAT SHADER_ENUMS "${SHADER_ENUMS}" "}; } // vertex \n")
+    endif()
+
+    file(GLOB_RECURSE SHADER_FRAGMENT_FILES ${SRC_FOLDER}/*.slf)
+    if (SHADER_FRAGMENT_FILES)
+        source_group("${SHADER_LIB}/Fragment" FILES ${SHADER_FRAGMENT_FILES})
+        list(APPEND ALL_SCRIBE_SHADERS ${SHADER_FRAGMENT_FILES})
+        string(CONCAT SHADER_ENUMS "${SHADER_ENUMS}" "namespace fragment { enum {\n")
+        foreach(SHADER_FILE ${SHADER_FRAGMENT_FILES}) 
+            AUTOSCRIBE_SHADER(${ALL_SHADER_HEADERS})
+        endforeach()
+        string(CONCAT SHADER_ENUMS "${SHADER_ENUMS}" "}; } // fragment \n")
+    endif()
+    
+    # FIXME add support for geometry, compute and tesselation shaders
+    #file(GLOB_RECURSE SHADER_GEOMETRY_FILES ${SRC_FOLDER}/*.slg)
+    #file(GLOB_RECURSE SHADER_COMPUTE_FILES ${SRC_FOLDER}/*.slc)
+
+    # the programs
+    file(GLOB_RECURSE SHADER_PROGRAM_FILES ${SRC_FOLDER}/*.slp)
+    if (SHADER_PROGRAM_FILES)
+        source_group("${SHADER_LIB}/Program" FILES ${SHADER_PROGRAM_FILES})
+        list(APPEND ALL_SCRIBE_SHADERS ${SHADER_PROGRAM_FILES})
+        string(CONCAT SHADER_ENUMS "${SHADER_ENUMS}" "namespace program { enum {\n")
+        foreach(PROGRAM_FILE ${SHADER_PROGRAM_FILES})
+            get_filename_component(PROGRAM_NAME ${PROGRAM_FILE} NAME_WE)
+            set(AUTOSCRIBE_PROGRAM_FRAGMENT ${PROGRAM_NAME})
+            file(READ ${PROGRAM_FILE} PROGRAM_CONFIG)
+            set(AUTOSCRIBE_PROGRAM_VERTEX ${PROGRAM_NAME})
+            set(AUTOSCRIBE_PROGRAM_FRAGMENT ${PROGRAM_NAME})
+
+            if (NOT("${PROGRAM_CONFIG}" STREQUAL ""))
+                string(REGEX MATCH ".*VERTEX +([_\\:A-Z0-9a-z]+)" MVERT ${PROGRAM_CONFIG})
+                if (CMAKE_MATCH_1)
+                    set(AUTOSCRIBE_PROGRAM_VERTEX ${CMAKE_MATCH_1})
+                endif()
+                string(REGEX MATCH ".*FRAGMENT +([_:A-Z0-9a-z]+)" MFRAG ${PROGRAM_CONFIG})
+                if (CMAKE_MATCH_1)
+                    set(AUTOSCRIBE_PROGRAM_FRAGMENT ${CMAKE_MATCH_1})
+                endif()
+            endif()
+
+            if (NOT (${AUTOSCRIBE_PROGRAM_VERTEX} MATCHES ".*::.*"))
+                set(AUTOSCRIBE_PROGRAM_VERTEX "vertex::${AUTOSCRIBE_PROGRAM_VERTEX}")
+            endif()
+            if (NOT (${AUTOSCRIBE_PROGRAM_FRAGMENT} MATCHES ".*::.*"))
+                set(AUTOSCRIBE_PROGRAM_FRAGMENT "fragment::${AUTOSCRIBE_PROGRAM_FRAGMENT}")
+            endif()
+
+            set(PROGRAM_ENTRY "${PROGRAM_NAME} = (${AUTOSCRIBE_PROGRAM_VERTEX} << 16) |  ${AUTOSCRIBE_PROGRAM_FRAGMENT},\n")
+            string(CONCAT SHADER_ENUMS "${SHADER_ENUMS}" "${PROGRAM_ENTRY}")
+            string(CONCAT SHADER_PROGRAMS_ARRAY "${SHADER_PROGRAMS_ARRAY} ${SHADER_NAMESPACE}::program::${PROGRAM_NAME},\n")
+        endforeach()
+        string(CONCAT SHADER_ENUMS "${SHADER_ENUMS}" "}; } // program \n")
+    endif()
+
+    # Finish the shader enums 
+    string(CONCAT SHADER_ENUMS "${SHADER_ENUMS}" "} // namespace ${SHADER_NAMESPACE}\n")
+    #file(RELATIVE_PATH RELATIVE_LIBRARY_DIR_PATH ${CMAKE_CURRENT_SOURCE_DIR} "${HIFI_LIBRARY_DIR}")
+    #foreach(HIFI_LIBRARY ${ARGN})
+    #list(APPEND HIFI_LIBRARIES_SHADER_INCLUDE_FILES ${HIFI_LIBRARY_DIR}/${HIFI_LIBRARY}/src)
+    #endforeach()
+    #endif()
+endmacro()
+
+macro(AUTOSCRIBE_SHADER_LIBS)
+    set(SCRIBE_COMMAND scribe)
+    set(SHREFLECT_COMMAND shreflect)
+    set(SHREFLECT_DEPENDENCY shreflect)
+
+    # Target dependant Custom rule on the SHADER_FILE
+    if (ANDROID)
+        set(GLPROFILE LINUX_GL)
+        set(SCRIBE_COMMAND ${NATIVE_SCRIBE})
+        set(SHREFLECT_COMMAND ${NATIVE_SHREFLECT})
+        unset(SHREFLECT_DEPENDENCY)
+    else() 
+        if (APPLE)
+            set(GLPROFILE MAC_GL)
+        elseif(UNIX)
+            set(GLPROFILE LINUX_GL)
+        else()
+            set(GLPROFILE PC_GL)
+        endif()
+    endif()
+
+    # Start the shader IDs
+    set(SHADER_COUNT 1)
     set(SHADERS_DIR "${CMAKE_CURRENT_BINARY_DIR}/shaders")
     set(SHADER_ENUMS "")
     file(MAKE_DIRECTORY ${SHADERS_DIR})
 
-    unset(COMPILED_SHADERS)
-    foreach(SHADER_LIB ${GLOBAL_SHADER_LIBS})
-        get_property(LIB_SHADER_SOURCES GLOBAL PROPERTY ${SHADER_LIB}_SHADER_SOURCES)
-        get_property(LIB_PROGRAMS GLOBAL PROPERTY ${SHADER_LIB}_PROGRAMS)
-        list(REMOVE_DUPLICATES LIB_SHADER_SOURCES)
-        string(REGEX REPLACE "[-]" "_" SHADER_NAMESPACE ${SHADER_LIB})
-        list(APPEND HIFI_LIBRARIES_SHADER_INCLUDE_FILES "${CMAKE_SOURCE_DIR}/libraries/${SHADER_LIB}/src") 
-
-        unset(VERTEX_SHADERS)
-        unset(FRAGMENT_SHADERS)
-        unset(SHADER_HEADERS)
-
-        foreach(SHADER_FILE ${LIB_SHADER_SOURCES})
-            if (SHADER_FILE MATCHES ".*\\.slv")
-                list(APPEND VERTEX_SHADERS ${SHADER_FILE})
-            elseif (SHADER_FILE MATCHES ".*\\.slf")
-                list(APPEND FRAGMENT_SHADERS ${SHADER_FILE})
-            elseif (SHADER_FILE MATCHES ".*\\.slh")
-                list(APPEND SHADER_HEADERS ${SHADER_FILE})
-            endif()
-        endforeach()
-
-        if (DEFINED SHADER_HEADERS)
-            list(REMOVE_DUPLICATES SHADER_HEADERS)
-            source_group("${SHADER_LIB}/Headers" FILES ${SHADER_HEADERS})
-            list(APPEND ALL_SHADER_HEADERS ${SHADER_HEADERS})
-            list(APPEND ALL_SCRIBE_SHADERS ${SHADER_HEADERS})
-        endif()
-
-        string(CONCAT SHADER_ENUMS "${SHADER_ENUMS}" "namespace ${SHADER_NAMESPACE} {\n")
-        if (DEFINED VERTEX_SHADERS)
-            list(REMOVE_DUPLICATES VERTEX_SHADERS)
-            source_group("${SHADER_LIB}/Vertex" FILES ${VERTEX_SHADERS})
-            list(APPEND ALL_SCRIBE_SHADERS ${VERTEX_SHADERS})
-            string(CONCAT SHADER_ENUMS "${SHADER_ENUMS}" "namespace vertex { enum {\n")
-            foreach(SHADER ${VERTEX_SHADERS}) 
-                process_shader_file()
-            endforeach()
-            string(CONCAT SHADER_ENUMS "${SHADER_ENUMS}" "}; } // vertex \n")
-        endif()
-
-        if (DEFINED FRAGMENT_SHADERS)
-            list(REMOVE_DUPLICATES FRAGMENT_SHADERS)
-            source_group("${SHADER_LIB}/Fragment" FILES ${FRAGMENT_SHADERS})
-            list(APPEND ALL_SCRIBE_SHADERS ${FRAGMENT_SHADERS})
-            string(CONCAT SHADER_ENUMS "${SHADER_ENUMS}" "namespace fragment { enum {\n")
-            foreach(SHADER ${FRAGMENT_SHADERS}) 
-                process_shader_file()
-            endforeach()
-            string(CONCAT SHADER_ENUMS "${SHADER_ENUMS}" "}; } // fragment \n")
-        endif()
-
-        if (DEFINED LIB_PROGRAMS)
-            string(CONCAT SHADER_ENUMS "${SHADER_ENUMS}" "namespace program { enum {\n")
-            foreach(LIB_PROGRAM ${LIB_PROGRAMS})
-                get_property(LIB_PROGRAM_MAP GLOBAL PROPERTY ${LIB_PROGRAM})
-                unpack_map(${LIB_PROGRAM_MAP})
-                string(CONCAT SHADER_ENUMS "${SHADER_ENUMS}" "${LIB_PROGRAM} = (${AUTOSCRIBE_PROGRAM_VERTEX} << 16) |  ${AUTOSCRIBE_PROGRAM_FRAGMENT},\n")
-                MATH(EXPR PROGRAM_COUNT "${PROGRAM_COUNT}+1")
-                list(APPEND SHADER_ALL_PROGRAMS "${SHADER_NAMESPACE}::program::${LIB_PROGRAM}")
-            endforeach()
-            string(CONCAT SHADER_ENUMS "${SHADER_ENUMS}" "}; } // program \n")
-        endif()
-        string(CONCAT SHADER_ENUMS "${SHADER_ENUMS}" "} // namespace ${SHADER_NAMESPACE}\n")
+    #
+    # Scribe generation & program defintiion
+    # 
+    foreach(SHADER_LIB ${ARGN})
+        AUTOSCRIBE_SHADER_LIB(${SHADER_LIB})
     endforeach()
 
-    set(SHADER_PROGRAMS_ARRAY "")
-    foreach(SHADER_PROGRAM ${SHADER_ALL_PROGRAMS})
-        string(CONCAT SHADER_PROGRAMS_ARRAY "${SHADER_PROGRAMS_ARRAY}" "    ${SHADER_PROGRAM},\n")
-    endforeach()
+    # Generate the library files
+    configure_file(
+        ShaderEnums.cpp.in 
+        ${CMAKE_CURRENT_BINARY_DIR}/shaders/ShaderEnums.cpp)
+    configure_file(
+        ShaderEnums.h.in 
+        ${CMAKE_CURRENT_BINARY_DIR}/shaders/ShaderEnums.h)
+    configure_file(
+        shaders.qrc.in 
+        ${CMAKE_CURRENT_BINARY_DIR}/shaders.qrc)
 
-    set(SHREFLECT_COMMAND shreflect)
-    set(SHREFLECT_DEPENDENCY shreflect)
-    if (ANDROID)
-        set(SHREFLECT_COMMAND ${NATIVE_SHREFLECT})
-        unset(SHREFLECT_DEPENDENCY)
-    endif()
-
-    set(SHADER_COUNT 0)
-    foreach(COMPILED_SHADER ${COMPILED_SHADERS})
-        set(REFLECTED_SHADER "${COMPILED_SHADER}.json")
-        list(APPEND COMPILED_SHADER_REFLECTIONS ${REFLECTED_SHADER})
-        string(CONCAT SHADER_QRC "${SHADER_QRC}" "<file alias=\"${SHADER_COUNT}\">${COMPILED_SHADER}</file>\n")
-        string(CONCAT SHADER_QRC "${SHADER_QRC}" "<file alias=\"${SHADER_COUNT}_reflection\">${REFLECTED_SHADER}</file>\n")
-        MATH(EXPR SHADER_COUNT "${SHADER_COUNT}+1")
-        add_custom_command(
-           OUTPUT ${REFLECTED_SHADER}
-           COMMAND ${SHREFLECT_COMMAND} ${COMPILED_SHADER}
-           DEPENDS ${SHREFLECT_DEPENDENCY} ${COMPILED_SHADER}
-       )
-    endforeach()
+    set(AUTOSCRIBE_SHADER_LIB_SRC "${CMAKE_CURRENT_BINARY_DIR}/shaders/ShaderEnums.h;${CMAKE_CURRENT_BINARY_DIR}/shaders/ShaderEnums.cpp")
+    set(QT_RESOURCES_FILE ${CMAKE_CURRENT_BINARY_DIR}/shaders.qrc)
     
     # Custom targets required to force generation of the shaders via scribe
     add_custom_target(scribe_shaders SOURCES ${ALL_SCRIBE_SHADERS})
     add_custom_target(compiled_shaders SOURCES ${COMPILED_SHADERS})
-    add_custom_target(reflected_shaders SOURCES ${COMPILED_SHADER_REFLECTIONS})
+    add_custom_target(reflected_shaders SOURCES ${REFLECTED_SHADERS})
     set_target_properties(scribe_shaders PROPERTIES FOLDER "Shaders")
     set_target_properties(compiled_shaders PROPERTIES FOLDER "Shaders")
     set_target_properties(reflected_shaders PROPERTIES FOLDER "Shaders")
-
-    configure_file(
-        ShaderEnums.cpp.in 
-        ${CMAKE_CURRENT_BINARY_DIR}/shaders/ShaderEnums.cpp
-    )
-    configure_file(
-        ShaderEnums.h.in 
-        ${CMAKE_CURRENT_BINARY_DIR}/shaders/ShaderEnums.h
-    )
-    configure_file(
-        shaders.qrc.in 
-        ${CMAKE_CURRENT_BINARY_DIR}/shaders.qrc
-    )
-    set(AUTOSCRIBE_SHADER_LIB_SRC "${CMAKE_CURRENT_BINARY_DIR}/shaders/ShaderEnums.h;${CMAKE_CURRENT_BINARY_DIR}/shaders/ShaderEnums.cpp")
-    list(APPEND AUTOSCRIBE_SHADER_LIB_SRC ${COMPILED_SHADERS}) 
-    set(QT_RESOURCES_FILE ${CMAKE_CURRENT_BINARY_DIR}/shaders.qrc)
-    get_property(GLOBAL_SHADER_SOURCES GLOBAL PROPERTY GLOBAL_SHADER_SOURCES)
-    list(REMOVE_DUPLICATES GLOBAL_SHADER_SOURCES)
 endmacro()
diff --git a/cmake/macros/SetPackagingParameters.cmake b/cmake/macros/SetPackagingParameters.cmake
index c40691c632..0f8975e9b5 100644
--- a/cmake/macros/SetPackagingParameters.cmake
+++ b/cmake/macros/SetPackagingParameters.cmake
@@ -51,6 +51,10 @@ macro(SET_PACKAGING_PARAMETERS)
       set(USE_STABLE_GLOBAL_SERVICES 1)
     endif ()
 
+    if (NOT BYPASS_SIGNING)
+      set(BYPASS_SIGNING 0)
+    endif ()      
+
   elseif (RELEASE_TYPE STREQUAL "PR")
     set(DEPLOY_PACKAGE TRUE)
     set(PR_BUILD 1)
diff --git a/cmake/templates/CPackProperties.cmake.in b/cmake/templates/CPackProperties.cmake.in
index 68fa098508..1d7effd18f 100644
--- a/cmake/templates/CPackProperties.cmake.in
+++ b/cmake/templates/CPackProperties.cmake.in
@@ -50,3 +50,4 @@ set(SERVER_COMPONENT_CONDITIONAL "@SERVER_COMPONENT_CONDITIONAL@")
 set(CLIENT_COMPONENT_CONDITIONAL "@CLIENT_COMPONENT_CONDITIONAL@")
 set(INSTALLER_TYPE "@INSTALLER_TYPE@")
 set(APP_USER_MODEL_ID "@APP_USER_MODEL_ID@")
+set(BYPASS_SIGNING "@BYPASS_SIGNING@")
diff --git a/cmake/templates/NSIS.template.in b/cmake/templates/NSIS.template.in
index c51e4ffd72..7f6884f478 100644
--- a/cmake/templates/NSIS.template.in
+++ b/cmake/templates/NSIS.template.in
@@ -130,7 +130,11 @@
     ; The Inner invocation has written an uninstaller binary for us.
     ; We need to sign it if it's a production or PR build.
     !if @PRODUCTION_BUILD@ == 1
-      !system '"@SIGNTOOL_EXECUTABLE@" sign /fd sha256 /f %HF_PFX_FILE% /p %HF_PFX_PASSPHRASE% /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /td SHA256 $%TEMP%\@UNINSTALLER_NAME@' = 0
+      !if @BYPASS_SIGNING@ == 1
+        !warning "BYPASS_SIGNING set - installer will not be signed"
+      !else
+        !system '"@SIGNTOOL_EXECUTABLE@" sign /fd sha256 /f %HF_PFX_FILE% /p %HF_PFX_PASSPHRASE% /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /td SHA256 $%TEMP%\@UNINSTALLER_NAME@' = 0
+      !endif
     !endif
 
     ; Good.  Now we can carry on writing the real installer.
diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp
index c6b387c937..57c4692794 100644
--- a/domain-server/src/DomainServer.cpp
+++ b/domain-server/src/DomainServer.cpp
@@ -2439,8 +2439,8 @@ bool DomainServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url
         }
 
     } else if (connection->requestOperation() == QNetworkAccessManager::DeleteOperation) {
-        const QString ALL_NODE_DELETE_REGEX_STRING = QString("\\%1\\/?$").arg(URI_NODES);
-        const QString NODE_DELETE_REGEX_STRING = QString("\\%1\\/(%2)\\/$").arg(URI_NODES).arg(UUID_REGEX_STRING);
+        const QString ALL_NODE_DELETE_REGEX_STRING = QString("%1/?$").arg(URI_NODES);
+        const QString NODE_DELETE_REGEX_STRING = QString("%1/(%2)$").arg(URI_NODES).arg(UUID_REGEX_STRING);
 
         QRegExp allNodesDeleteRegex(ALL_NODE_DELETE_REGEX_STRING);
         QRegExp nodeDeleteRegex(NODE_DELETE_REGEX_STRING);
diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp
index 45ef336333..06217688a4 100644
--- a/interface/src/Application.cpp
+++ b/interface/src/Application.cpp
@@ -266,19 +266,10 @@ class RenderEventHandler : public QObject {
     using Parent = QObject;
     Q_OBJECT
 public:
-    RenderEventHandler(QOpenGLContext* context) {
-        _renderContext = new OffscreenGLCanvas();
-        _renderContext->setObjectName("RenderContext");
-        _renderContext->create(context);
-        if (!_renderContext->makeCurrent()) {
-            qFatal("Unable to make rendering context current");
-        }
-        _renderContext->doneCurrent();
-
+    RenderEventHandler() {
         // Transfer to a new thread
         moveToNewNamedThread(this, "RenderThread", [this](QThread* renderThread) {
             hifi::qt::addBlockingForbiddenThread("Render", renderThread);
-            _renderContext->moveToThreadWithContext(renderThread);
             qApp->_lastTimeRendered.start();
         }, std::bind(&RenderEventHandler::initialize, this), QThread::HighestPriority);
     }
@@ -288,9 +279,6 @@ private:
         setObjectName("Render");
         PROFILE_SET_THREAD_NAME("Render");
         setCrashAnnotation("render_thread_id", std::to_string((size_t)QThread::currentThreadId()));
-        if (!_renderContext->makeCurrent()) {
-            qFatal("Unable to make rendering context current on render thread");
-        }
     }
 
     void render() {
@@ -311,8 +299,6 @@ private:
         }
         return Parent::event(event);
     }
-
-    OffscreenGLCanvas* _renderContext { nullptr };
 };
 
 
@@ -2695,26 +2681,14 @@ void Application::initializeGL() {
         }
     }
 
-    // Build an offscreen GL context for the main thread.
-    _offscreenContext = new OffscreenGLCanvas();
-    _offscreenContext->setObjectName("MainThreadContext");
-    _offscreenContext->create(_glWidget->qglContext());
-    if (!_offscreenContext->makeCurrent()) {
-        qFatal("Unable to make offscreen context current");
-    }
-    _offscreenContext->doneCurrent();
-    _offscreenContext->setThreadContext();
+    _renderEventHandler = new RenderEventHandler();
 
+    // Build an offscreen GL context for the main thread.
     _glWidget->makeCurrent();
     glClearColor(0.2f, 0.2f, 0.2f, 1);
     glClear(GL_COLOR_BUFFER_BIT);
     _glWidget->swapBuffers();
 
-    // Move the GL widget context to the render event handler thread
-    _renderEventHandler = new RenderEventHandler(_glWidget->qglContext());
-    if (!_offscreenContext->makeCurrent()) {
-        qFatal("Unable to make offscreen context current");
-    }
 
     // Create the GPU backend
 
@@ -2727,9 +2701,6 @@ void Application::initializeGL() {
     _gpuContext = std::make_shared<gpu::Context>();
 
     DependencyManager::get<TextureCache>()->setGPUContext(_gpuContext);
-
-    // Restore the default main thread context
-    _offscreenContext->makeCurrent();
 }
 
 static const QString SPLASH_SKYBOX{ "{\"ProceduralEntity\":{ \"version\":2, \"shaderUrl\":\"qrc:///shaders/splashSkybox.frag\" } }" };
@@ -2768,8 +2739,6 @@ void Application::initializeDisplayPlugins() {
     // Submit a default frame to render until the engine starts up
     updateRenderArgs(0.0f);
 
-    _offscreenContext->makeCurrent();
-
 #define ENABLE_SPLASH_FRAME 0
 #if ENABLE_SPLASH_FRAME
     {
@@ -2811,8 +2780,6 @@ void Application::initializeDisplayPlugins() {
 }
 
 void Application::initializeRenderEngine() {
-    _offscreenContext->makeCurrent();
-
     // FIXME: on low end systems os the shaders take up to 1 minute to compile, so we pause the deadlock watchdog thread.
     DeadlockWatchdogThread::withPause([&] {
         // Set up the render engine
@@ -4562,7 +4529,6 @@ void Application::idle() {
         if (offscreenUi->size() != fromGlm(uiSize)) {
             qCDebug(interfaceapp) << "Device pixel ratio changed, triggering resize to " << uiSize;
             offscreenUi->resize(fromGlm(uiSize));
-            _offscreenContext->makeCurrent();
         }
     }
 
@@ -4620,10 +4586,6 @@ void Application::idle() {
     bool showWarnings = getLogger()->extraDebugging();
     PerformanceWarning warn(showWarnings, "idle()");
 
-    if (!_offscreenContext->makeCurrent()) {
-        qFatal("Unable to make main thread context current");
-    }
-
     {
         _gameWorkload.updateViews(_viewFrustum, getMyAvatar()->getHeadPosition());
         _gameWorkload._engine->run();
@@ -4951,7 +4913,6 @@ QVector<EntityItemID> Application::pasteEntities(float x, float y, float z) {
 }
 
 void Application::init() {
-    _offscreenContext->makeCurrent();
     // Make sure Login state is up to date
     DependencyManager::get<DialogsManager>()->toggleLoginDialog();
     if (!DISABLE_DEFERRED) {
@@ -8342,7 +8303,7 @@ QOpenGLContext* Application::getPrimaryContext() {
 }
 
 bool Application::makeRenderingContextCurrent() {
-    return _offscreenContext->makeCurrent();
+    return true;
 }
 
 bool Application::isForeground() const {
diff --git a/interface/src/Application.h b/interface/src/Application.h
index 66388afbde..742cf075f6 100644
--- a/interface/src/Application.h
+++ b/interface/src/Application.h
@@ -81,7 +81,6 @@
 
 #include "Sound.h"
 
-class OffscreenGLCanvas;
 class GLCanvas;
 class FaceTracker;
 class MainWindow;
@@ -554,7 +553,6 @@ private:
 
     bool _previousSessionCrashed;
 
-    OffscreenGLCanvas* _offscreenContext { nullptr };
     DisplayPluginPointer _displayPlugin;
     QMetaObject::Connection _displayPluginPresentConnection;
     mutable std::mutex _displayPluginLock;
diff --git a/libraries/avatars-renderer/CMakeLists.txt b/libraries/avatars-renderer/CMakeLists.txt
index a70c8294d5..e6b6986e7b 100644
--- a/libraries/avatars-renderer/CMakeLists.txt
+++ b/libraries/avatars-renderer/CMakeLists.txt
@@ -1,5 +1,4 @@
 set(TARGET_NAME avatars-renderer)
-AUTOSCRIBE_SHADER_LIB(gpu graphics render render-utils)
 setup_hifi_library(Network Script)
 link_hifi_libraries(shared gpu graphics animation model-networking script-engine render render-utils image trackers entities-renderer)
 include_hifi_library_headers(avatars)
diff --git a/libraries/display-plugins/CMakeLists.txt b/libraries/display-plugins/CMakeLists.txt
index 529ef4c921..0674c9fd92 100644
--- a/libraries/display-plugins/CMakeLists.txt
+++ b/libraries/display-plugins/CMakeLists.txt
@@ -1,5 +1,4 @@
 set(TARGET_NAME display-plugins)
-AUTOSCRIBE_SHADER_LIB(gpu display-plugins)
 setup_hifi_library(Gui)
 link_hifi_libraries(shared shaders plugins ui-plugins gl ui render-utils ${PLATFORM_GL_BACKEND})
 include_hifi_library_headers(gpu)
diff --git a/libraries/display-plugins/src/display-plugins/InterleavedSrgbToLinear.slp b/libraries/display-plugins/src/display-plugins/InterleavedSrgbToLinear.slp
new file mode 100644
index 0000000000..c2c4bfbebd
--- /dev/null
+++ b/libraries/display-plugins/src/display-plugins/InterleavedSrgbToLinear.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawUnitQuadTexcoord
diff --git a/libraries/display-plugins/src/display-plugins/SrgbToLinear.slp b/libraries/display-plugins/src/display-plugins/SrgbToLinear.slp
new file mode 100644
index 0000000000..c2c4bfbebd
--- /dev/null
+++ b/libraries/display-plugins/src/display-plugins/SrgbToLinear.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawUnitQuadTexcoord
diff --git a/libraries/entities-renderer/src/entities-renderer/paintStroke.slp b/libraries/entities-renderer/src/entities-renderer/paintStroke.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/entities-renderer/src/entities-renderer/polyvox.slp b/libraries/entities-renderer/src/entities-renderer/polyvox.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/entities-renderer/src/entities-renderer/polyvox_fade.slp b/libraries/entities-renderer/src/entities-renderer/polyvox_fade.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/entities-renderer/src/entities-renderer/textured_particle.slp b/libraries/entities-renderer/src/entities-renderer/textured_particle.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/gpu/src/gpu/drawColor.slp b/libraries/gpu/src/gpu/drawColor.slp
new file mode 100644
index 0000000000..1c81242fed
--- /dev/null
+++ b/libraries/gpu/src/gpu/drawColor.slp
@@ -0,0 +1,3 @@
+VERTEX DrawTransformVertexPosition
+FRAGMENT DrawColor
+r
diff --git a/libraries/gpu/src/gpu/drawNothing.slp b/libraries/gpu/src/gpu/drawNothing.slp
new file mode 100644
index 0000000000..22e40db8fc
--- /dev/null
+++ b/libraries/gpu/src/gpu/drawNothing.slp
@@ -0,0 +1,2 @@
+VERTEX DrawVertexPosition
+FRAGMENT DrawNada
diff --git a/libraries/gpu/src/gpu/drawTexture.slp b/libraries/gpu/src/gpu/drawTexture.slp
new file mode 100644
index 0000000000..e04be84618
--- /dev/null
+++ b/libraries/gpu/src/gpu/drawTexture.slp
@@ -0,0 +1,2 @@
+VERTEX DrawUnitQuadTexcoord
+FRAGMENT DrawTexture
diff --git a/libraries/gpu/src/gpu/drawTextureOpaqueTexcoordRect.slp b/libraries/gpu/src/gpu/drawTextureOpaqueTexcoordRect.slp
new file mode 100644
index 0000000000..9b08a99e18
--- /dev/null
+++ b/libraries/gpu/src/gpu/drawTextureOpaqueTexcoordRect.slp
@@ -0,0 +1,2 @@
+VERTEX DrawTexcoordRectTransformUnitQuad
+FRAGMENT DrawTextureOpaque
diff --git a/libraries/gpu/src/gpu/drawTransformUnitQuadTextureOpaque.slp b/libraries/gpu/src/gpu/drawTransformUnitQuadTextureOpaque.slp
new file mode 100644
index 0000000000..5c76582568
--- /dev/null
+++ b/libraries/gpu/src/gpu/drawTransformUnitQuadTextureOpaque.slp
@@ -0,0 +1,2 @@
+VERTEX DrawTransformUnitQuad
+FRAGMENT DrawTextureOpaque
diff --git a/libraries/gpu/src/gpu/drawUnitQuatTextureOpaque.slp b/libraries/gpu/src/gpu/drawUnitQuatTextureOpaque.slp
new file mode 100644
index 0000000000..2b03c79f32
--- /dev/null
+++ b/libraries/gpu/src/gpu/drawUnitQuatTextureOpaque.slp
@@ -0,0 +1,2 @@
+VERTEX DrawUnitQuadTexcoord
+FRAGMENT DrawTextureOpaque
diff --git a/libraries/graphics/src/graphics/skybox.slp b/libraries/graphics/src/graphics/skybox.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render-utils/src/render-utils/animdebugdraw.slp b/libraries/render-utils/src/render-utils/animdebugdraw.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render-utils/src/render-utils/bloomApply.slp b/libraries/render-utils/src/render-utils/bloomApply.slp
new file mode 100644
index 0000000000..2fd542f895
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/bloomApply.slp
@@ -0,0 +1,2 @@
+VERTEX gpu::vertex::DrawTransformUnitQuad
+FRAGMENT BloomApply
diff --git a/libraries/render-utils/src/render-utils/bloomThreshold.slp b/libraries/render-utils/src/render-utils/bloomThreshold.slp
new file mode 100644
index 0000000000..9b39c9fb5c
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/bloomThreshold.slp
@@ -0,0 +1,2 @@
+VERTEX gpu::vertex::DrawTransformUnitQuad
+FRAGMENT BloomThreshold
diff --git a/libraries/render-utils/src/render-utils/directional_ambient_light.slp b/libraries/render-utils/src/render-utils/directional_ambient_light.slp
new file mode 100644
index 0000000000..3aeca942ab
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/directional_ambient_light.slp
@@ -0,0 +1 @@
+VERTEX deferred_light
diff --git a/libraries/render-utils/src/render-utils/directional_ambient_light_shadow.slp b/libraries/render-utils/src/render-utils/directional_ambient_light_shadow.slp
new file mode 100644
index 0000000000..3aeca942ab
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/directional_ambient_light_shadow.slp
@@ -0,0 +1 @@
+VERTEX deferred_light
diff --git a/libraries/render-utils/src/render-utils/directional_skybox_light.slp b/libraries/render-utils/src/render-utils/directional_skybox_light.slp
new file mode 100644
index 0000000000..3aeca942ab
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/directional_skybox_light.slp
@@ -0,0 +1 @@
+VERTEX deferred_light
diff --git a/libraries/render-utils/src/render-utils/directional_skybox_light_shadow.slp b/libraries/render-utils/src/render-utils/directional_skybox_light_shadow.slp
new file mode 100644
index 0000000000..3aeca942ab
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/directional_skybox_light_shadow.slp
@@ -0,0 +1 @@
+VERTEX deferred_light
diff --git a/libraries/render-utils/src/render-utils/drawWorkloadProxy.slp b/libraries/render-utils/src/render-utils/drawWorkloadProxy.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render-utils/src/render-utils/drawWorkloadView.slp b/libraries/render-utils/src/render-utils/drawWorkloadView.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render-utils/src/render-utils/forward_model.slp b/libraries/render-utils/src/render-utils/forward_model.slp
new file mode 100644
index 0000000000..81ac672062
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/forward_model.slp
@@ -0,0 +1 @@
+VERTEX model
diff --git a/libraries/render-utils/src/render-utils/forward_model_normal_map.slp b/libraries/render-utils/src/render-utils/forward_model_normal_map.slp
new file mode 100644
index 0000000000..c50be6285b
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/forward_model_normal_map.slp
@@ -0,0 +1 @@
+VERTEX model_normal_map
diff --git a/libraries/render-utils/src/render-utils/forward_model_normal_map_translucent.slp b/libraries/render-utils/src/render-utils/forward_model_normal_map_translucent.slp
new file mode 100644
index 0000000000..0979918b98
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/forward_model_normal_map_translucent.slp
@@ -0,0 +1,2 @@
+VERTEX model_normal_map
+FRAGMENT forward_model_translucent
diff --git a/libraries/render-utils/src/render-utils/forward_model_translucent.slp b/libraries/render-utils/src/render-utils/forward_model_translucent.slp
new file mode 100644
index 0000000000..81ac672062
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/forward_model_translucent.slp
@@ -0,0 +1 @@
+VERTEX model
diff --git a/libraries/render-utils/src/render-utils/forward_model_unlit.slp b/libraries/render-utils/src/render-utils/forward_model_unlit.slp
new file mode 100644
index 0000000000..81ac672062
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/forward_model_unlit.slp
@@ -0,0 +1 @@
+VERTEX model
diff --git a/libraries/render-utils/src/render-utils/forward_simple_textured.slp b/libraries/render-utils/src/render-utils/forward_simple_textured.slp
new file mode 100644
index 0000000000..10e6b388c4
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/forward_simple_textured.slp
@@ -0,0 +1 @@
+VERTEX simple
diff --git a/libraries/render-utils/src/render-utils/forward_simple_textured_transparent.slp b/libraries/render-utils/src/render-utils/forward_simple_textured_transparent.slp
new file mode 100644
index 0000000000..10e6b388c4
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/forward_simple_textured_transparent.slp
@@ -0,0 +1 @@
+VERTEX simple
diff --git a/libraries/render-utils/src/render-utils/forward_simple_textured_unlit.slp b/libraries/render-utils/src/render-utils/forward_simple_textured_unlit.slp
new file mode 100644
index 0000000000..10e6b388c4
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/forward_simple_textured_unlit.slp
@@ -0,0 +1 @@
+VERTEX simple
diff --git a/libraries/render-utils/src/render-utils/forward_skin_model.slp b/libraries/render-utils/src/render-utils/forward_skin_model.slp
new file mode 100644
index 0000000000..962cf69ac2
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/forward_skin_model.slp
@@ -0,0 +1,2 @@
+VERTEX skin_model
+FRAGMENT forward_model
diff --git a/libraries/render-utils/src/render-utils/forward_skin_model_dq.slp b/libraries/render-utils/src/render-utils/forward_skin_model_dq.slp
new file mode 100644
index 0000000000..8fe119440f
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/forward_skin_model_dq.slp
@@ -0,0 +1,2 @@
+VERTEX skin_model_dq
+FRAGMENT forward_model
diff --git a/libraries/render-utils/src/render-utils/forward_skin_model_normal_map.slp b/libraries/render-utils/src/render-utils/forward_skin_model_normal_map.slp
new file mode 100644
index 0000000000..5bae303829
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/forward_skin_model_normal_map.slp
@@ -0,0 +1,2 @@
+VERTEX skin_model_normal_map
+FRAGMENT forward_model_normal_map
diff --git a/libraries/render-utils/src/render-utils/forward_skin_model_normal_map_dq.slp b/libraries/render-utils/src/render-utils/forward_skin_model_normal_map_dq.slp
new file mode 100644
index 0000000000..551b8367c7
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/forward_skin_model_normal_map_dq.slp
@@ -0,0 +1,2 @@
+VERTEX skin_model_normal_map_dq
+FRAGMENT forward_model_normal_map
diff --git a/libraries/render-utils/src/render-utils/forward_skin_translucent.slp b/libraries/render-utils/src/render-utils/forward_skin_translucent.slp
new file mode 100644
index 0000000000..1468d52428
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/forward_skin_translucent.slp
@@ -0,0 +1,2 @@
+VERTEX skin_model
+FRAGMENT forward_model_translucent
diff --git a/libraries/render-utils/src/render-utils/forward_skin_translucent_dq.slp b/libraries/render-utils/src/render-utils/forward_skin_translucent_dq.slp
new file mode 100644
index 0000000000..688bf51ba2
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/forward_skin_translucent_dq.slp
@@ -0,0 +1,2 @@
+VERTEX skin_model_dq
+FRAGMENT forward_model_translucent
diff --git a/libraries/render-utils/src/render-utils/forward_skin_translucent_normal_map.slp b/libraries/render-utils/src/render-utils/forward_skin_translucent_normal_map.slp
new file mode 100644
index 0000000000..fe3db07670
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/forward_skin_translucent_normal_map.slp
@@ -0,0 +1,2 @@
+VERTEX skin_model_normal_map
+FRAGMENT forward_model_translucent
diff --git a/libraries/render-utils/src/render-utils/forward_skin_translucent_normal_map_dq.slp b/libraries/render-utils/src/render-utils/forward_skin_translucent_normal_map_dq.slp
new file mode 100644
index 0000000000..2012a77e89
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/forward_skin_translucent_normal_map_dq.slp
@@ -0,0 +1,2 @@
+VERTEX skin_model_normal_map_dq
+FRAGMENT forward_model_translucent
diff --git a/libraries/render-utils/src/render-utils/fxaa_blend.slp b/libraries/render-utils/src/render-utils/fxaa_blend.slp
new file mode 100644
index 0000000000..c2c4bfbebd
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/fxaa_blend.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawUnitQuadTexcoord
diff --git a/libraries/render-utils/src/render-utils/glowLine.slp b/libraries/render-utils/src/render-utils/glowLine.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render-utils/src/render-utils/grid.slp b/libraries/render-utils/src/render-utils/grid.slp
new file mode 100644
index 0000000000..c81b208f63
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/grid.slp
@@ -0,0 +1 @@
+VERTEX standardTransformPNTC
diff --git a/libraries/render-utils/src/render-utils/haze.slp b/libraries/render-utils/src/render-utils/haze.slp
new file mode 100644
index 0000000000..805b855c8d
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/haze.slp
@@ -0,0 +1,2 @@
+VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord
+FRAGMENT Haze
diff --git a/libraries/render-utils/src/render-utils/highlight.slp b/libraries/render-utils/src/render-utils/highlight.slp
new file mode 100644
index 0000000000..269774815b
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/highlight.slp
@@ -0,0 +1,2 @@
+VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord
+FRAGMENT Highlight
diff --git a/libraries/render-utils/src/render-utils/highlight_aabox.slp b/libraries/render-utils/src/render-utils/highlight_aabox.slp
new file mode 100644
index 0000000000..a6f94fa285
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/highlight_aabox.slp
@@ -0,0 +1,2 @@
+VERTEX Highlight_aabox
+FRAGMENT nop
diff --git a/libraries/render-utils/src/render-utils/highlight_filled.slp b/libraries/render-utils/src/render-utils/highlight_filled.slp
new file mode 100644
index 0000000000..166afd74be
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/highlight_filled.slp
@@ -0,0 +1,2 @@
+VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord
+FRAGMENT Highlight_filled
diff --git a/libraries/render-utils/src/render-utils/hmd_ui.slp b/libraries/render-utils/src/render-utils/hmd_ui.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render-utils/src/render-utils/lightClusters_drawClusterContent.slp b/libraries/render-utils/src/render-utils/lightClusters_drawClusterContent.slp
new file mode 100644
index 0000000000..c2c4bfbebd
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/lightClusters_drawClusterContent.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawUnitQuadTexcoord
diff --git a/libraries/render-utils/src/render-utils/lightClusters_drawClusterFromDepth.slp b/libraries/render-utils/src/render-utils/lightClusters_drawClusterFromDepth.slp
new file mode 100644
index 0000000000..c2c4bfbebd
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/lightClusters_drawClusterFromDepth.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawUnitQuadTexcoord
diff --git a/libraries/render-utils/src/render-utils/lightClusters_drawGrid.slp b/libraries/render-utils/src/render-utils/lightClusters_drawGrid.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render-utils/src/render-utils/local_lights_drawOutline.slp b/libraries/render-utils/src/render-utils/local_lights_drawOutline.slp
new file mode 100644
index 0000000000..3aeca942ab
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/local_lights_drawOutline.slp
@@ -0,0 +1 @@
+VERTEX deferred_light
diff --git a/libraries/render-utils/src/render-utils/local_lights_shading.slp b/libraries/render-utils/src/render-utils/local_lights_shading.slp
new file mode 100644
index 0000000000..3aeca942ab
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/local_lights_shading.slp
@@ -0,0 +1 @@
+VERTEX deferred_light
diff --git a/libraries/render-utils/src/render-utils/model.slp b/libraries/render-utils/src/render-utils/model.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render-utils/src/render-utils/model_fade.slp b/libraries/render-utils/src/render-utils/model_fade.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render-utils/src/render-utils/model_lightmap.slp b/libraries/render-utils/src/render-utils/model_lightmap.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render-utils/src/render-utils/model_lightmap_fade.slp b/libraries/render-utils/src/render-utils/model_lightmap_fade.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render-utils/src/render-utils/model_lightmap_normal_map.slp b/libraries/render-utils/src/render-utils/model_lightmap_normal_map.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render-utils/src/render-utils/model_lightmap_normal_map_fade.slp b/libraries/render-utils/src/render-utils/model_lightmap_normal_map_fade.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render-utils/src/render-utils/model_normal_map.slp b/libraries/render-utils/src/render-utils/model_normal_map.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render-utils/src/render-utils/model_normal_map_fade.slp b/libraries/render-utils/src/render-utils/model_normal_map_fade.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render-utils/src/render-utils/model_shadow.slp b/libraries/render-utils/src/render-utils/model_shadow.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render-utils/src/render-utils/model_shadow_fade.slp b/libraries/render-utils/src/render-utils/model_shadow_fade.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render-utils/src/render-utils/model_translucent.slp b/libraries/render-utils/src/render-utils/model_translucent.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render-utils/src/render-utils/model_translucent_fade.slp b/libraries/render-utils/src/render-utils/model_translucent_fade.slp
new file mode 100644
index 0000000000..ba3a685b5b
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/model_translucent_fade.slp
@@ -0,0 +1 @@
+VERTEX model_fade
diff --git a/libraries/render-utils/src/render-utils/model_translucent_normal_map.slp b/libraries/render-utils/src/render-utils/model_translucent_normal_map.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render-utils/src/render-utils/model_translucent_normal_map_fade.slp b/libraries/render-utils/src/render-utils/model_translucent_normal_map_fade.slp
new file mode 100644
index 0000000000..01953a9891
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/model_translucent_normal_map_fade.slp
@@ -0,0 +1 @@
+VERTEX model_translucent_normal_map
diff --git a/libraries/render-utils/src/render-utils/model_translucent_unlit.slp b/libraries/render-utils/src/render-utils/model_translucent_unlit.slp
new file mode 100644
index 0000000000..81ac672062
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/model_translucent_unlit.slp
@@ -0,0 +1 @@
+VERTEX model
diff --git a/libraries/render-utils/src/render-utils/model_translucent_unlit_fade.slp b/libraries/render-utils/src/render-utils/model_translucent_unlit_fade.slp
new file mode 100644
index 0000000000..ba3a685b5b
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/model_translucent_unlit_fade.slp
@@ -0,0 +1 @@
+VERTEX model_fade
diff --git a/libraries/render-utils/src/render-utils/model_unlit.slp b/libraries/render-utils/src/render-utils/model_unlit.slp
new file mode 100644
index 0000000000..81ac672062
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/model_unlit.slp
@@ -0,0 +1 @@
+VERTEX model
diff --git a/libraries/render-utils/src/render-utils/model_unlit_fade.slp b/libraries/render-utils/src/render-utils/model_unlit_fade.slp
new file mode 100644
index 0000000000..ba3a685b5b
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/model_unlit_fade.slp
@@ -0,0 +1 @@
+VERTEX model_fade
diff --git a/libraries/render-utils/src/render-utils/parabola.slp b/libraries/render-utils/src/render-utils/parabola.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render-utils/src/render-utils/sdf_text3D.slp b/libraries/render-utils/src/render-utils/sdf_text3D.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render-utils/src/render-utils/sdf_text3D_transparent.slp b/libraries/render-utils/src/render-utils/sdf_text3D_transparent.slp
new file mode 100644
index 0000000000..3eea3a0da0
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/sdf_text3D_transparent.slp
@@ -0,0 +1 @@
+VERTEX sdf_text3D
diff --git a/libraries/render-utils/src/render-utils/simple.slp b/libraries/render-utils/src/render-utils/simple.slp
new file mode 100644
index 0000000000..8a6e2e4f99
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/simple.slp
@@ -0,0 +1 @@
+FRAGMENT forward_simple_textured
diff --git a/libraries/render-utils/src/render-utils/simpleTranslucent.slp b/libraries/render-utils/src/render-utils/simpleTranslucent.slp
new file mode 100644
index 0000000000..0163b09b84
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/simpleTranslucent.slp
@@ -0,0 +1,2 @@
+VERTEX simple
+FRAGMENT forward_simple_textured_transparent
diff --git a/libraries/render-utils/src/render-utils/simpleTranslucentUnlit.slp b/libraries/render-utils/src/render-utils/simpleTranslucentUnlit.slp
new file mode 100644
index 0000000000..f1d1ec39be
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/simpleTranslucentUnlit.slp
@@ -0,0 +1,2 @@
+VERTEX simple
+FRAGMENT simple_transparent_textured_unlit
diff --git a/libraries/render-utils/src/render-utils/simpleUnlit.slp b/libraries/render-utils/src/render-utils/simpleUnlit.slp
new file mode 100644
index 0000000000..ab491aa290
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/simpleUnlit.slp
@@ -0,0 +1,2 @@
+VERTEX simple
+FRAGMENT forward_simple_textured_unlit
diff --git a/libraries/render-utils/src/render-utils/simple_opaque_web_browser.slp b/libraries/render-utils/src/render-utils/simple_opaque_web_browser.slp
new file mode 100644
index 0000000000..10e6b388c4
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/simple_opaque_web_browser.slp
@@ -0,0 +1 @@
+VERTEX simple
diff --git a/libraries/render-utils/src/render-utils/simple_textured.slp b/libraries/render-utils/src/render-utils/simple_textured.slp
new file mode 100644
index 0000000000..10e6b388c4
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/simple_textured.slp
@@ -0,0 +1 @@
+VERTEX simple
diff --git a/libraries/render-utils/src/render-utils/simple_textured_fade.slp b/libraries/render-utils/src/render-utils/simple_textured_fade.slp
new file mode 100644
index 0000000000..9be0f525ad
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/simple_textured_fade.slp
@@ -0,0 +1 @@
+VERTEX simple_fade
diff --git a/libraries/render-utils/src/render-utils/simple_textured_unlit.slp b/libraries/render-utils/src/render-utils/simple_textured_unlit.slp
new file mode 100644
index 0000000000..10e6b388c4
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/simple_textured_unlit.slp
@@ -0,0 +1 @@
+VERTEX simple
diff --git a/libraries/render-utils/src/render-utils/simple_textured_unlit_fade.slp b/libraries/render-utils/src/render-utils/simple_textured_unlit_fade.slp
new file mode 100644
index 0000000000..9be0f525ad
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/simple_textured_unlit_fade.slp
@@ -0,0 +1 @@
+VERTEX simple_fade
diff --git a/libraries/render-utils/src/render-utils/simple_transparent_textured.slp b/libraries/render-utils/src/render-utils/simple_transparent_textured.slp
new file mode 100644
index 0000000000..10e6b388c4
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/simple_transparent_textured.slp
@@ -0,0 +1 @@
+VERTEX simple
diff --git a/libraries/render-utils/src/render-utils/simple_transparent_textured_fade.slp b/libraries/render-utils/src/render-utils/simple_transparent_textured_fade.slp
new file mode 100644
index 0000000000..9be0f525ad
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/simple_transparent_textured_fade.slp
@@ -0,0 +1 @@
+VERTEX simple_fade
diff --git a/libraries/render-utils/src/render-utils/simple_transparent_textured_unlit.slp b/libraries/render-utils/src/render-utils/simple_transparent_textured_unlit.slp
new file mode 100644
index 0000000000..10e6b388c4
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/simple_transparent_textured_unlit.slp
@@ -0,0 +1 @@
+VERTEX simple
diff --git a/libraries/render-utils/src/render-utils/simple_transparent_textured_unlit_fade.slp b/libraries/render-utils/src/render-utils/simple_transparent_textured_unlit_fade.slp
new file mode 100644
index 0000000000..9be0f525ad
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/simple_transparent_textured_unlit_fade.slp
@@ -0,0 +1 @@
+VERTEX simple_fade
diff --git a/libraries/render-utils/src/render-utils/simple_transparent_web_browser.slp b/libraries/render-utils/src/render-utils/simple_transparent_web_browser.slp
new file mode 100644
index 0000000000..10e6b388c4
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/simple_transparent_web_browser.slp
@@ -0,0 +1 @@
+VERTEX simple
diff --git a/libraries/render-utils/src/render-utils/skin_model.slp b/libraries/render-utils/src/render-utils/skin_model.slp
new file mode 100644
index 0000000000..d6466a6aa4
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/skin_model.slp
@@ -0,0 +1 @@
+FRAGMENT model
diff --git a/libraries/render-utils/src/render-utils/skin_model_dq.slp b/libraries/render-utils/src/render-utils/skin_model_dq.slp
new file mode 100644
index 0000000000..d6466a6aa4
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/skin_model_dq.slp
@@ -0,0 +1 @@
+FRAGMENT model
diff --git a/libraries/render-utils/src/render-utils/skin_model_fade.slp b/libraries/render-utils/src/render-utils/skin_model_fade.slp
new file mode 100644
index 0000000000..2b354b0832
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/skin_model_fade.slp
@@ -0,0 +1 @@
+FRAGMENT model_fade
diff --git a/libraries/render-utils/src/render-utils/skin_model_fade_dq.slp b/libraries/render-utils/src/render-utils/skin_model_fade_dq.slp
new file mode 100644
index 0000000000..2b354b0832
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/skin_model_fade_dq.slp
@@ -0,0 +1 @@
+FRAGMENT model_fade
diff --git a/libraries/render-utils/src/render-utils/skin_model_normal_map.slp b/libraries/render-utils/src/render-utils/skin_model_normal_map.slp
new file mode 100644
index 0000000000..c9d4016041
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/skin_model_normal_map.slp
@@ -0,0 +1 @@
+FRAGMENT model_normal_map
diff --git a/libraries/render-utils/src/render-utils/skin_model_normal_map_dq.slp b/libraries/render-utils/src/render-utils/skin_model_normal_map_dq.slp
new file mode 100644
index 0000000000..c9d4016041
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/skin_model_normal_map_dq.slp
@@ -0,0 +1 @@
+FRAGMENT model_normal_map
diff --git a/libraries/render-utils/src/render-utils/skin_model_normal_map_fade.slp b/libraries/render-utils/src/render-utils/skin_model_normal_map_fade.slp
new file mode 100644
index 0000000000..36e92e03e8
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/skin_model_normal_map_fade.slp
@@ -0,0 +1 @@
+FRAGMENT model_normal_map_fade
diff --git a/libraries/render-utils/src/render-utils/skin_model_normal_map_fade_dq.slp b/libraries/render-utils/src/render-utils/skin_model_normal_map_fade_dq.slp
new file mode 100644
index 0000000000..36e92e03e8
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/skin_model_normal_map_fade_dq.slp
@@ -0,0 +1 @@
+FRAGMENT model_normal_map_fade
diff --git a/libraries/render-utils/src/render-utils/skin_model_normal_map_translucent.slp b/libraries/render-utils/src/render-utils/skin_model_normal_map_translucent.slp
new file mode 100644
index 0000000000..c1b0ee2841
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/skin_model_normal_map_translucent.slp
@@ -0,0 +1,2 @@
+VERTEX skin_model_normal_map_fade
+FRAGMENT model_translucent_normal_map
diff --git a/libraries/render-utils/src/render-utils/skin_model_normal_map_translucent_dq.slp b/libraries/render-utils/src/render-utils/skin_model_normal_map_translucent_dq.slp
new file mode 100644
index 0000000000..58947f1bae
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/skin_model_normal_map_translucent_dq.slp
@@ -0,0 +1,2 @@
+VERTEX skin_model_normal_map_fade_dq
+FRAGMENT model_translucent_normal_map
diff --git a/libraries/render-utils/src/render-utils/skin_model_normal_map_translucent_fade.slp b/libraries/render-utils/src/render-utils/skin_model_normal_map_translucent_fade.slp
new file mode 100644
index 0000000000..6698d1b7be
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/skin_model_normal_map_translucent_fade.slp
@@ -0,0 +1,2 @@
+VERTEX skin_model_normal_map_fade
+FRAGMENT model_translucent_normal_map_fade
diff --git a/libraries/render-utils/src/render-utils/skin_model_normal_map_translucent_fade_dq.slp b/libraries/render-utils/src/render-utils/skin_model_normal_map_translucent_fade_dq.slp
new file mode 100644
index 0000000000..d2e938bd2a
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/skin_model_normal_map_translucent_fade_dq.slp
@@ -0,0 +1,2 @@
+VERTEX skin_model_normal_map_fade_dq
+FRAGMENT model_translucent_normal_map_fade
diff --git a/libraries/render-utils/src/render-utils/skin_model_shadow.slp b/libraries/render-utils/src/render-utils/skin_model_shadow.slp
new file mode 100644
index 0000000000..f356a5638d
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/skin_model_shadow.slp
@@ -0,0 +1 @@
+FRAGMENT model_shadow
diff --git a/libraries/render-utils/src/render-utils/skin_model_shadow_dq.slp b/libraries/render-utils/src/render-utils/skin_model_shadow_dq.slp
new file mode 100644
index 0000000000..f356a5638d
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/skin_model_shadow_dq.slp
@@ -0,0 +1 @@
+FRAGMENT model_shadow
diff --git a/libraries/render-utils/src/render-utils/skin_model_shadow_fade.slp b/libraries/render-utils/src/render-utils/skin_model_shadow_fade.slp
new file mode 100644
index 0000000000..f356a5638d
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/skin_model_shadow_fade.slp
@@ -0,0 +1 @@
+FRAGMENT model_shadow
diff --git a/libraries/render-utils/src/render-utils/skin_model_shadow_fade_dq.slp b/libraries/render-utils/src/render-utils/skin_model_shadow_fade_dq.slp
new file mode 100644
index 0000000000..a7e3f3328b
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/skin_model_shadow_fade_dq.slp
@@ -0,0 +1 @@
+FRAGMENT model_shadow_fade
diff --git a/libraries/render-utils/src/render-utils/skin_model_translucent.slp b/libraries/render-utils/src/render-utils/skin_model_translucent.slp
new file mode 100644
index 0000000000..469224f9fd
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/skin_model_translucent.slp
@@ -0,0 +1,2 @@
+VERTEX skin_model_fade
+FRAGMENT model_translucent
diff --git a/libraries/render-utils/src/render-utils/skin_model_translucent_dq.slp b/libraries/render-utils/src/render-utils/skin_model_translucent_dq.slp
new file mode 100644
index 0000000000..fdac5044ce
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/skin_model_translucent_dq.slp
@@ -0,0 +1,2 @@
+VERTEX skin_model_fade_dq
+FRAGMENT model_translucent
diff --git a/libraries/render-utils/src/render-utils/skin_model_translucent_fade.slp b/libraries/render-utils/src/render-utils/skin_model_translucent_fade.slp
new file mode 100644
index 0000000000..c6ff435342
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/skin_model_translucent_fade.slp
@@ -0,0 +1,2 @@
+VERTEX skin_model_fade
+FRAGMENT model_translucent_fade
diff --git a/libraries/render-utils/src/render-utils/skin_model_translucent_fade_dq.slp b/libraries/render-utils/src/render-utils/skin_model_translucent_fade_dq.slp
new file mode 100644
index 0000000000..7361a0fd71
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/skin_model_translucent_fade_dq.slp
@@ -0,0 +1,2 @@
+VERTEX skin_model_fade_dq
+FRAGMENT model_translucent_fade
diff --git a/libraries/render-utils/src/render-utils/ssao_debugOcclusion.slp b/libraries/render-utils/src/render-utils/ssao_debugOcclusion.slp
new file mode 100644
index 0000000000..d4d8ec4b01
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/ssao_debugOcclusion.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord
diff --git a/libraries/render-utils/src/render-utils/ssao_makeHorizontalBlur.slp b/libraries/render-utils/src/render-utils/ssao_makeHorizontalBlur.slp
new file mode 100644
index 0000000000..d4d8ec4b01
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/ssao_makeHorizontalBlur.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord
diff --git a/libraries/render-utils/src/render-utils/ssao_makeOcclusion.slp b/libraries/render-utils/src/render-utils/ssao_makeOcclusion.slp
new file mode 100644
index 0000000000..d4d8ec4b01
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/ssao_makeOcclusion.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord
diff --git a/libraries/render-utils/src/render-utils/ssao_makeVerticalBlur.slp b/libraries/render-utils/src/render-utils/ssao_makeVerticalBlur.slp
new file mode 100644
index 0000000000..d4d8ec4b01
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/ssao_makeVerticalBlur.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord
diff --git a/libraries/render-utils/src/render-utils/standardDrawTexture.slp b/libraries/render-utils/src/render-utils/standardDrawTexture.slp
new file mode 100644
index 0000000000..c81b208f63
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/standardDrawTexture.slp
@@ -0,0 +1 @@
+VERTEX standardTransformPNTC
diff --git a/libraries/render-utils/src/render-utils/standardDrawTextureNoBlend.slp b/libraries/render-utils/src/render-utils/standardDrawTextureNoBlend.slp
new file mode 100644
index 0000000000..c81b208f63
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/standardDrawTextureNoBlend.slp
@@ -0,0 +1 @@
+VERTEX standardTransformPNTC
diff --git a/libraries/render-utils/src/render-utils/stencil_drawMask.slp b/libraries/render-utils/src/render-utils/stencil_drawMask.slp
new file mode 100644
index 0000000000..c2c4bfbebd
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/stencil_drawMask.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawUnitQuadTexcoord
diff --git a/libraries/render-utils/src/render-utils/subsurfaceScattering_drawScattering.slp b/libraries/render-utils/src/render-utils/subsurfaceScattering_drawScattering.slp
new file mode 100644
index 0000000000..c2c4bfbebd
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/subsurfaceScattering_drawScattering.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawUnitQuadTexcoord
diff --git a/libraries/render-utils/src/render-utils/subsurfaceScattering_makeLUT.slp b/libraries/render-utils/src/render-utils/subsurfaceScattering_makeLUT.slp
new file mode 100644
index 0000000000..c2c4bfbebd
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/subsurfaceScattering_makeLUT.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawUnitQuadTexcoord
diff --git a/libraries/render-utils/src/render-utils/subsurfaceScattering_makeProfile.slp b/libraries/render-utils/src/render-utils/subsurfaceScattering_makeProfile.slp
new file mode 100644
index 0000000000..c2c4bfbebd
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/subsurfaceScattering_makeProfile.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawUnitQuadTexcoord
diff --git a/libraries/render-utils/src/render-utils/subsurfaceScattering_makeSpecularBeckmann.slp b/libraries/render-utils/src/render-utils/subsurfaceScattering_makeSpecularBeckmann.slp
new file mode 100644
index 0000000000..c2c4bfbebd
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/subsurfaceScattering_makeSpecularBeckmann.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawUnitQuadTexcoord
diff --git a/libraries/render-utils/src/render-utils/surfaceGeometry_downsampleDepthNormal.slp b/libraries/render-utils/src/render-utils/surfaceGeometry_downsampleDepthNormal.slp
new file mode 100644
index 0000000000..d4d8ec4b01
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/surfaceGeometry_downsampleDepthNormal.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord
diff --git a/libraries/render-utils/src/render-utils/surfaceGeometry_makeCurvature.slp b/libraries/render-utils/src/render-utils/surfaceGeometry_makeCurvature.slp
new file mode 100644
index 0000000000..d4d8ec4b01
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/surfaceGeometry_makeCurvature.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord
diff --git a/libraries/render-utils/src/render-utils/surfaceGeometry_makeLinearDepth.slp b/libraries/render-utils/src/render-utils/surfaceGeometry_makeLinearDepth.slp
new file mode 100644
index 0000000000..d4d8ec4b01
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/surfaceGeometry_makeLinearDepth.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord
diff --git a/libraries/render-utils/src/render-utils/taa.slp b/libraries/render-utils/src/render-utils/taa.slp
new file mode 100644
index 0000000000..c2c4bfbebd
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/taa.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawUnitQuadTexcoord
diff --git a/libraries/render-utils/src/render-utils/taa_blend.slp b/libraries/render-utils/src/render-utils/taa_blend.slp
new file mode 100644
index 0000000000..c2c4bfbebd
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/taa_blend.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawUnitQuadTexcoord
diff --git a/libraries/render-utils/src/render-utils/toneMapping.slp b/libraries/render-utils/src/render-utils/toneMapping.slp
new file mode 100644
index 0000000000..d4d8ec4b01
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/toneMapping.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord
diff --git a/libraries/render-utils/src/render-utils/velocityBuffer_cameraMotion.slp b/libraries/render-utils/src/render-utils/velocityBuffer_cameraMotion.slp
new file mode 100644
index 0000000000..d4d8ec4b01
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/velocityBuffer_cameraMotion.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord
diff --git a/libraries/render-utils/src/render-utils/zone_drawAmbient.slp b/libraries/render-utils/src/render-utils/zone_drawAmbient.slp
new file mode 100644
index 0000000000..a5c2bb33e6
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/zone_drawAmbient.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawTransformUnitQuad
diff --git a/libraries/render-utils/src/render-utils/zone_drawKeyLight.slp b/libraries/render-utils/src/render-utils/zone_drawKeyLight.slp
new file mode 100644
index 0000000000..a5c2bb33e6
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/zone_drawKeyLight.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawTransformUnitQuad
diff --git a/libraries/render-utils/src/render-utils/zone_drawSkybox.slp b/libraries/render-utils/src/render-utils/zone_drawSkybox.slp
new file mode 100644
index 0000000000..a5c2bb33e6
--- /dev/null
+++ b/libraries/render-utils/src/render-utils/zone_drawSkybox.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawTransformUnitQuad
diff --git a/libraries/render/src/render/blurGaussianDepthAwareH.slp b/libraries/render/src/render/blurGaussianDepthAwareH.slp
new file mode 100644
index 0000000000..c2c4bfbebd
--- /dev/null
+++ b/libraries/render/src/render/blurGaussianDepthAwareH.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawUnitQuadTexcoord
diff --git a/libraries/render/src/render/blurGaussianDepthAwareV.slp b/libraries/render/src/render/blurGaussianDepthAwareV.slp
new file mode 100644
index 0000000000..c2c4bfbebd
--- /dev/null
+++ b/libraries/render/src/render/blurGaussianDepthAwareV.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawUnitQuadTexcoord
diff --git a/libraries/render/src/render/blurGaussianH.slp b/libraries/render/src/render/blurGaussianH.slp
new file mode 100644
index 0000000000..c2c4bfbebd
--- /dev/null
+++ b/libraries/render/src/render/blurGaussianH.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawUnitQuadTexcoord
diff --git a/libraries/render/src/render/blurGaussianV.slp b/libraries/render/src/render/blurGaussianV.slp
new file mode 100644
index 0000000000..c2c4bfbebd
--- /dev/null
+++ b/libraries/render/src/render/blurGaussianV.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawUnitQuadTexcoord
diff --git a/libraries/render/src/render/drawCellBounds.slp b/libraries/render/src/render/drawCellBounds.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render/src/render/drawItemBounds.slp b/libraries/render/src/render/drawItemBounds.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render/src/render/drawItemStatus.slp b/libraries/render/src/render/drawItemStatus.slp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/render/src/render/drawLODReticle.slp b/libraries/render/src/render/drawLODReticle.slp
new file mode 100644
index 0000000000..a5c2bb33e6
--- /dev/null
+++ b/libraries/render/src/render/drawLODReticle.slp
@@ -0,0 +1 @@
+VERTEX gpu::vertex::DrawTransformUnitQuad
diff --git a/libraries/shaders/CMakeLists.txt b/libraries/shaders/CMakeLists.txt
index 4f6db48c08..a065c635e7 100644
--- a/libraries/shaders/CMakeLists.txt
+++ b/libraries/shaders/CMakeLists.txt
@@ -1,184 +1,7 @@
-
-set(TARGET_NAME gpu)
-AUTOSCRIBE_SHADER_LIB(gpu)
-AUTOSCRIBE_PROGRAM(NAME drawColor VERTEX DrawTransformVertexPosition FRAGMENT DrawColor)
-AUTOSCRIBE_PROGRAM(NAME drawTransformUnitQuadTextureOpaque VERTEX DrawTransformUnitQuad FRAGMENT DrawTextureOpaque)
-AUTOSCRIBE_PROGRAM(NAME drawTexture VERTEX DrawUnitQuadTexcoord FRAGMENT DrawTexture)
-AUTOSCRIBE_PROGRAM(NAME drawUnitQuatTextureOpaque VERTEX DrawUnitQuadTexcoord FRAGMENT DrawTextureOpaque)
-AUTOSCRIBE_PROGRAM(NAME drawTextureOpaqueTexcoordRect VERTEX DrawTexcoordRectTransformUnitQuad FRAGMENT DrawTextureOpaque)
-AUTOSCRIBE_PROGRAM(NAME drawNothing VERTEX DrawVertexPosition FRAGMENT DrawNada)
-
-set(TARGET_NAME graphics)
-AUTOSCRIBE_SHADER_LIB(gpu)
-AUTOSCRIBE_PROGRAM(NAME skybox)
-
-set(TARGET_NAME display-plugins)
-AUTOSCRIBE_SHADER_LIB(display-plugins)
-AUTOSCRIBE_PROGRAM(NAME InterleavedSrgbToLinear VERTEX gpu::vertex::DrawUnitQuadTexcoord)
-AUTOSCRIBE_PROGRAM(NAME SrgbToLinear VERTEX gpu::vertex::DrawUnitQuadTexcoord)
-
-set(TARGET_NAME procedural)
-AUTOSCRIBE_SHADER_LIB(gpu graphics)
-
-set(TARGET_NAME render)
-AUTOSCRIBE_SHADER_LIB(gpu graphics)
-AUTOSCRIBE_PROGRAM(NAME drawCellBounds)
-AUTOSCRIBE_PROGRAM(NAME drawItemBounds)
-AUTOSCRIBE_PROGRAM(NAME drawItemStatus)
-AUTOSCRIBE_PROGRAM(NAME drawLODReticle VERTEX gpu::vertex::DrawTransformUnitQuad)
-AUTOSCRIBE_PROGRAM(NAME blurGaussianV VERTEX gpu::vertex::DrawUnitQuadTexcoord)
-AUTOSCRIBE_PROGRAM(NAME blurGaussianH VERTEX gpu::vertex::DrawUnitQuadTexcoord)
-AUTOSCRIBE_PROGRAM(NAME blurGaussianDepthAwareV VERTEX gpu::vertex::DrawUnitQuadTexcoord)
-AUTOSCRIBE_PROGRAM(NAME blurGaussianDepthAwareH VERTEX gpu::vertex::DrawUnitQuadTexcoord)
-
-set(TARGET_NAME render-utils)
-AUTOSCRIBE_SHADER_LIB(gpu graphics render)
-AUTOSCRIBE_PROGRAM(NAME animdebugdraw)
-AUTOSCRIBE_PROGRAM(NAME bloomThreshold  VERTEX gpu::vertex::DrawTransformUnitQuad FRAGMENT BloomThreshold)
-AUTOSCRIBE_PROGRAM(NAME bloomApply VERTEX gpu::vertex::DrawTransformUnitQuad FRAGMENT BloomApply)
-AUTOSCRIBE_PROGRAM(NAME directional_ambient_light VERTEX deferred_light)
-AUTOSCRIBE_PROGRAM(NAME directional_ambient_light_shadow VERTEX deferred_light)
-AUTOSCRIBE_PROGRAM(NAME directional_skybox_light VERTEX deferred_light)
-AUTOSCRIBE_PROGRAM(NAME directional_skybox_light_shadow VERTEX deferred_light)
-AUTOSCRIBE_PROGRAM(NAME local_lights_shading VERTEX deferred_light)
-AUTOSCRIBE_PROGRAM(NAME local_lights_drawOutline VERTEX deferred_light)
-AUTOSCRIBE_PROGRAM(NAME forward_simple_textured VERTEX simple)
-AUTOSCRIBE_PROGRAM(NAME forward_simple_textured_unlit VERTEX simple)
-AUTOSCRIBE_PROGRAM(NAME forward_simple_textured_transparent VERTEX simple)
-AUTOSCRIBE_PROGRAM(NAME fxaa_blend VERTEX gpu::vertex::DrawUnitQuadTexcoord)
-AUTOSCRIBE_PROGRAM(NAME glowLine)
-AUTOSCRIBE_PROGRAM(NAME grid VERTEX standardTransformPNTC)
-AUTOSCRIBE_PROGRAM(NAME hmd_ui)
-AUTOSCRIBE_PROGRAM(NAME drawWorkloadProxy)
-AUTOSCRIBE_PROGRAM(NAME drawWorkloadView)
-AUTOSCRIBE_PROGRAM(NAME haze VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord FRAGMENT Haze)
-AUTOSCRIBE_PROGRAM(NAME highlight_aabox VERTEX Highlight_aabox FRAGMENT nop)
-AUTOSCRIBE_PROGRAM(NAME highlight VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord FRAGMENT Highlight)
-AUTOSCRIBE_PROGRAM(NAME highlight_filled VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord FRAGMENT Highlight_filled)
-AUTOSCRIBE_PROGRAM(NAME lightClusters_drawGrid)
-AUTOSCRIBE_PROGRAM(NAME lightClusters_drawClusterFromDepth VERTEX gpu::vertex::DrawUnitQuadTexcoord)
-AUTOSCRIBE_PROGRAM(NAME lightClusters_drawClusterContent VERTEX gpu::vertex::DrawUnitQuadTexcoord)
-AUTOSCRIBE_PROGRAM(NAME simple_opaque_web_browser VERTEX simple)
-AUTOSCRIBE_PROGRAM(NAME simple_transparent_web_browser VERTEX simple)
-AUTOSCRIBE_PROGRAM(NAME simple_textured VERTEX simple)
-AUTOSCRIBE_PROGRAM(NAME simple_textured_unlit VERTEX simple)
-AUTOSCRIBE_PROGRAM(NAME simple_transparent_textured VERTEX simple)
-AUTOSCRIBE_PROGRAM(NAME simple_transparent_textured_unlit VERTEX simple)
-AUTOSCRIBE_PROGRAM(NAME simple_textured_fade VERTEX simple_fade)
-AUTOSCRIBE_PROGRAM(NAME simple_textured_unlit_fade VERTEX simple_fade)
-AUTOSCRIBE_PROGRAM(NAME simple_transparent_textured_fade VERTEX simple_fade)
-AUTOSCRIBE_PROGRAM(NAME simple_transparent_textured_unlit_fade VERTEX simple_fade)
-
-AUTOSCRIBE_PROGRAM(NAME parabola)
-
-AUTOSCRIBE_PROGRAM(NAME sdf_text3D)
-AUTOSCRIBE_PROGRAM(NAME sdf_text3D_transparent VERTEX sdf_text3D)
-
-AUTOSCRIBE_PROGRAM(NAME ssao_makeOcclusion VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord)
-AUTOSCRIBE_PROGRAM(NAME ssao_makeHorizontalBlur VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord)
-AUTOSCRIBE_PROGRAM(NAME ssao_makeVerticalBlur VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord)
-AUTOSCRIBE_PROGRAM(NAME ssao_debugOcclusion VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord)
-
-AUTOSCRIBE_PROGRAM(NAME stencil_drawMask VERTEX gpu::vertex::DrawUnitQuadTexcoord)
-
-AUTOSCRIBE_PROGRAM(NAME standardDrawTexture VERTEX standardTransformPNTC)
-AUTOSCRIBE_PROGRAM(NAME standardDrawTextureNoBlend VERTEX standardTransformPNTC)
-
-AUTOSCRIBE_PROGRAM(NAME subsurfaceScattering_makeProfile VERTEX gpu::vertex::DrawUnitQuadTexcoord)
-AUTOSCRIBE_PROGRAM(NAME subsurfaceScattering_makeLUT VERTEX gpu::vertex::DrawUnitQuadTexcoord)
-AUTOSCRIBE_PROGRAM(NAME subsurfaceScattering_makeSpecularBeckmann VERTEX gpu::vertex::DrawUnitQuadTexcoord)
-AUTOSCRIBE_PROGRAM(NAME subsurfaceScattering_drawScattering VERTEX gpu::vertex::DrawUnitQuadTexcoord)
-
-AUTOSCRIBE_PROGRAM(NAME surfaceGeometry_makeLinearDepth VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord)
-AUTOSCRIBE_PROGRAM(NAME surfaceGeometry_downsampleDepthNormal VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord)
-AUTOSCRIBE_PROGRAM(NAME surfaceGeometry_makeCurvature VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord)
-
-
-AUTOSCRIBE_PROGRAM(NAME taa VERTEX gpu::vertex::DrawUnitQuadTexcoord)
-AUTOSCRIBE_PROGRAM(NAME taa_blend VERTEX gpu::vertex::DrawUnitQuadTexcoord)
-
-AUTOSCRIBE_PROGRAM(NAME simple FRAGMENT forward_simple_textured)
-AUTOSCRIBE_PROGRAM(NAME simpleUnlit VERTEX simple FRAGMENT forward_simple_textured_unlit)
-AUTOSCRIBE_PROGRAM(NAME simpleTranslucent VERTEX simple FRAGMENT forward_simple_textured_transparent)
-AUTOSCRIBE_PROGRAM(NAME simpleTranslucentUnlit VERTEX simple FRAGMENT simple_transparent_textured_unlit)
-
-AUTOSCRIBE_PROGRAM(NAME forward_model VERTEX model)
-AUTOSCRIBE_PROGRAM(NAME forward_model_translucent VERTEX model)
-AUTOSCRIBE_PROGRAM(NAME forward_model_unlit VERTEX model)
-AUTOSCRIBE_PROGRAM(NAME forward_model_normal_map VERTEX model_normal_map)
-AUTOSCRIBE_PROGRAM(NAME forward_model_normal_map_translucent VERTEX model_normal_map FRAGMENT forward_model_translucent)
-
-AUTOSCRIBE_PROGRAM(NAME forward_skin_model VERTEX skin_model FRAGMENT forward_model)
-AUTOSCRIBE_PROGRAM(NAME forward_skin_model_normal_map VERTEX skin_model_normal_map FRAGMENT forward_model_normal_map)
-AUTOSCRIBE_PROGRAM(NAME forward_skin_model_dq VERTEX skin_model_dq FRAGMENT forward_model)
-AUTOSCRIBE_PROGRAM(NAME forward_skin_model_normal_map_dq VERTEX skin_model_normal_map_dq FRAGMENT forward_model_normal_map)
-
-AUTOSCRIBE_PROGRAM(NAME forward_skin_translucent VERTEX skin_model FRAGMENT forward_model_translucent)
-AUTOSCRIBE_PROGRAM(NAME forward_skin_translucent_normal_map VERTEX skin_model_normal_map FRAGMENT forward_model_translucent)
-AUTOSCRIBE_PROGRAM(NAME forward_skin_translucent_dq VERTEX skin_model_dq FRAGMENT forward_model_translucent)
-AUTOSCRIBE_PROGRAM(NAME forward_skin_translucent_normal_map_dq VERTEX skin_model_normal_map_dq FRAGMENT forward_model_translucent)
-    
-AUTOSCRIBE_PROGRAM(NAME model)
-AUTOSCRIBE_PROGRAM(NAME model_unlit VERTEX model)
-AUTOSCRIBE_PROGRAM(NAME model_normal_map)
-AUTOSCRIBE_PROGRAM(NAME model_translucent)
-AUTOSCRIBE_PROGRAM(NAME model_translucent_normal_map)
-AUTOSCRIBE_PROGRAM(NAME model_translucent_unlit VERTEX model)
-AUTOSCRIBE_PROGRAM(NAME model_lightmap)
-AUTOSCRIBE_PROGRAM(NAME model_lightmap_normal_map)
-AUTOSCRIBE_PROGRAM(NAME model_shadow)
-AUTOSCRIBE_PROGRAM(NAME model_shadow_fade)
-
-AUTOSCRIBE_PROGRAM(NAME skin_model FRAGMENT model)
-AUTOSCRIBE_PROGRAM(NAME skin_model_normal_map FRAGMENT model_normal_map)
-AUTOSCRIBE_PROGRAM(NAME skin_model_normal_map_fade FRAGMENT model_normal_map_fade)
-AUTOSCRIBE_PROGRAM(NAME skin_model_translucent VERTEX skin_model_fade FRAGMENT model_translucent)
-AUTOSCRIBE_PROGRAM(NAME skin_model_translucent_fade VERTEX skin_model_fade FRAGMENT model_translucent_fade)
-AUTOSCRIBE_PROGRAM(NAME skin_model_normal_map_translucent VERTEX skin_model_normal_map_fade FRAGMENT model_translucent_normal_map)
-AUTOSCRIBE_PROGRAM(NAME skin_model_normal_map_translucent_fade VERTEX skin_model_normal_map_fade FRAGMENT model_translucent_normal_map_fade)
-AUTOSCRIBE_PROGRAM(NAME skin_model_fade FRAGMENT model_fade)
-AUTOSCRIBE_PROGRAM(NAME skin_model_shadow FRAGMENT model_shadow)
-AUTOSCRIBE_PROGRAM(NAME skin_model_shadow_fade FRAGMENT model_shadow)
-
-
-AUTOSCRIBE_PROGRAM(NAME skin_model_dq FRAGMENT model)
-AUTOSCRIBE_PROGRAM(NAME skin_model_fade_dq FRAGMENT model_fade)
-AUTOSCRIBE_PROGRAM(NAME skin_model_normal_map_dq FRAGMENT model_normal_map)
-AUTOSCRIBE_PROGRAM(NAME skin_model_normal_map_fade_dq FRAGMENT model_normal_map_fade)
-AUTOSCRIBE_PROGRAM(NAME skin_model_translucent_dq VERTEX skin_model_fade_dq FRAGMENT model_translucent)
-AUTOSCRIBE_PROGRAM(NAME skin_model_translucent_fade_dq VERTEX skin_model_fade_dq FRAGMENT model_translucent_fade)
-AUTOSCRIBE_PROGRAM(NAME skin_model_normal_map_translucent_dq VERTEX skin_model_normal_map_fade_dq FRAGMENT model_translucent_normal_map)
-AUTOSCRIBE_PROGRAM(NAME skin_model_normal_map_translucent_fade_dq VERTEX skin_model_normal_map_fade_dq FRAGMENT model_translucent_normal_map_fade)
-
-AUTOSCRIBE_PROGRAM(NAME skin_model_shadow_dq FRAGMENT model_shadow)
-AUTOSCRIBE_PROGRAM(NAME skin_model_shadow_fade_dq FRAGMENT model_shadow_fade)
-   
-AUTOSCRIBE_PROGRAM(NAME model_fade)
-AUTOSCRIBE_PROGRAM(NAME model_unlit_fade VERTEX model_fade)
-AUTOSCRIBE_PROGRAM(NAME model_translucent_unlit_fade VERTEX model_fade)
-AUTOSCRIBE_PROGRAM(NAME model_normal_map_fade)
-AUTOSCRIBE_PROGRAM(NAME model_translucent_normal_map_fade VERTEX model_translucent_normal_map)
-AUTOSCRIBE_PROGRAM(NAME model_translucent_fade VERTEX model_fade)
-AUTOSCRIBE_PROGRAM(NAME model_lightmap_fade)
-AUTOSCRIBE_PROGRAM(NAME model_lightmap_normal_map_fade)
-
-AUTOSCRIBE_PROGRAM(NAME zone_drawKeyLight VERTEX gpu::vertex::DrawTransformUnitQuad)
-AUTOSCRIBE_PROGRAM(NAME zone_drawSkybox VERTEX gpu::vertex::DrawTransformUnitQuad)
-AUTOSCRIBE_PROGRAM(NAME zone_drawAmbient VERTEX gpu::vertex::DrawTransformUnitQuad)
-
-AUTOSCRIBE_PROGRAM(NAME toneMapping VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord)
-AUTOSCRIBE_PROGRAM(NAME velocityBuffer_cameraMotion VERTEX gpu::vertex::DrawViewportQuadTransformTexcoord)
-
-set(TARGET_NAME entities-renderer)
-AUTOSCRIBE_SHADER_LIB(gpu graphics procedural render render-utils)
-AUTOSCRIBE_PROGRAM(NAME polyvox)
-AUTOSCRIBE_PROGRAM(NAME polyvox_fade)
-AUTOSCRIBE_PROGRAM(NAME paintStroke)
-AUTOSCRIBE_PROGRAM(NAME textured_particle)
-
 set(TARGET_NAME shaders)
-autoscribe_shader_finish()
+autoscribe_shader_libs(gpu graphics display-plugins procedural render render-utils entities-renderer)
 setup_hifi_library(Gui)
+
 add_dependencies(${TARGET_NAME} compiled_shaders reflected_shaders)
 
 # Despite the dependency above, the autogen logic will attempt to compile the QRC before 
diff --git a/scripts/system/controllers/controllerModules/teleport.js b/scripts/system/controllers/controllerModules/teleport.js
index 92e3168147..db95f6b09b 100644
--- a/scripts/system/controllers/controllerModules/teleport.js
+++ b/scripts/system/controllers/controllerModules/teleport.js
@@ -190,8 +190,42 @@ Script.include("/~/system/libraries/controllers.js");
             Pointers.removePointer(this.teleportParabolaHeadInvisible);
         };
 
-        this.buttonPress = function(value) {
-            _this.buttonValue = value;
+        this.axisButtonStateX = 0; // Left/right axis button pressed.
+        this.axisButtonStateY = 0; // Up/down axis button pressed.
+        this.BUTTON_TRANSITION_DELAY = 100; // Allow time for transition from direction buttons to touch-pad.
+
+        this.axisButtonChangeX = function (value) {
+            if (value !== 0) {
+                _this.axisButtonStateX = value;
+            } else {
+                // Delay direction button release until after teleport possibly pressed.
+                Script.setTimeout(function () {
+                    _this.axisButtonStateX = value;
+                }, _this.BUTTON_TRANSITION_DELAY);
+            }
+        };
+
+        this.axisButtonChangeY = function (value) {
+            if (value !== 0) {
+                _this.axisButtonStateY = value;
+            } else {
+                // Delay direction button release until after teleport possibly pressed.
+                Script.setTimeout(function () {
+                    _this.axisButtonStateY = value;
+                }, _this.BUTTON_TRANSITION_DELAY);
+            }
+        };
+
+        this.teleportLocked = function () {
+            // Lock teleport if in advanced movement mode and have just transitioned from pressing a direction button.
+            return Controller.getValue(Controller.Hardware.Application.AdvancedMovement)
+                && (_this.axisButtonStateX !== 0 || _this.axisButtonStateY !== 0);
+        };
+
+        this.buttonPress = function (value) {
+            if (value === 0 || !_this.teleportLocked()) {
+                _this.buttonValue = value;
+            }
         };
 
         this.parameters = makeDispatcherModuleParameters(
@@ -347,6 +381,7 @@ Script.include("/~/system/libraries/controllers.js");
     }
 
     var mappingName, teleportMapping;
+    var isViveMapped = false;
 
     function parseJSON(json) {
         try {
@@ -390,12 +425,39 @@ Script.include("/~/system/libraries/controllers.js");
         }
     }
 
+    function registerViveTeleportMapping() {
+        // Disable Vive teleport if touch is transitioning across touch-pad after pressing a direction button.
+        if (Controller.Hardware.Vive) {
+            var mappingName = 'Hifi-Teleporter-Dev-Vive-' + Math.random();
+            var viveTeleportMapping = Controller.newMapping(mappingName);
+            viveTeleportMapping.from(Controller.Hardware.Vive.LSX).peek().to(leftTeleporter.axisButtonChangeX);
+            viveTeleportMapping.from(Controller.Hardware.Vive.LSY).peek().to(leftTeleporter.axisButtonChangeY);
+            viveTeleportMapping.from(Controller.Hardware.Vive.RSX).peek().to(rightTeleporter.axisButtonChangeX);
+            viveTeleportMapping.from(Controller.Hardware.Vive.RSY).peek().to(rightTeleporter.axisButtonChangeY);
+            Controller.enableMapping(mappingName);
+            isViveMapped = true;
+        }
+    }
+
+    function onHardwareChanged() {
+        // Controller.Hardware.Vive is not immediately available at Interface start-up.
+        if (!isViveMapped && Controller.Hardware.Vive) {
+            registerViveTeleportMapping();
+        }
+    }
+
+    Controller.hardwareChanged.connect(onHardwareChanged);
+
     function registerMappings() {
         mappingName = 'Hifi-Teleporter-Dev-' + Math.random();
         teleportMapping = Controller.newMapping(mappingName);
 
-        teleportMapping.from(Controller.Standard.RightPrimaryThumb).peek().to(rightTeleporter.buttonPress);
+        // Vive teleport button lock-out.
+        registerViveTeleportMapping();
+
+        // Teleport actions.
         teleportMapping.from(Controller.Standard.LeftPrimaryThumb).peek().to(leftTeleporter.buttonPress);
+        teleportMapping.from(Controller.Standard.RightPrimaryThumb).peek().to(rightTeleporter.buttonPress);
     }
 
     var leftTeleporter = new Teleporter(LEFT_HAND);
@@ -407,6 +469,7 @@ Script.include("/~/system/libraries/controllers.js");
     Controller.enableMapping(mappingName);
 
     function cleanup() {
+        Controller.hardwareChanged.disconnect(onHardwareChanged);
         teleportMapping.disable();
         leftTeleporter.cleanup();
         rightTeleporter.cleanup();
diff --git a/tests-manual/gpu-textures/CMakeLists.txt b/tests-manual/gpu-textures/CMakeLists.txt
index c10f2eda3f..84f5027411 100644
--- a/tests-manual/gpu-textures/CMakeLists.txt
+++ b/tests-manual/gpu-textures/CMakeLists.txt
@@ -1,5 +1,4 @@
 set(TARGET_NAME gpu-textures-tests)
-AUTOSCRIBE_SHADER_LIB(gpu graphics render-utils)
 # This is not a testcase -- just set it up as a regular hifi project
 setup_hifi_project(Quick Gui Script)
 setup_memory_debugger()
diff --git a/tests-manual/gpu/CMakeLists.txt b/tests-manual/gpu/CMakeLists.txt
index 336dcf753c..30218f3f97 100644
--- a/tests-manual/gpu/CMakeLists.txt
+++ b/tests-manual/gpu/CMakeLists.txt
@@ -1,5 +1,4 @@
 set(TARGET_NAME gpu-test)
-AUTOSCRIBE_SHADER_LIB(gpu graphics render-utils)
 # This is not a testcase -- just set it up as a regular hifi project
 setup_hifi_project(Quick Gui Script)
 setup_memory_debugger()
diff --git a/tests/shaders/src/ShaderTests.cpp b/tests/shaders/src/ShaderTests.cpp
index 4c6b8fc38c..4dd15710f9 100644
--- a/tests/shaders/src/ShaderTests.cpp
+++ b/tests/shaders/src/ShaderTests.cpp
@@ -29,20 +29,32 @@
 #include <gl/GLHelpers.h>
 #include <gpu/gl/GLBackend.h>
 #include <gpu/gl/GLShader.h>
+#include <gl/QOpenGLContextWrapper.h>
 
 QTEST_MAIN(ShaderTests)
 
 #pragma optimize("", off)
 void ShaderTests::initTestCase() {
     _window = new QWindow();
+    _window->setSurfaceType(QSurface::SurfaceType::OpenGLSurface);
     _context = new ::gl::Context(_window);
     getDefaultOpenGLSurfaceFormat();
     _context->create();
     if (!_context->makeCurrent()) {
         qFatal("Unable to make test GL context current");
     }
+    QOpenGLContextWrapper(_context->qglContext()).makeCurrent(_window);
+    if (!_context->makeCurrent()) {
+        qFatal("Unable to make test GL context current");
+    }
     gl::initModuleGl();
+    if (!_context->makeCurrent()) {
+        qFatal("Unable to make test GL context current");
+    }
     gpu::Context::init<gpu::gl::GLBackend>();
+    if (!_context->makeCurrent()) {
+        qFatal("Unable to make test GL context current");
+    }
     _gpuContext = std::make_shared<gpu::Context>();
 }
 
@@ -185,7 +197,7 @@ void ShaderTests::testShaderLoad() {
     uint32_t maxShader = 0;
     try {
 
-#if 1
+#if 0
         uint32_t testPrograms[] = {
             shader::render_utils::program::parabola,
             shader::INVALID_PROGRAM,
@@ -229,12 +241,6 @@ void ShaderTests::testShaderLoad() {
                 // Uniforms
                 {
                     auto uniforms = gl::Uniform::load(program);
-                    for (const auto& uniform : uniforms) {
-                        GLint offset, size;
-                        glGetActiveUniformsiv(program, 1, (GLuint*)&uniform.index, GL_UNIFORM_OFFSET, &offset);
-                        glGetActiveUniformsiv(program, 1, (GLuint*)&uniform.index, GL_UNIFORM_SIZE, &size);
-                        qDebug() << uniform.name.c_str() << " size " << size << "offset" << offset;
-                    }
                     const auto& uniformRemap = shaderObject.uniformRemap;
                     auto expectedUniforms = expectedBindings[gpu::Shader::BindingType::UNIFORM];
                     if (!compareBindings(uniforms, expectedUniforms)) {