WIP: Vulkan: Workbench #107886
|
@ -11,6 +11,8 @@
|
|||
|
||||
#include "IMB_imbuf_types.h"
|
||||
|
||||
#include "GPU_capabilities.h"
|
||||
|
||||
#include "BLI_math_matrix_types.hh"
|
||||
#include "BLI_math_vector_types.hh"
|
||||
|
||||
|
@ -509,7 +511,9 @@ template<typename TextureMethod> class ScreenSpaceDrawingMode : public AbstractD
|
|||
offset++;
|
||||
}
|
||||
}
|
||||
IMB_gpu_clamp_half_float(&extracted_buffer);
|
||||
if (!GPU_texture_clamp_to_half()) {
|
||||
IMB_gpu_clamp_half_float(tile_buffer);
|
||||
}
|
||||
|
||||
GPU_texture_update_sub(texture,
|
||||
GPU_DATA_FLOAT,
|
||||
|
@ -562,7 +566,9 @@ template<typename TextureMethod> class ScreenSpaceDrawingMode : public AbstractD
|
|||
}
|
||||
BKE_image_release_ibuf(image, tile_buffer, lock);
|
||||
}
|
||||
IMB_gpu_clamp_half_float(&texture_buffer);
|
||||
if (!GPU_texture_clamp_to_half()) {
|
||||
IMB_gpu_clamp_half_float(&texture_buffer);
|
||||
}
|
||||
GPU_texture_update(info.texture, GPU_DATA_FLOAT, texture_buffer.float_buffer.data);
|
||||
imb_freerectImbuf_all(&texture_buffer);
|
||||
}
|
||||
|
|
|
@ -55,6 +55,9 @@ bool GPU_shader_draw_parameters_support(void);
|
|||
bool GPU_mem_stats_supported(void);
|
||||
void GPU_mem_stats_get(int *totalmem, int *freemem);
|
||||
|
||||
/* Check if the active GPU backend automatically clamp values to fit in 16F. */
|
||||
bool GPU_texture_clamp_to_half(void);
|
||||
|
||||
/**
|
||||
* Return support for the active context + window.
|
||||
*/
|
||||
|
|
|
@ -201,6 +201,11 @@ bool GPU_transform_feedback_support(void)
|
|||
return GCaps.transform_feedback_support;
|
||||
}
|
||||
|
||||
bool GPU_texture_clamp_to_half(void)
|
||||
{
|
||||
return GCaps.texture_clamp_to_half;
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
|
|
|
@ -56,6 +56,7 @@ struct GPUCapabilities {
|
|||
bool use_hq_normals_workaround = false;
|
||||
bool clear_viewport_workaround = false;
|
||||
/* Vulkan related workarounds. */
|
||||
bool texture_clamp_to_half = false;
|
||||
|
||||
/* Metal related workarounds. */
|
||||
/* Minimum per-vertex stride in bytes (For a vertex buffer). */
|
||||
|
|
|
@ -193,6 +193,7 @@ void VKBackend::capabilities_init(VKDevice &device)
|
|||
GCaps.compute_shader_support = true;
|
||||
GCaps.shader_storage_buffer_objects_support = true;
|
||||
GCaps.shader_image_load_store_support = true;
|
||||
GCaps.texture_clamp_to_half = true;
|
||||
|
||||
GCaps.max_texture_size = max_ii(limits.maxImageDimension1D, limits.maxImageDimension2D);
|
||||
GCaps.max_texture_3d_size = limits.maxImageDimension3D;
|
||||
|
|
Loading…
Reference in New Issue