The following instructions used D3D11 calls to compute results, and have been
moved to an API wrapper class that is defined in d3d11_shaderdebug.cpp:
transcendentals (rcp, rsqrt, exp2, log2, and sincos), sample info/pos, bufinfo,
resinfo, and sample/load/gather/lod.
* This also applies to libEGL - if a user calls dlsym(RTLD_NEXT) to fetch a
libGL symbol without being linked against libGL nor ever dlopen'ing it, it
will retrieve our hook but libGL will still not be loaded meaning we can't
call onwards. If we get to the last second where our hook has been called but
the real library is not loaded we need to load it manually.
This prevents static data like WrappedTexture<>::m_TextureList from being accessed from different device instances on different threads. Each device instance has its own mutex, and so is unable to protect the static data from access through other instances. The static data is only used in the replay app, which is single threaded, so accessing the static maps is not a problem there.
This allows finer control of the initialization/reset behaviour of
resources based on their ref type.
Currently, these policies only apply to the initialization/reseting of
VkDeviceMemory and VkImage resources.
Change-Id: Ib647cbaf99b650e8da40d07944400ace7dde504d
Previously, the ref type of the a VkDeviceMemory or VkImage resource
was calculated as the max of the ref types of the subresources. This
reliance on the ordering of the `FrameRefType` enum values is fragile--
in particular, this makes it more difficult to add new `FrameRefType`
alternatives.
Now, the ref type of composite resources are calculated using
`ComposeFrameRefsDisjoint` instead of `max`.
Change-Id: Id5db68b6756555cdc6b068d28f1b72cb827f3d1e
* GLES doesn't support ARB_occlusion_query2 at all, and ARB_timer_query (or
equivalent) may not be available for durations.
* Check for ARB_query_buffer_object before pushing or popping query buffer
binding.
* Technically if you create a context with *CreateContextAttribsARB and don't
specify a profile mask at all, the spec says the value of the profile bit is
CORE_PROFILE_BIT. In practice this means drivers may or may not give you a
core or compatibility profile.
* However what we're really looking for here is the chance that the user code
will use only modern GL or will use deprecated functionality, and in that case
the high likelihood is if they omit the PROFILE_BIT entirely they are probably
unaware of it, rather than letting it set its default value.
* If a buffer has been marked as dirty mid-frame but wasn't dirty at the start
of the frame then it won't have initial contents. We have to treat it as if it
wasn't dirty and fall back to using our existing data for it, assuming that is
a valid way to pre-populate the map's shadow buffer.