Browse Source
Merge pull request #2300 from FernandoS27/null-shader
shader_cache: Permit a Null Shader in case of a bad host_ptr.
pull/15/merge
bunnei
7 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
22 additions and
0 deletions
-
src/common/assert.h
-
src/video_core/renderer_opengl/gl_shader_cache.cpp
|
|
|
@ -57,3 +57,21 @@ __declspec(noinline, noreturn) |
|
|
|
|
|
|
|
#define UNIMPLEMENTED_IF(cond) ASSERT_MSG(!(cond), "Unimplemented code!") |
|
|
|
#define UNIMPLEMENTED_IF_MSG(cond, ...) ASSERT_MSG(!(cond), __VA_ARGS__) |
|
|
|
|
|
|
|
// If the assert is ignored, execute _b_ |
|
|
|
#define ASSERT_OR_EXECUTE(_a_, _b_) \ |
|
|
|
do { \ |
|
|
|
ASSERT(_a_); \ |
|
|
|
if (!(_a_)) { \ |
|
|
|
_b_ \ |
|
|
|
} \ |
|
|
|
} while (0) |
|
|
|
|
|
|
|
// If the assert is ignored, execute _b_ |
|
|
|
#define ASSERT_OR_EXECUTE_MSG(_a_, _b_, ...) \ |
|
|
|
do { \ |
|
|
|
ASSERT_MSG(_a_, __VA_ARGS__); \ |
|
|
|
if (!(_a_)) { \ |
|
|
|
_b_ \ |
|
|
|
} \ |
|
|
|
} while (0) |
|
|
|
@ -39,6 +39,10 @@ GPUVAddr GetShaderAddress(Maxwell::ShaderProgram program) { |
|
|
|
/// Gets the shader program code from memory for the specified address
|
|
|
|
ProgramCode GetShaderCode(const u8* host_ptr) { |
|
|
|
ProgramCode program_code(VideoCommon::Shader::MAX_PROGRAM_LENGTH); |
|
|
|
ASSERT_OR_EXECUTE(host_ptr != nullptr, { |
|
|
|
std::fill(program_code.begin(), program_code.end(), 0); |
|
|
|
return program_code; |
|
|
|
}); |
|
|
|
std::memcpy(program_code.data(), host_ptr, program_code.size() * sizeof(u64)); |
|
|
|
return program_code; |
|
|
|
} |
|
|
|
|