2017-11-23 14:15:17 +01:00
|
|
|
#pragma once
|
2017-11-23 23:31:24 +01:00
|
|
|
#include "c-ops.hh"
|
|
|
|
#include "ui-shaders.hh"
|
|
|
|
#include "ui-texture.hh"
|
2017-11-23 14:15:17 +01:00
|
|
|
|
|
|
|
|
|
|
|
namespace ops {
|
|
|
|
|
|
|
|
struct T_OpContext
|
|
|
|
{
|
|
|
|
T_OpProgram& program; // The program
|
|
|
|
|
|
|
|
uint32_t instrPtr; // Instruction pointer
|
|
|
|
bool aborted{ false }; // Did the program fail?
|
|
|
|
|
|
|
|
T_Array< T_OpValue > values; // VM data
|
|
|
|
T_Array< T_OpValue > stack; // Main VM stack
|
|
|
|
T_Array< float > initialInputs; // Initial input values
|
|
|
|
|
|
|
|
T_OpValue wreg; // Work register
|
|
|
|
double x87stack[ 8 ]; // x87 FPU emulation stack
|
|
|
|
uint32_t x87sp; // x87 FPU emulation stack pointer
|
|
|
|
|
|
|
|
P_SyncOverrideSection installOverrides; // Install UI overrides
|
|
|
|
|
|
|
|
// Allocated resources
|
|
|
|
T_Array< T_OwnPtr< T_Rendertarget > > framebuffers;
|
|
|
|
T_Array< T_OwnPtr< T_ShaderProgram > > programs;
|
|
|
|
T_Array< T_OwnPtr< T_ShaderPipeline > > pipelines;
|
|
|
|
T_Array< T_OwnPtr< T_TextureSampler > > samplers;
|
|
|
|
T_Array< T_OwnPtr< T_Texture > > textures;
|
|
|
|
|
|
|
|
T_Array< T_String > profiling; // Profiling sections that have been started
|
|
|
|
int32_t curFb{ -1 }; // Index of current framebuffer
|
|
|
|
|
|
|
|
enum E_RunTarget {
|
|
|
|
R_INIT ,
|
|
|
|
R_RENDER
|
|
|
|
};
|
|
|
|
|
|
|
|
explicit T_OpContext( T_OpProgram& program ) noexcept;
|
|
|
|
void run( E_RunTarget target ,
|
|
|
|
float time ,
|
|
|
|
float width ,
|
|
|
|
float height );
|
|
|
|
|
|
|
|
private:
|
|
|
|
void ensureStack( T_Op const& op ,
|
|
|
|
uint32_t min );
|
|
|
|
void ensureFpuStack( T_Op const& op ,
|
|
|
|
uint32_t minStacked ,
|
|
|
|
uint32_t minFree );
|
|
|
|
void checkAddress( T_Op const& op ,
|
|
|
|
uint32_t address );
|
|
|
|
};
|
|
|
|
|
|
|
|
class X_OpFailure : public std::exception
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
X_OpFailure( ) = delete;
|
|
|
|
DEF_COPY( X_OpFailure );
|
|
|
|
DEF_MOVE( X_OpFailure );
|
|
|
|
|
|
|
|
X_OpFailure(
|
|
|
|
T_Op const& op ,
|
|
|
|
T_String error ) noexcept;
|
|
|
|
|
|
|
|
T_Op const& op( ) const noexcept
|
|
|
|
{ return *op_; }
|
|
|
|
T_String const& error( ) const noexcept
|
|
|
|
{ return error_; }
|
|
|
|
|
|
|
|
char const* what( ) const noexcept override;
|
|
|
|
|
|
|
|
private:
|
|
|
|
T_Op const* op_;
|
|
|
|
T_String error_;
|
|
|
|
T_String fullMessage_;
|
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace ops
|